环信即时通讯 —— 登录注册

1、SDK注册/初始化(程式每次一开始时,先初始化SDK)

/*@discussion 失败返回EMError,成功返回nil

 @param anAppKey        申请应用时的appkey

 @param anAPNSCertName  需要使用的APNS证书名字(需要与后台上传时的APNS证书名字相同, 若不支持推送功能,可设为nil)

 @param anOtherConfig   其他初始化配置。目前支持自定义 1、是否打印Console Log(对应key为kSDKConfigEnableConsoleLogger)*/

 [[EaseMob sharedInstance] registerSDKWithAppKey:AppKey
                                    apnsCertName:nil //apnsCertName
                                     otherConfig:@{@"loginStateChange":@YES}];

2、异步注册(block方式)

- (IBAction)registerAction:(UIButton *)sender {//异步注册账号
    [[EaseMob sharedInstance].chatManager asyncRegisterNewAccount:self.userNameTF.text
                                                         password:self.passwordTF.text
                                                   withCompletion:
     ^(NSString *username, NSString *password, EMError *error) {
         if (!error) {
        //注册成功 [self TTAlertNoTitle:
@"注册成功" :@"注册成功,请登录!"]; }else{ switch (error.errorCode) {
          //    server error
          //    EMErrorServerNotLogin           = 1002,     //未登录
//    EMErrorServerNotReachable,                  //连接服务器失败(Ex. 手机客户端无网的时候, 会返回的error)
//    EMErrorServerTimeout,                       //连接超时(Ex. 服务器连接超时会返回的error)
//    EMErrorServerAuthenticationFailure,         //获取token失败(Ex. 登录时用户名密码错误,或者服务器无法返回token)
//    EMErrorServerAPNSRegistrationFailure,       //APNS注册失败 (Ex. 登录时, APNS注册失败会返回的error)
//    EMErrorServerDuplicatedAccount,             //注册失败(Ex. 注册时, 如果用户存在, 会返回的error)
//    EMErrorServerInsufficientPrivilege,         //所执行操作的权限不够(Ex. 非管理员删除群成员时, 会返回的error)
//    EMErrorServerTooManyOperations,             //短时间内多次发起同一操作(Ex. 频繁刷新群组列表, 会返回的error)
          case EMErrorServerDuplicatedAccount:
                     [self TTAlertNoTitle:@"register.repeat":@"User name already exists!"];
                     break;
          default: [self TTAlertNoTitle:@"register.fail" :@"Registration failed"]; break; } } } onQueue:nil]; }

3、异步登录(block方式)

- (IBAction)loginAction:(UIButton *)sender {//异步登陆账号
    [[EaseMob sharedInstance].chatManager asyncLoginWithUsername:@"用户名"
                                                        password:@"密码"
                                                      completion:
     ^(NSDictionary *loginInfo, EMError *error) {
         [self hideHud];
         if (loginInfo && !error) {
             //设置是否自动登录
             [[EaseMob sharedInstance].chatManager setIsAutoLoginEnabled:YES];             
             // 旧数据转换 (如果您的sdk是由2.1.2版本升级过来的,需要家这句话)
             [[EaseMob sharedInstance].chatManager importDataToNewDatabase];
             //获取数据库中数据
             [[EaseMob sharedInstance].chatManager loadDataFromDatabase];             
             //获取群组列表
             [[EaseMob sharedInstance].chatManager asyncFetchMyGroupsList];             
             //发送自动登陆状态通知
             [[NSNotificationCenter defaultCenter] postNotificationName:KNOTIFICATION_LOGINCHANGE object:@YES];             
         }
         else
         {
             switch (error.errorCode)
             {case EMErrorNetworkNotConnected:
                     [self TTAlertNoTitle:@"error.connectNetworkFail" :@"No network connection!"];
                     break;default:
                     [self TTAlertNoTitle:@"login.fail" :@"Login failure"];
                     break;
             }
         }
     } onQueue:nil];
}

自动登录在以下几种情况下会被取消

  1. 用户调用了SDK的登出动作;
  2. 用户在别的设备上更改了密码, 导致此设备上自动登陆失败;
  3. 用户的账号被从服务器端删除;
  4. 用户从另一个设备登录,把当前设备上登陆的用户踢出.

在注册登录前,先调用isAutoLoginEnabled判断是否开启了自动登录:

    BOOL isAutoLogin = [[[EaseMob sharedInstance] chatManager] isAutoLoginEnabled];if (isAutoLogin) {
     //登陆成功加载主窗口控制器 }else{
     //登陆失败加载登陆页面控制器
   }

4、退出登录

退出登录分两种类型:主动退出登录和被动退出登录。

  • 主动退出登录:调用SDK的退出接口;

  • 被动退出登录: 1、 正在登陆的账号在另一台设备上登陆; 2、 正在登陆的账号被从服务器端删除。

  logoffWithUnbindDeviceToken:是否解除device token的绑定,在被动退出时传NO,在主动退出时传YES.

block方式:

[[EaseMob sharedInstance].chatManager asyncLogoffWithUnbindDeviceToken:YES/NO completion:^(NSDictionary *info, EMError *error) {
    if (!error && info) {
        NSLog(@"退出成功");
    }
} onQueue:nil];

 5、重连

当掉线时,IOS SDK会自动重连,只需要监听重连相关的回调,无需进行任何操作。

/*!
 @method
 @brief 将要发起自动重连操作时发送该回调
 @discussion
 @result
 */
- (void)willAutoReconnect;

/*!
 @method
 @brief 自动重连操作完成后的回调(成功的话,error为nil,失败的话,查看error的错误信息)
 @discussion
 @result
 */
- (void)didAutoReconnectFinishedWithError:(NSError *)error;

 

posted on 2015-08-27 15:25  szg暴风暴风  阅读(1317)  评论(0)    收藏  举报