差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
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默认为YESSDK会自动登录''​
  
 +''​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一般不会被禁用,所以可以用来提示用户被封禁。
 +
  
 ---- ----