三.登录,注册功能

1.注册功能实现:

  EMError *error = [[EMClient sharedClient] registerWithUsername:weakself.usernameTextField.text password:weakself.passwordTextField.text];

注意:
建议开辟新的线程去请求注册,切到主线程中判断是否注册成功;
如果成功 error就为空 失败则error.code 根据code不同情况进行反馈。

2.登录功能实现:

(1).实现代码

 EMError *error = [[EMClient sharedClient] loginWithUsername:username password:password];

注意:也是需要开辟线程去处理,同注册功能。

(2).登录成功的时候 :

//设置是否自动登录
[[EMClient sharedClient].options setIsAutoLogin:NO];

//获取数据库中数据
[MBProgressHUD showHUDAddedTo:weakself.view animated:YES];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    // iOS专用,数据迁移到SDK3.0
    [[EMClient sharedClient] migrateDatabaseToLatestSDK];
    dispatch_async(dispatch_get_main_queue(), ^{
        // 异步获取用户加入的群组信息
        [[ChatDemoHelper shareHelper] asyncGroupFromServer];
        // 异步获取所有的会话信息
        [[ChatDemoHelper shareHelper] asyncConversationFromDB];
        // 从服务器获取用户的推送属性
        [[ChatDemoHelper shareHelper] asyncPushOptions];
        [MBProgressHUD hideAllHUDsForView:weakself.view animated:YES];
        //发送自动登陆状态通知
        [[NSNotificationCenter defaultCenter] postNotificationName:KNOTIFICATION_LOGINCHANGE object:@([[EMClient sharedClient] isLoggedIn])];
        
        //保存最近一次登录用户名
        [LZDataBaseTool saveLastLoginUsername];
    });
});
          

(3)上面成功后异步获取群组,会话和推送属性等的方法详情

#pragma mark - async Data

// 从服务器获取用户的推送属性
- (void)asyncPushOptions
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        EMError *error = nil;
        // 从服务器获取推送属性(获取推送的信息)
        [[EMClient sharedClient] getPushOptionsFromServerWithError:&error];
    });
    
}
// 异步获取用户加入的群组信息
- (void)asyncGroupFromServer
{
    __weak typeof(self) weakself = self;
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        // 获取用户所有群组
        [[EMClient sharedClient].groupManager getJoinedGroups];
        EMError *error = nil;
        // 从服务器获取用户所有的群组,成功后更新DB和内存中的群组列表
        [[EMClient sharedClient].groupManager getMyGroupsFromServerWithError:&error];
        // 成功后刷新群组的界面
        if (!error) {
            if (weakself.contactViewVC) {
                dispatch_async(dispatch_get_main_queue(), ^{
                    [weakself.contactViewVC reloadGroupView];
                });
            }
        }
    });
}
// 异步获取所有的会话信息
- (void)asyncConversationFromDB
{
    __weak typeof(self) weakself = self;
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        // 获取所有会话,如果内存中不存在会从DB中加载
        NSArray *array = [[EMClient sharedClient].chatManager getAllConversations];
        [array enumerateObjectsUsingBlock:^(EMConversation *conversation, NSUInteger idx, BOOL *stop){
            //如果会话的最新一条消息为空,就删除该会话
            if(conversation.latestMessage == nil){
                [[EMClient sharedClient].chatManager deleteConversation:conversation.conversationId isDeleteMessages:NO completion:nil];
            }
        }];
        // 成功后刷新群组的界面
        dispatch_async(dispatch_get_main_queue(), ^{
            if (weakself.conversationListVC) {
                [weakself.conversationListVC refreshDataSource];
            }
            
            if (weakself.mainVC) {
                [weakself.mainVC setupUnreadMessageCount];
            }
        });
    });
}

3.EMClientDelegate 的介绍
ChatDemoHelper遵循EMClientDelegate ;
ChatDemoHelper 这个类来处理所有被动收到服务器推送的消息:

EMClientDelegate 的所有回调方法介绍如下:

/*!
 *  SDK连接服务器的状态变化时会接收到该回调
 *
 *  有以下几种情况, 会引起该方法的调用:
 *  1. 登录成功后, 手机无法上网时, 会调用该回调
 *  2. 登录成功后, 网络状态变化时, 会调用该回调
 */
- (void)connectionStateDidChange:(EMConnectionState)aConnectionState;

/*!
 *  自动登录失败时的回调
 */
- (void)autoLoginDidCompleteWithError:(EMError *)aError;

/*!
 *  当前登录账号在其它设备登录时会接收到此回调
 */
- (void)userAccountDidLoginFromOtherDevice;

/*!
 *  当前登录账号已经被从服务器端删除时会收到该回调
 */
- (void)userAccountDidRemoveFromServer;

/*!
 *  服务被禁用
 */
- (void)userDidForbidByServer;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • error code(错误代码)=0是操作成功完成。error code(错误代码)=1是功能错误。error c...
    Heikki_阅读 3,549评论 1 9
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,774评论 19 139
  • error code(错误代码)=2000是无效的像素格式。error code(错误代码)=2001是指定的驱动...
    Heikki_阅读 2,226评论 0 4
  • 互联网行业的会很多,会议上目标人群也比较精准,因此经常有很多公司赞助各类技术大会,在展位上进行宣传、吸引用户关注、...
    Sting阅读 1,042评论 0 0
  • 混黑道有四样一定要保护好。身边的兄弟,怀里的女人,脚下的地盘,自己的面子 第一天开业就有斗殴发生,有人报警,没...
    o0乐明0o阅读 537评论 0 0

友情链接更多精彩内容