iOS即时通讯(六)- 重连与自动登录

集成重连功能

环信在断开连接时,会自动重连,自动重连操作完成后回回调。有以下几种情况,会引发重连:
1.登录成功后,手机无法上网时,会调用重连回调;
2.登录成功后,网络状态变化时,会调用重连回调。

  • 加入重连代码
#pragma mark - 重连
/*!
 *  SDK连接服务器的状态变化时会接收到该回调
 *
 *  有以下几种情况,会引起该方法的调用:
 *  1. 登录成功后,手机无法上网时,会调用该回调
 *  2. 登录成功后,网络状态变化时,会调用该回调
 *
 *  @param aConnectionState 当前状态
 */
- (void)didConnectionStateChanged:(EMConnectionState)aConnectionState {
    NSLog(@"%s, line = %d", __FUNCTION__, __LINE__);
}

集成自动登录功能

自动登录:即首次登录成功后,不需要再次调用登录方法,在下次 APP 启动时,SDK 会自动为您登录。并且如果您自动登录失败,也可以读取到之前的会话信息。

SDK 中自动登录属性默认是关闭的,需要您在登录成功后设置,以便您在下次 APP 启动时不需要再次调用环信登录,并且能在没有网的情况下得到会话列表

  • 加入自动登录

在登录成功中加入,

#pragma mark - 登录
- (void)em_login {
    EMError *error = [[EMClient sharedClient] loginWithUsername:_accountTel.text password:_passwordTel.text];
    if (!error) {
        NSLog(@"登录成功");
        [[EMClient sharedClient].options setIsAutoLogin:YES];
    } else {
        NSLog(@"error = %@", error);
    }

}

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

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

所以,在您调用登录方法前,应该先判断是否设置了自动登录,如果设置了,则不需要您再调用。

#pragma mark - 登录
- (void)em_login {
    BOOL isAutoLogin = [EMClient sharedClient].options.isAutoLogin;
    if (!isAutoLogin) {
        EMError *error = [[EMClient sharedClient] loginWithUsername:_accountTel.text password:_passwordTel.text];
        if (!error) {
            NSLog(@"登录成功");
            [[EMClient sharedClient].options setIsAutoLogin:YES];
        } else {
            NSLog(@"error = %@", error);
        }
    }
}

SDK 中,如果发生自动登录,会有以下回调,

/*!
 *  自动登录返回结果
 *
 *  @param aError 错误信息
 */
- (void)didAutoLoginWithError:(EMError *)aError {
    NSLog(@"%s, line = %d", __FUNCTION__, __LINE__);
}

添加EMClientDelegate,并添加回调监听代理,

- (void)viewDidLoad {
    [super viewDidLoad];
    // 添加回调监听代理
    [[EMClient sharedClient] addDelegate:self delegateQueue:nil];
}

你可能感兴趣的:(iOS即时通讯(六)- 重连与自动登录)