环信即时通讯 —— 登录注册
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) {// 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)
//注册成功 [self TTAlertNoTitle:@"注册成功" :@"注册成功,请登录!"]; }else{ switch (error.errorCode) {
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]; }
自动登录在以下几种情况下会被取消
- 用户调用了SDK的登出动作;
- 用户在别的设备上更改了密码, 导致此设备上自动登陆失败;
- 用户的账号被从服务器端删除;
- 用户从另一个设备登录,把当前设备上登陆的用户踢出.
在注册登录前,先调用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;
浙公网安备 33010602011771号