登录及登出
<p>[TOC]</p>
<h2>登录</h2>
<h3>手动登录</h3>
<pre><code>@protocol QDIMLoginManager <NSObject>
/**
登录
@param account 用户ID;账号;手机号
@param completion 完成回调
*/
- (void)loginWithAccount:(NSString *)account password:(NSString *)password completion:(void (^)(NSString * __nullable token, NSError * __nullable error))completion;
/**
* 短信登录
*
* @param mobile 手机号
* @param vcode 验证码
* @param completion 完成回调
*/
- (void)loginWithMoblie:(NSString *)mobile vcode:(NSString *)vcode completion:(void (^)(NSString * __nullable token, NSError * __nullable error))completion;
/**
自动登录
@param account 账户
@param token 令牌
*/
- (void)autoLoginWithAccount:(NSString *)account token:(NSString *)token;
@end
</code></pre>
<p>示例</p>
<pre><code>
NSString *account = @"your account";
NSString *password = @"your password";
[[QDClient sharedClient].loginManager loginWithAccount:account password:password completion:^(NSString * _Nullable token, NSError * _Nullable error) { }];
</code></pre>
<p>error 为登录错误信息,成功则为 nil。</p>
<h3>自动登录</h3>
<p>APP 启动时,如果已保存用户名和密码可以选择调用自动登录接口,并立刻打开主界面。此类登录需要调用如下接口:</p>
<pre><code>@protocol QDIMLoginManager <NSObject>
/**
自动登录
@param account 账户
@param token 令牌
*/
- (void)autoLoginWithAccount:(NSString *)account token:(NSString *)token;
@end
</code></pre>
<p>登录的过程中会有回调,APP需要实现如下回调</p>
<pre><code>@protocol QDLoginManagerDelegate <NSObject>
/**
* 登录回调
*
* @param step 登录步骤
* @discussion 这个回调主要用于客户端UI的刷新
*/
- (void)onLogin:(QDLoginStep)step;
@end
</code></pre>
<p>QDLoginStep 枚举列表</p>
<table>
<thead>
<tr>
<th style="text-align: center;">值</th>
<th style="text-align: center;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">QDLoginStepLinking</td>
<td style="text-align: center;">连接服务器</td>
</tr>
<tr>
<td style="text-align: center;">QDLoginStepLinkOK</td>
<td style="text-align: center;">连接服务器成功</td>
</tr>
<tr>
<td style="text-align: center;">QDLoginStepLinkFailed</td>
<td style="text-align: center;">连接服务器失败</td>
</tr>
<tr>
<td style="text-align: center;">QDLoginStepLogining</td>
<td style="text-align: center;">登录</td>
</tr>
<tr>
<td style="text-align: center;">QDLoginStepLoginOK</td>
<td style="text-align: center;">登录成功</td>
</tr>
<tr>
<td style="text-align: center;">QDLoginStepLoginFailed</td>
<td style="text-align: center;">登录失败</td>
</tr>
<tr>
<td style="text-align: center;">QDLoginStepSyncing</td>
<td style="text-align: center;">开始同步</td>
</tr>
<tr>
<td style="text-align: center;">QDLoginStepSyncOK</td>
<td style="text-align: center;">同步成功</td>
</tr>
<tr>
<td style="text-align: center;">QDLoginStepLoseConnection</td>
<td style="text-align: center;">连接断开</td>
</tr>
<tr>
<td style="text-align: center;">QDLoginStepNetChanged</td>
<td style="text-align: center;">网络切换</td>
</tr>
</tbody>
</table>
<p>自动登录失败的回调</p>
<pre><code>- (void)onAutoLoginFailed:(NSError *)error;</code></pre>
<p>自动登录除了会触发相应步骤变化回调外,在发生错误时也会触发如上回调。在碰到一些 SDK 无法自动解决的错误时,开发者需要在此回调里做出相应的处理。</p>
<p>举例来说,当前网络状态较差时,容易导致自动登录发生网络超时错误,此时上层无需处理,SDK 会持续有策略地重连,而一旦发生用户名密码不匹配的错误时,则需要上层做出相应处理:登出并提示用户手动登录或是从自己的应用服务器刷新相应的用户名密码。</p>
<h2>登出</h2>
<p>应用层登出/注销自己的账号时需要调用 SDK 的登出操作,该操作会通知服务器进行 APNs 推送信息的解绑操作,避免用户已登出但推送依然发送到当前设备的情况发生。</p>
<pre><code>@protocol QDIMLoginManager <NSObject>
- (void)logout:(void(^)(NSError * __nullable error))completion;
@end</code></pre>
<p>考虑到用户体验,登出的超时时间会比其他请求短一些。上层应用不管登出请求是否成功,UI 表现上都应该做出登出行为。</p>
<p>示例:</p>
<pre><code>[[QDClient sharedClient].loginManager logout:^(NSError * _Nullable error) {
//jump to login page
}];
</code></pre>
<h2>互踢</h2>
<p>内置踢人策略为:移动端(Android,iOS)互踢, 移动端和web共存,和pc端共存</p>
<p>被踢的回调</p>
<pre><code>/**
* 被踢(服务器/其他端)回调
*
* @param code 被踢原因
* @param clientType 发起踢出的客户端类型
*/
- (void)onKick:(QDKickReason)code clientType:(QDPlatfromType)clientType;
</code></pre>
<p>APP收到被踢回调后需要进行注销并切换到登录界面。</p>
<h2>账号信息获取</h2>
<p>在登录成功后,我们可以通过如下接口获取用户id</p>
<p>NSString *userID = [QDClient sharedClient].loginInfo.userId;</p>
<h2>登录与用户信息同步</h2>
<p>QD_IMSDK 的登录一共有大约十个步骤,包括正在连接,连接成功,正在登录等。详见 QDLoginStep 枚举。其中重要的两个步骤为:登录成功 (QDLoginStepLoginOK) 和 同步成功 (QDLoginStepSyncOK)。</p>
<p>登录成功 SDK 已成功登录,获取到基本信息,并开始同步数据
同步成功 SDK 已同步完成所有 IM 信息
QD_IMSDK 在登录后会同步群信息,离线消息,系统通知等数据。</p>