差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
im:ios:sdk:basic [2019/04/16 10:05] jk [被动退出登录] |
im:ios:sdk:basic [2021/10/08 09:24] (当前版本) huanxinfudh [自动登录] |
||
---|---|---|---|
行 11: | 行 11: | ||
===== 初始化 SDK ===== | ===== 初始化 SDK ===== | ||
- | 第 1 步:引入相关头文件 #import <HyphenateLite/HyphenateLite.h>(如果是实时音视频版本,为<Hyphenate/Hyphenate.h>)。 | + | 第 1 步:引入相关头文件 #import <HyphenateChat/HyphenateChat.h>。 |
第 2 步:在工程的 AppDelegate 中的以下方法中,调用 SDK 对应方法。 | 第 2 步:在工程的 AppDelegate 中的以下方法中,调用 SDK 对应方法。 | ||
行 50: | 行 50: | ||
注册模式分两种,开放注册和授权注册。 | 注册模式分两种,开放注册和授权注册。 | ||
+ | |||
+ | 建议使用异步注册方法,防止网络不好的情况下,出现卡UI主线程的情况出现。 | ||
* 只有开放注册时,才可以客户端注册。开放注册是为了测试使用,正式环境中不推荐使用该方式注册环信账号。 | * 只有开放注册时,才可以客户端注册。开放注册是为了测试使用,正式环境中不推荐使用该方式注册环信账号。 | ||
行 55: | 行 57: | ||
<code objc> | <code objc> | ||
- | EMError *error = [[EMClient sharedClient] registerWithUsername:@"8001" password:@"111111"]; | + | [[EMClient sharedClient] registerWithUsername:@"8001" password:@"111111" completion:^(NSString *aUsername, EMError *aError) { |
- | if (error==nil) { | + | if (!aError) { |
- | NSLog(@"注册成功"); | + | NSLog(@"注册成功"); |
- | } | + | } else { |
+ | NSLog(@"注册失败的原因---%@", aError.errorDescription); | ||
+ | } | ||
+ | }]; | ||
</code> | </code> | ||
行 64: | 行 69: | ||
登录:调用 SDK 的登录接口进行的操作。 | 登录:调用 SDK 的登录接口进行的操作。 | ||
+ | |||
+ | 建议使用异步登录方法,防止网络不好的情况下,出现卡UI主线程的情况出现。 | ||
<code objc> | <code objc> | ||
- | EMError *error = [[EMClient sharedClient] loginWithUsername:@"8001" password:@"111111"]; | + | [[EMClient sharedClient] loginWithUsername:@"8001" password:@"111111" completion:^(NSString *aUsername, EMError *aError) { |
- | if (!error) { | + | if (!aError) { |
- | NSLog(@"登录成功"); | + | NSLog(@"登录成功"); |
- | } | + | } else { |
+ | NSLog(@"登录失败的原因---%@", aError.errorDescription); | ||
+ | } | ||
+ | }]; | ||
</code> | </code> | ||
- | ===== 自动登录 ===== | + | ===== 使用token登录 ===== |
+ | SDK也支持使用token登录,比如在app的服务器获取token,然后交给应用使用token登录。 | ||
- | 自动登录:即首次登录成功后,不需要再次调用登录方法,在下次 APP 启动时,SDK 会自动为您登录。并且如果您自动登录失败,也可以读取到之前的会话信息。 | + | **''请注意: 使用token 登录时需要处理token过期的问题,比如在每次登录时更新token 等机制。''** |
- | + | ||
- | SDK 中自动登录属性默认是关闭的,需要您在登录成功后设置,以便您在下次 APP 启动时不需要再次调用环信登录,并且能在没有网的情况下得到会话列表。 | + | |
<code objc> | <code objc> | ||
- | EMError *error = [[EMClient sharedClient] loginWithUsername:@"8001" password:@"111111"]; | + | [[EMClient sharedClient] loginWithUsername:@"8001" token:@"111111" completion:^(NSString *aUsername, EMError *aError) { |
- | if (!error) | + | if (!aError) { |
- | { | + | NSLog(@"登录成功"); |
- | [[EMClient sharedClient].options setIsAutoLogin:YES]; | + | } else { |
- | } | + | NSLog(@"登录失败的原因---%@", aError.errorDescription); |
+ | } | ||
+ | }]; | ||
</code> | </code> | ||
- | 自动登录在以下几种情况下会被取消: | + | ===== 自动登录 ===== |
- | * 用户调用了 SDK 的登出动作; | + | 自动登录:sdk在初始化的时候会根据options中的isAutoLogin来决定是否执行自动登录,如果为YES,则sdk会直接登录上次登录且未做退出操作的账号,如果值为NO,则为未登录任何账号的状态。 |
- | * 用户在别的设备上更改了密码,导致此设备上自动登录失败; | + | |
- | * 用户的账号被从服务器端删除; | + | |
- | * 用户从另一个设备登录,把当前设备上登录的用户踢出。 | + | |
- | 所以,在您调用登录方法前,应该先判断是否设置了自动登录,如果设置了,则不需要您再调用。 | + | ''注意:3.6.5版本之后,isAutoLogin默认为YES,SDK会自动登录'' |
+ | ''3.6.5之前的版本,isAutoLogin默认为NO,SDK是不会自动登录的,如果要使用自动登录需要按照下面的方式主动设置。'' | ||
<code objc> | <code objc> | ||
- | BOOL isAutoLogin = [EMClient sharedClient].options.isAutoLogin; | + | [[EMClient sharedClient] loginWithUsername:@"8001" password:@"111111" completion:^(NSString *aUsername, EMError *aError) { |
- | if (!isAutoLogin) { | + | if (!aError) { |
- | EMError *error = [[EMClient sharedClient] loginWithUsername:@"8001" password:@"111111"]; | + | // 设置自动登录 |
- | } | + | [[EMClient sharedClient].options setIsAutoLogin:YES]; |
+ | NSLog(@"登录成功-----"); | ||
+ | } else { | ||
+ | NSLog(@"登录失败----%@", aError.errorDescription); | ||
+ | } | ||
+ | }]; | ||
+ | </code> | ||
+ | |||
+ | 当出现以下几种情况时,建议调用 SDK 的登出操作。 | ||
+ | * 用户的账号从服务器端删除 | ||
+ | <code objc> | ||
+ | /*! | ||
+ | * 当前登录账号已经被从服务器端删除时会收到该回调 | ||
+ | */ | ||
+ | - (void)userAccountDidRemoveFromServer; | ||
+ | </code> | ||
+ | * 用户的账号被禁用(被封禁用户自动登录的时候触发) | ||
+ | <code objc> | ||
+ | /*! | ||
+ | * 服务被禁用 | ||
+ | */ | ||
+ | - (void)userDidForbidByServer; | ||
+ | </code> | ||
+ | * 用户的账号从服务器端被强制下线 | ||
+ | * 用户在别的设备上登录,把当前设备上登录的用户踢出 | ||
+ | * 用户在别的设备上更改了密码 | ||
+ | <code objc> | ||
+ | /*! | ||
+ | * 当前登录账号被强制退出时会收到该回调,有以下原因: | ||
+ | * 1.密码被修改; | ||
+ | * 2.登录设备数过多; | ||
+ | * 3.服务被封禁; | ||
+ | * 4.被强制下线; | ||
+ | */ | ||
+ | - (void)userAccountDidForcedToLogout:(EMError *)aError; | ||
</code> | </code> | ||
行 135: | 行 178: | ||
退出登录分两种类型:主动退出登录和被动退出登录。 | 退出登录分两种类型:主动退出登录和被动退出登录。 | ||
+ | |||
+ | 建议使用异步退出登录方法,防止网络不好的情况下,出现卡UI主线程的情况出现。 | ||
* 主动退出登录:调用 SDK 的退出接口; | * 主动退出登录:调用 SDK 的退出接口; | ||
行 142: | 行 187: | ||
<code objc> | <code objc> | ||
- | EMError *error = [[EMClient sharedClient] logout:YES]; | + | [[EMClient sharedClient] logout:YES completion:^(EMError *aError) { |
- | if (!error) { | + | if (!aError) { |
- | NSLog(@"退出成功"); | + | NSLog(@"退出登录成功"); |
- | } | + | } else { |
+ | NSLog(@"退出登录失败的原因---%@", aError.errorDescription); | ||
+ | } | ||
+ | }]; | ||
</code> | </code> | ||
行 163: | 行 211: | ||
- (void)userAccountDidRemoveFromServer; | - (void)userAccountDidRemoveFromServer; | ||
</code> | </code> | ||
+ | |||
+ | ===== 输出信息到日志文件 ===== | ||
+ | |||
+ | 用户可以在App中将需要的信息输出到SDK日志文件中,该接口从SDK 3.8.1开始支持,需要在完成SDK初始化之后调用。调用方法如下 | ||
+ | <code> | ||
+ | [[EMClient sharedClient] log:@"这里完成初始化"]; | ||
+ | </code> | ||
+ | |||
+ | ===== 用户被封禁后的提示 ===== | ||
+ | 在[[http://console.easemob.com|IM管理后台]]可以对用户进行管理,例如可以在后台封禁用户。 | ||
+ | 用户被封禁后会提示SDK登录会返回 SERVER_SERVING_DISABLED(305), 可以根据用户这个返回值来进行相应的提示或者处理。 | ||
+ | |||
+ | 需要注意的是app整个被禁用时也会返回上述错误码,由于app一般不会被禁用,所以可以用来提示用户被封禁。 | ||
+ | |||
---- | ---- |