Geen omschrijving

EMClient.h 17KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739
  1. /*!
  2. * @header EMClient.h
  3. * @abstract SDK Client
  4. * @author Hyphenate
  5. * @version 3.00
  6. */
  7. #import <Foundation/Foundation.h>
  8. #import "EMClientDelegate.h"
  9. #import "EMOptions.h"
  10. #import "EMPushOptions.h"
  11. #import "EMError.h"
  12. #import "IEMChatManager.h"
  13. #import "IEMContactManager.h"
  14. #import "IEMGroupManager.h"
  15. #import "IEMChatroomManager.h"
  16. /*!
  17. * SDK Client
  18. */
  19. @interface EMClient : NSObject
  20. {
  21. EMPushOptions *_pushOptions;
  22. }
  23. /*!
  24. * \~chinese
  25. * SDK版本号
  26. *
  27. * \~english
  28. * SDK version
  29. */
  30. @property (nonatomic, strong, readonly) NSString *version;
  31. /*!
  32. * \~chinese
  33. * 当前登录账号
  34. *
  35. * \~english
  36. * Current logged in user's username
  37. */
  38. @property (nonatomic, strong, readonly) NSString *currentUsername;
  39. /*!
  40. * \~chinese
  41. * SDK属性
  42. *
  43. * \~english
  44. * SDK setting options
  45. */
  46. @property (nonatomic, strong, readonly) EMOptions *options;
  47. /*!
  48. * \~chinese
  49. * 推送设置
  50. *
  51. * \~english
  52. * Apple Push Notification Service setting
  53. */
  54. @property (nonatomic, strong, readonly) EMPushOptions *pushOptions;
  55. /*!
  56. * \~chinese
  57. * 聊天模块
  58. *
  59. * \~english
  60. * Chat Management
  61. */
  62. @property (nonatomic, strong, readonly) id<IEMChatManager> chatManager;
  63. /*!
  64. * \~chinese
  65. * 好友模块
  66. *
  67. * \~english
  68. * Contact Management
  69. */
  70. @property (nonatomic, strong, readonly) id<IEMContactManager> contactManager;
  71. /*!
  72. * \~chinese
  73. * 群组模块
  74. *
  75. * \~english
  76. * Group Management
  77. */
  78. @property (nonatomic, strong, readonly) id<IEMGroupManager> groupManager;
  79. /*!
  80. * \~chinese
  81. * 聊天室模块
  82. *
  83. * \~english
  84. * Chat room Management
  85. */
  86. @property (nonatomic, strong, readonly) id<IEMChatroomManager> roomManager;
  87. /*!
  88. * \~chinese
  89. * SDK是否自动登录上次登录的账号
  90. *
  91. * \~english
  92. * If SDK will automatically log into with previously logged in session
  93. */
  94. @property (nonatomic, readonly) BOOL isAutoLogin;
  95. /*!
  96. * \~chinese
  97. * 用户是否已登录
  98. *
  99. * \~english
  100. * If a user logged in
  101. */
  102. @property (nonatomic, readonly) BOOL isLoggedIn;
  103. /*!
  104. * \~chinese
  105. * 是否连上聊天服务器
  106. *
  107. * \~english
  108. * Connection status to Hyphenate IM server
  109. */
  110. @property (nonatomic, readonly) BOOL isConnected;
  111. /*!
  112. * \~chinese
  113. * 获取SDK实例
  114. *
  115. * \~english
  116. * Get SDK singleton instance
  117. */
  118. + (instancetype)sharedClient;
  119. #pragma mark - Delegate
  120. /*!
  121. * \~chinese
  122. * 添加回调代理
  123. *
  124. * @param aDelegate 要添加的代理
  125. * @param aQueue 执行代理方法的队列
  126. *
  127. * \~english
  128. * Add delegate
  129. *
  130. * @param aDelegate Delegate
  131. * @param aQueue The queue of calling delegate methods
  132. */
  133. - (void)addDelegate:(id<EMClientDelegate>)aDelegate
  134. delegateQueue:(dispatch_queue_t)aQueue;
  135. /*!
  136. * \~chinese
  137. * 添加回调代理
  138. *
  139. * @param aDelegate 要添加的代理
  140. *
  141. * \~english
  142. * Add delegate
  143. *
  144. * @param aDelegate Delegate
  145. */
  146. - (void)addDelegate:(id<EMClientDelegate>)aDelegate;
  147. /*!
  148. * \~chinese
  149. * 移除回调代理
  150. *
  151. * @param aDelegate 要移除的代理
  152. *
  153. * \~english
  154. * Remove delegate
  155. *
  156. * @param aDelegate Delegate
  157. */
  158. - (void)removeDelegate:(id)aDelegate;
  159. #pragma mark - Initialize SDK
  160. /*!
  161. * \~chinese
  162. * 初始化sdk
  163. *
  164. * @param aOptions SDK配置项
  165. *
  166. * @result 错误信息
  167. *
  168. * \~english
  169. * Initialize the SDK
  170. *
  171. * @param aOptions SDK setting options
  172. *
  173. * @result Error
  174. */
  175. - (EMError *)initializeSDKWithOptions:(EMOptions *)aOptions;
  176. #pragma mark - Sync method
  177. #pragma mark - Register
  178. /*!
  179. * \~chinese
  180. * 注册用户
  181. *
  182. * 同步方法,会阻塞当前线程. 不推荐使用,建议后台通过REST注册
  183. *
  184. * @param aUsername 用户名
  185. * @param aPassword 密码
  186. *
  187. * @result 错误信息
  188. *
  189. * \~english
  190. * Register a new IM user
  191. *
  192. * To enhance the reliability, registering new IM user through REST API from backend is highly recommended
  193. *
  194. * @param aUsername Username
  195. * @param aPassword Password
  196. *
  197. * @result Error
  198. */
  199. - (EMError *)registerWithUsername:(NSString *)aUsername
  200. password:(NSString *)aPassword;
  201. #pragma mark - Login
  202. /*!
  203. * \~chinese
  204. * 登录
  205. *
  206. * 同步方法,会阻塞当前线程
  207. *
  208. * @param aUsername 用户名
  209. * @param aPassword 密码
  210. *
  211. * @result 错误信息
  212. *
  213. * \~english
  214. * Login
  215. *
  216. * @param aUsername Username
  217. * @param aPassword Password
  218. *
  219. * @result Error
  220. */
  221. - (EMError *)loginWithUsername:(NSString *)aUsername
  222. password:(NSString *)aPassword;
  223. #pragma makr - Logout
  224. /*!
  225. * \~chinese
  226. * 退出
  227. *
  228. * 同步方法,会阻塞当前线程
  229. *
  230. * @param aIsUnbindDeviceToken 是否解除device token的绑定,解除绑定后设备不会再收到消息推送
  231. * 如果传入YES, 解除绑定失败,将返回error
  232. *
  233. * @result 错误信息
  234. *
  235. * \~english
  236. * Logout
  237. *
  238. * @param aIsUnbindDeviceToken Unbind device token to disable Apple Push Notification Service
  239. *
  240. * @result Error
  241. */
  242. - (EMError *)logout:(BOOL)aIsUnbindDeviceToken;
  243. #pragma mark - Apns
  244. /*!
  245. * \~chinese
  246. * 绑定device token
  247. *
  248. * 同步方法,会阻塞当前线程
  249. *
  250. * @param aDeviceToken 要绑定的token
  251. *
  252. * @result 错误信息
  253. *
  254. * \~english
  255. * Device token binding is required for enabling Apple Push Notification Service
  256. *
  257. * @param aDeviceToken Device token to bind
  258. *
  259. * @result Error
  260. */
  261. - (EMError *)bindDeviceToken:(NSData *)aDeviceToken;
  262. /*!
  263. * \~chinese
  264. * 设置推送消息显示的昵称
  265. *
  266. * 同步方法,会阻塞当前线程
  267. *
  268. * @param aNickname 要设置的昵称
  269. *
  270. * @result 错误信息
  271. *
  272. * \~english
  273. * Set display name for Apple Push Notification message
  274. *
  275. * @param aNickname Display name
  276. *
  277. * @result Error
  278. */
  279. - (EMError *)setApnsNickname:(NSString *)aNickname;
  280. /*!
  281. * \~chinese
  282. * 从服务器获取推送属性
  283. *
  284. * 同步方法,会阻塞当前线程
  285. *
  286. * @param pError 错误信息
  287. *
  288. * @result 推送属性
  289. *
  290. * \~english
  291. * Get Apple Push Notification Service options from the server
  292. *
  293. * @param pError Error
  294. *
  295. * @result Apple Push Notification Service options
  296. */
  297. - (EMPushOptions *)getPushOptionsFromServerWithError:(EMError **)pError;
  298. /*!
  299. * \~chinese
  300. * 更新推送设置到服务器
  301. *
  302. * 同步方法,会阻塞当前线程
  303. *
  304. * @result 错误信息
  305. *
  306. * \~english
  307. * Update Apple Push Notification Service options to the server
  308. *
  309. * @result Error
  310. */
  311. - (EMError *)updatePushOptionsToServer;
  312. /*!
  313. * \~chinese
  314. * 上传日志到服务器
  315. *
  316. * 同步方法,会阻塞当前线程
  317. *
  318. * @result 错误信息
  319. *
  320. * \~english
  321. * Upload debugging log to server
  322. *
  323. * @result Error
  324. */
  325. - (EMError *)uploadLogToServer;
  326. #pragma mark - Async method
  327. /*!
  328. * \~chinese
  329. * 注册用户
  330. *
  331. * 不推荐使用,建议后台通过REST注册
  332. *
  333. * @param aUsername 用户名
  334. * @param aPassword 密码
  335. * @param aCompletionBlock 完成的回调
  336. *
  337. * \~english
  338. * Register a new IM user
  339. *
  340. * To enhance the reliability, registering new IM user through REST API from backend is highly recommended
  341. *
  342. * @param aUsername Username
  343. * @param aPassword Password
  344. * @param aCompletionBlock The callback block of completion
  345. *
  346. */
  347. - (void)registerWithUsername:(NSString *)aUsername
  348. password:(NSString *)aPassword
  349. completion:(void (^)(NSString *aUsername, EMError *aError))aCompletionBlock;
  350. /*!
  351. * \~chinese
  352. * 登录
  353. *
  354. * @param aUsername 用户名
  355. * @param aPassword 密码
  356. * @param aCompletionBlock 完成的回调
  357. *
  358. * \~english
  359. * Login
  360. *
  361. * @param aUsername Username
  362. * @param aPassword Password
  363. * @param aCompletionBlock The callback block of completion
  364. *
  365. */
  366. - (void)loginWithUsername:(NSString *)aUsername
  367. password:(NSString *)aPassword
  368. completion:(void (^)(NSString *aUsername, EMError *aError))aCompletionBlock;
  369. /*!
  370. * \~chinese
  371. * 退出
  372. *
  373. * @param aIsUnbindDeviceToken 是否解除device token的绑定,解除绑定后设备不会再收到消息推送
  374. * 如果传入YES, 解除绑定失败,将返回error
  375. * @param aCompletionBlock 完成的回调
  376. *
  377. * \~english
  378. * Logout
  379. *
  380. * @param aIsUnbindDeviceToken Unbind device token to disable the Apple Push Notification Service
  381. * @param aCompletionBlock The callback block of completion
  382. *
  383. */
  384. - (void)logout:(BOOL)aIsUnbindDeviceToken
  385. completion:(void (^)(EMError *aError))aCompletionBlock;
  386. /*!
  387. * \~chinese
  388. * 绑定device token
  389. *
  390. * @param aDeviceToken 要绑定的token
  391. * @param aCompletionBlock 完成的回调
  392. *
  393. * \~english
  394. * Device token binding is required to enable Apple push notification service
  395. *
  396. * @param aDeviceToken Device token to bind
  397. * @param aCompletionBlock The callback block of completion
  398. */
  399. - (void)registerForRemoteNotificationsWithDeviceToken:(NSData *)aDeviceToken
  400. completion:(void (^)(EMError *aError))aCompletionBlock;
  401. /*!
  402. * \~chinese
  403. * 设置推送的显示名
  404. *
  405. * @param aDisplayName 推送显示名
  406. * @param aCompletionBlock 完成的回调
  407. *
  408. * \~english
  409. * Set display name for the push notification
  410. *
  411. * @param aDisplayName Display name of push
  412. * @param aCompletionBlock The callback block of completion
  413. *
  414. */
  415. - (void)updatePushNotifiationDisplayName:(NSString *)aDisplayName
  416. completion:(void (^)(NSString *aDisplayName, EMError *aError))aCompletionBlock;
  417. /*!
  418. * \~chinese
  419. * 从服务器获取推送属性
  420. *
  421. * @param aCompletionBlock 完成的回调
  422. *
  423. * \~english
  424. * Get Apple Push Notification Service options from the server
  425. *
  426. * @param aCompletionBlock The callback block of completion
  427. */
  428. - (void)getPushNotificationOptionsFromServerWithCompletion:(void (^)(EMPushOptions *aOptions, EMError *aError))aCompletionBlock;
  429. /*!
  430. * \~chinese
  431. * 更新推送设置到服务器
  432. *
  433. * @param aCompletionBlock 完成的回调
  434. *
  435. * \~english
  436. * Update Apple Push Notification Service options to the server
  437. *
  438. * @param aCompletionBlock The callback block of completion
  439. */
  440. - (void)updatePushNotificationOptionsToServerWithCompletion:(void (^)(EMError *aError))aCompletionBlock;
  441. /*!
  442. * \~chinese
  443. * 上传日志到服务器
  444. *
  445. * @param aCompletionBlock 完成的回调
  446. *
  447. * \~english
  448. * Upload log to server
  449. *
  450. * @param aCompletionBlock The callback block of completion
  451. */
  452. - (void)uploadDebugLogToServerWithCompletion:(void (^)(EMError *aError))aCompletionBlock;
  453. #pragma mark - iOS
  454. /*!
  455. * \~chinese
  456. * iOS专用,数据迁移到SDK3.0
  457. *
  458. * 同步方法,会阻塞当前线程
  459. *
  460. * 升级到SDK3.0版本需要调用该方法,开发者需要等该方法执行完后再进行数据库相关操作
  461. *
  462. * @result 是否迁移成功
  463. *
  464. * \~english
  465. * Migrate the IM database to the latest SDK version
  466. *
  467. * @result Return YES for success
  468. */
  469. - (BOOL)migrateDatabaseToLatestSDK;
  470. /*!
  471. * \~chinese
  472. * iOS专用,程序进入后台时,需要调用此方法断开连接
  473. *
  474. * @param aApplication UIApplication
  475. *
  476. * \~english
  477. * Disconnect from server when app enters background
  478. *
  479. * @param aApplication UIApplication
  480. */
  481. - (void)applicationDidEnterBackground:(id)aApplication;
  482. /*!
  483. * \~chinese
  484. * iOS专用,程序进入前台时,需要调用此方法进行重连
  485. *
  486. * @param aApplication UIApplication
  487. *
  488. * \~english
  489. * Re-connect to server when app enters foreground
  490. *
  491. * @param aApplication UIApplication
  492. */
  493. - (void)applicationWillEnterForeground:(id)aApplication;
  494. /*!
  495. * \~chinese
  496. * iOS专用,程序在前台收到APNs时,需要调用此方法
  497. *
  498. * @param application UIApplication
  499. * @param userInfo 推送内容
  500. *
  501. * \~english
  502. * Need to call this method when APP receive APNs in foreground
  503. *
  504. * @param application UIApplication
  505. * @param userInfo Push content
  506. */
  507. - (void)application:(id)application didReceiveRemoteNotification:(NSDictionary *)userInfo;
  508. #pragma mark - Deprecated methods
  509. /*!
  510. * \~chinese
  511. * 注册用户
  512. *
  513. * 不推荐使用,建议后台通过REST注册
  514. *
  515. * @param aUsername 用户名
  516. * @param aPassword 密码
  517. * @param aSuccessBlock 成功的回调
  518. * @param aFailureBlock 失败的回调
  519. *
  520. * \~english
  521. * Register a new user
  522. *
  523. * To enhance the reliability, registering new IM user through REST API from backend is highly recommended
  524. *
  525. * @param aUsername Username
  526. * @param aPassword Password
  527. * @param aSuccessBlock The callback block of success
  528. * @param aFailureBlock The callback block of failure
  529. *
  530. */
  531. - (void)asyncRegisterWithUsername:(NSString *)aUsername
  532. password:(NSString *)aPassword
  533. success:(void (^)())aSuccessBlock
  534. failure:(void (^)(EMError *aError))aFailureBlock __deprecated_msg("Use -registerWithUsername:password:completion:");
  535. /*!
  536. * \~chinese
  537. * 登录
  538. *
  539. * @param aUsername 用户名
  540. * @param aPassword 密码
  541. * @param aSuccessBlock 成功的回调
  542. * @param aFailureBlock 失败的回调
  543. *
  544. * \~english
  545. * Login
  546. *
  547. * @param aUsername Username
  548. * @param aPassword Password
  549. * @param aSuccessBlock The callback block of success
  550. * @param aFailureBlock The callback block of failure
  551. *
  552. */
  553. - (void)asyncLoginWithUsername:(NSString *)aUsername
  554. password:(NSString *)aPassword
  555. success:(void (^)())aSuccessBlock
  556. failure:(void (^)(EMError *aError))aFailureBlock __deprecated_msg("Use -loginWithUsername:password:completion");
  557. /*!
  558. * \~chinese
  559. * 退出
  560. *
  561. * @param aIsUnbindDeviceToken 是否解除device token的绑定,解除绑定后设备不会再收到消息推送
  562. * 如果传入YES, 解除绑定失败,将返回error
  563. *
  564. * @result 错误信息
  565. *
  566. * \~english
  567. * Logout
  568. *
  569. * @param aIsUnbindDeviceToken Unbind device token to disable the Apple Push Notification Service
  570. *
  571. * @result Error
  572. */
  573. - (void)asyncLogout:(BOOL)aIsUnbindDeviceToken
  574. success:(void (^)())aSuccessBlock
  575. failure:(void (^)(EMError *aError))aFailureBlock __deprecated_msg("Use -logout:completion:");
  576. /*!
  577. * \~chinese
  578. * 绑定device token
  579. *
  580. * @param aDeviceToken 要绑定的token
  581. * @param aSuccessBlock 成功的回调
  582. * @param aFailureBlock 失败的回调
  583. *
  584. * \~english
  585. * Bind device token
  586. *
  587. * @param aDeviceToken Device token to bind
  588. * @param aSuccessBlock The callback block of success
  589. * @param aFailureBlock The callback block of failure
  590. */
  591. - (void)asyncBindDeviceToken:(NSData *)aDeviceToken
  592. success:(void (^)())aSuccessBlock
  593. failure:(void (^)(EMError *aError))aFailureBlock __deprecated_msg("Use -registerForRemoteNotificationsWithDeviceToken:completion:");
  594. /*!
  595. * \~chinese
  596. * 设置推送消息显示的昵称
  597. *
  598. * @param aNickname 要设置的昵称
  599. * @param aSuccessBlock 成功的回调
  600. * @param aFailureBlock 失败的回调
  601. *
  602. * \~english
  603. * Set display name for push notification
  604. *
  605. * @param aDisplayName Push Notification display name
  606. * @param aSuccessBlock The callback block of success
  607. * @param aFailureBlock The callback block of failure
  608. *
  609. */
  610. - (void)asyncSetApnsNickname:(NSString *)aNickname
  611. success:(void (^)())aSuccessBlock
  612. failure:(void (^)(EMError *aError))aFailureBlock __deprecated_msg("Use -updatePushNotifiationDisplayName:copletion");
  613. /*!
  614. * \~chinese
  615. * 从服务器获取推送属性
  616. *
  617. * @param aSuccessBlock 成功的回调
  618. * @param aFailureBlock 失败的回调
  619. *
  620. * \~english
  621. * Get apns options from the server
  622. *
  623. * @param aSuccessBlock The callback block of success
  624. * @param aFailureBlock The callback block of failure
  625. */
  626. - (void)asyncGetPushOptionsFromServer:(void (^)(EMPushOptions *aOptions))aSuccessBlock
  627. failure:(void (^)(EMError *aError))aFailureBlock __deprecated_msg("Use -getPushOptionsFromServerWithCompletion:");
  628. /*!
  629. * \~chinese
  630. * 更新推送设置到服务器
  631. *
  632. * @param aSuccessBlock 成功的回调
  633. * @param aFailureBlock 失败的回调
  634. *
  635. * \~english
  636. * Update APNS options to the server
  637. *
  638. * @param aSuccessBlock The callback block of success
  639. * @param aFailureBlock The callback block of failure
  640. *
  641. */
  642. - (void)asyncUpdatePushOptionsToServer:(void (^)())aSuccessBlock
  643. failure:(void (^)(EMError *aError))aFailureBlock __deprecated_msg("Use -updatePushNotificationOptionsToServerWithCompletion:");
  644. /*!
  645. * \~chinese
  646. * 上传日志到服务器
  647. *
  648. * @param aSuccessBlock 成功的回调
  649. * @param aFailureBlock 失败的回调
  650. *
  651. * \~english
  652. * Upload log to server
  653. *
  654. * @param aSuccessBlock The callback block of success
  655. * @param aFailureBlock The callback block of failure
  656. */
  657. - (void)asyncUploadLogToServer:(void (^)())aSuccessBlock
  658. failure:(void (^)(EMError *aError))aFailureBlock __deprecated_msg("Use -uploadDebugLogToServerWithCompletion:");
  659. /*!
  660. * \~chinese
  661. * iOS专用,数据迁移到SDK3.0
  662. *
  663. * 同步方法,会阻塞当前线程
  664. *
  665. * 升级到SDK3.0版本需要调用该方法,开发者需要等该方法执行完后再进行数据库相关操作
  666. *
  667. * @result 是否迁移成功
  668. *
  669. * \~english
  670. * iOS-specific, data migration to SDK3.0
  671. *
  672. * Synchronization method will block the current thread
  673. *
  674. * It's needed to call this method when update to SDK3.0, developers need to wait this method complete before DB related operations
  675. *
  676. * @result Whether migration successful
  677. */
  678. - (BOOL)dataMigrationTo3 __deprecated_msg("Use -migrateDatabaseToLatestSDK");
  679. @end