NIMLoginManagerProtocol.h 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. //
  2. // NIMLoginManagerProtocol.h
  3. // NIMLib
  4. //
  5. // Created by Netease.
  6. // Copyright (c) 2015 Netease. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. #import "NIMLoginClient.h"
  10. NS_ASSUME_NONNULL_BEGIN
  11. /**
  12. * 登录服务相关Block
  13. *
  14. * @param error 执行结果,如果成功error为nil
  15. */
  16. typedef void(^NIMLoginHandler)(NSError * __nullable error);
  17. /**
  18. * 查询服务端时间Block
  19. *
  20. * @param error 执行结果,如果成功error为nil
  21. */
  22. typedef void(^NIMLoginGetServerTimeHandle)(NSError * __nullable error, NIMServerTime *time);
  23. /**
  24. * 登录步骤枚举
  25. */
  26. typedef NS_ENUM(NSInteger, NIMLoginStep)
  27. {
  28. /**
  29. * 连接服务器
  30. */
  31. NIMLoginStepLinking = 1,
  32. /**
  33. * 连接服务器成功
  34. */
  35. NIMLoginStepLinkOK,
  36. /**
  37. * 连接服务器失败
  38. */
  39. NIMLoginStepLinkFailed,
  40. /**
  41. * 登录
  42. */
  43. NIMLoginStepLogining,
  44. /**
  45. * 登录成功
  46. */
  47. NIMLoginStepLoginOK,
  48. /**
  49. * 登录失败
  50. */
  51. NIMLoginStepLoginFailed,
  52. /**
  53. * 开始同步
  54. */
  55. NIMLoginStepSyncing,
  56. /**
  57. * 同步完成
  58. */
  59. NIMLoginStepSyncOK,
  60. /**
  61. * 连接断开
  62. */
  63. NIMLoginStepLoseConnection,
  64. /**
  65. * 网络切换
  66. * @discussion 这个并不是登录步骤的一种,但是UI有可能需要通过这个状态进行UI展现
  67. */
  68. NIMLoginStepNetChanged,
  69. };
  70. /**
  71. * SDK 认证模式
  72. */
  73. typedef NS_ENUM(NSInteger, NIMSDKAuthMode)
  74. {
  75. /**
  76. * 未定义
  77. * @discussion SDK 未调用任何登录接时或在 IM/聊天室 模式下调用 logout 接口后变化为未定义模式
  78. */
  79. NIMSDKAuthModeUndefined = 0,
  80. /**
  81. * 通过 IM 服务器鉴权
  82. * @discussion 调用 NIMLoginManager login/autoLogin 接口进行登录即为 IM 鉴权模式
  83. */
  84. NIMSDKAuthModeIM,
  85. /**
  86. * 聊天室单独鉴权
  87. * @discussion 调用 NIMChatroomManager 进入聊天室接口时设置 NIMChatroomIndependentMode 即为聊天室单独聊天鉴权模式
  88. */
  89. NIMSDKAuthModeChatroom,
  90. };
  91. /**
  92. * 被踢下线的原因
  93. */
  94. typedef NS_ENUM(NSInteger, NIMKickReason)
  95. {
  96. /**
  97. * 被另外一个客户端踢下线 (互斥客户端一端登录挤掉上一个登录中的客户端)
  98. */
  99. NIMKickReasonByClient = 1,
  100. /**
  101. * 被服务器踢下线
  102. */
  103. NIMKickReasonByServer = 2,
  104. /**
  105. * 被另外一个客户端手动选择踢下线
  106. */
  107. NIMKickReasonByClientManually = 3,
  108. };
  109. /**
  110. * 多端登陆的状态
  111. */
  112. typedef NS_ENUM(NSInteger, NIMMultiLoginType){
  113. /**
  114. * 目前已经有其他端登陆
  115. */
  116. NIMMultiLoginTypeInit = 1,
  117. /**
  118. * 其他端上线
  119. */
  120. NIMMultiLoginTypeLogin = 2,
  121. /**
  122. * 其他端下线
  123. */
  124. NIMMultiLoginTypeLogout = 3,
  125. };
  126. /**
  127. * 登录相关回调
  128. */
  129. @protocol NIMLoginManagerDelegate <NSObject>
  130. @optional
  131. /**
  132. * 被踢(服务器/其他端)回调
  133. *
  134. * @param code 被踢原因
  135. * @param clientType 发起踢出的客户端类型
  136. */
  137. - (void)onKick:(NIMKickReason)code clientType:(NIMLoginClientType)clientType;
  138. /**
  139. * 登录回调
  140. *
  141. * @param step 登录步骤
  142. * @discussion 这个回调主要用于客户端UI的刷新
  143. */
  144. - (void)onLogin:(NIMLoginStep)step;
  145. /**
  146. * 自动登录失败回调
  147. *
  148. * @param error 失败原因
  149. * @discussion 自动重连不需要上层开发关心,但是如果发生一些需要上层开发处理的错误,SDK 会通过这个方法回调
  150. * 用户需要处理的情况包括:AppKey 未被设置,参数错误,密码错误,多端登录冲突,账号被封禁,操作过于频繁等
  151. */
  152. - (void)onAutoLoginFailed:(NSError *)error;
  153. /**
  154. * 多端登录发生变化
  155. */
  156. - (void)onMultiLoginClientsChanged;
  157. /**
  158. * 多端登录发生变化
  159. */
  160. - (void)onMultiLoginClientsChangedWithType:(NIMMultiLoginType)type;
  161. /**
  162. * 群用户同步完成通知
  163. * @param success 群用户信息同步是否成功
  164. */
  165. - (void)onTeamUsersSyncFinished:(BOOL)success;
  166. /**
  167. * 超大群用户同步完成通知
  168. * @param success 群用户信息同步是否成功
  169. */
  170. - (void)onSuperTeamUsersSyncFinished:(BOOL)success;
  171. @end
  172. /**
  173. * 登录协议
  174. */
  175. @protocol NIMLoginManager <NSObject>
  176. /**
  177. * 登录
  178. *
  179. * @param account 帐号
  180. * @param token 令牌 (在后台绑定的登录token)
  181. * @param completion 完成回调
  182. */
  183. - (void)login:(NSString *)account
  184. token:(NSString *)token
  185. completion:(NIMLoginHandler)completion;
  186. /**
  187. * 自动登录
  188. *
  189. * @param account 帐号
  190. * @param token 令牌 (在后台绑定的登录token)
  191. * @discussion 启动APP如果已经保存了用户帐号和令牌,建议使用这个登录方式,使用这种方式可以在无网络时直接打开会话窗口
  192. */
  193. - (void)autoLogin:(NSString *)account
  194. token:(NSString *)token;
  195. /**
  196. * 自动登录
  197. *
  198. * @param loginData 自动登录参数
  199. * @discussion 启动APP如果已经保存了用户帐号和令牌,建议使用这个登录方式,使用这种方式可以在无网络时直接打开会话窗口
  200. */
  201. - (void)autoLogin:(NIMAutoLoginData *)loginData;
  202. /**
  203. * 登出
  204. *
  205. * @param completion 完成回调
  206. * @discussion 用户在登出是需要调用这个接口进行 SDK 相关数据的清理,回调 Block 中的 error 只是指明和服务器的交互流程中可能出现的错误,但不影响后续的流程。
  207. * 如用户登出时发生网络错误导致服务器没有收到登出请求,客户端仍可以登出(切换界面,清理数据等),但会出现推送信息仍旧会发到当前手机的问题。
  208. */
  209. - (void)logout:(nullable NIMLoginHandler)completion;
  210. /**
  211. * 踢人
  212. *
  213. * @param client 当前登录的其他客户端
  214. * @param completion 完成回调
  215. */
  216. - (void)kickOtherClient:(NIMLoginClient *)client
  217. completion:(nullable NIMLoginHandler)completion;
  218. /**
  219. * 返回当前登录帐号
  220. *
  221. * @return 当前登录帐号,如果没有登录成功,这个地方会返回空字符串""
  222. */
  223. - (NSString *)currentAccount;
  224. /**
  225. * 当前登录状态
  226. *
  227. * @return 当前登录状态
  228. */
  229. - (BOOL)isLogined;
  230. /**
  231. * 当前 SDK 鉴权模式
  232. *
  233. * @return 当前 SDK 鉴权模式
  234. */
  235. - (NIMSDKAuthMode)currentAuthMode;
  236. /**
  237. * 返回当前登录的设备列表
  238. *
  239. * @return 当前登录设备列表 内部是NIMLoginClient,不包括自己
  240. */
  241. - (nullable NSArray<NIMLoginClient *> *)currentLoginClients;
  242. /**
  243. * 查询服务器时间
  244. *
  245. * @param completion 完成回调
  246. * @discussion 该接口有调用频控,当调用失败时默认返回上一次的时间
  247. */
  248. - (void)queryServerTimeCompletion:(NIMLoginGetServerTimeHandle)completion;
  249. /**
  250. * 添加登录委托
  251. *
  252. * @param delegate 登录委托
  253. */
  254. - (void)addDelegate:(id<NIMLoginManagerDelegate>)delegate;
  255. /**
  256. * 移除登录委托
  257. *
  258. * @param delegate 登录委托
  259. */
  260. - (void)removeDelegate:(id<NIMLoginManagerDelegate>)delegate;
  261. @end
  262. NS_ASSUME_NONNULL_END