美文网首页环信
三.登录,注册功能

三.登录,注册功能

作者: 小白哥有话说 | 来源:发表于2017-01-09 16:02 被阅读423次

    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;
    
    

    相关文章

      网友评论

        本文标题:三.登录,注册功能

        本文链接:https://www.haomeiwen.com/subject/sglhbttx.html