TIMPushManager.h 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. //
  2. // Copyright (c) 2023 Tencent. All rights reserved.
  3. //
  4. //
  5. #import <UIKit/UIKit.h>
  6. #import <Foundation/Foundation.h>
  7. #import <UserNotifications/UserNotifications.h>
  8. @protocol TIMPushDelegate;
  9. @protocol TIMPushListener;
  10. @class TIMPushMessage;
  11. NS_ASSUME_NONNULL_BEGIN
  12. typedef void(^TIMPushCallback)(void);
  13. typedef void(^TIMPushValueCallback)(NSString *value);
  14. typedef void(^TIMPushSuccessCallback)(NSData * deviceToken);
  15. typedef void(^TIMPushFailedCallback)(int code, NSString * desc);
  16. typedef void(^TIMPushCallExperimentalAPISucc)(NSObject *object);
  17. typedef void(^TIMPushNotificationExtensionCallback)(UNNotificationContent *content) API_AVAILABLE(macos(10.14), ios(10.0), watchos(3.0), tvos(10.0));
  18. @interface TIMPushManager : NSObject
  19. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  20. //
  21. // (一)注册/反注册推送服务
  22. //
  23. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  24. /**
  25. * 1.1 注册推送服务
  26. *
  27. * @param sdkAppId 应用的 SDKAPPID
  28. * @param appKey 控制台为您分配的 secretKey
  29. *
  30. * @note 请注意:
  31. * - 如果您单独使用推送服务,请正确传递 sdkAppId 和 appkey 两个参数,即可注册推送服务
  32. * - 如果您已经集成 IM 产品,请在 IM 登录成功后调用该接口,将 appKey 参数设置为 nil,接入离线推送能力.
  33. */
  34. + (void)registerPush:(int)sdkAppId appKey:(NSString *)appKey
  35. succ:(TIMPushSuccessCallback)successCallback
  36. fail:(TIMPushFailedCallback)failedCallback NS_EXTENSION_UNAVAILABLE_IOS("This API is not supported in App Extension");
  37. /**
  38. * 1.2 取消注册
  39. *
  40. * @note
  41. * - 在退出登录时调用
  42. * - 如果您使用了 [TUILogin](https://github.com/TencentCloud/TIMSDK/blob/master/iOS/TUIKit/TUICore/TUILogin.h) 提供的 login/logout,无需再调用该接口
  43. */
  44. + (void)unRegisterPush:(TIMPushCallback)successCallback
  45. fail:(TIMPushFailedCallback)failedCallback
  46. NS_EXTENSION_UNAVAILABLE_IOS("This API is not supported in App Extension");
  47. /**
  48. * 1.3 注册离线推送服务成功后,获取注册 ID 标识, 即 RegistrationID
  49. *
  50. * @note 请注意:
  51. * - callback 回调值是 registerPush 时候传递的 userId
  52. * - 若传递 userId 为空,则为设备的标识 ID,卸载重装会改变。
  53. *
  54. */
  55. + (void)getRegistrationID:(TIMPushValueCallback)callback NS_EXTENSION_UNAVAILABLE_IOS("This API is not supported in App Extension");
  56. /**
  57. * 1.4 设置注册离线推送服务使用的推送 ID 标识, 即 RegistrationID,需要在注册推送服务之前调用
  58. *
  59. * @param registrationID 为设备的推送标识 ID,卸载重装会改变。
  60. *
  61. */
  62. + (void)setRegistrationID:(NSString *)registrationID callback:(TIMPushCallback)callback NS_EXTENSION_UNAVAILABLE_IOS("This API is not supported in App Extension");
  63. /**
  64. * 1.5 设置应用前台是否展示推送
  65. *
  66. * @param disable 如果值为 YES,则关闭前台推送;如果值为 NO,则开启前台推送展示。
  67. *
  68. */
  69. + (void)disablePostNotificationInForeground:(BOOL)disable NS_SWIFT_NAME(disablePostNotificationInForeground(disable:));
  70. /**
  71. * 1.6 实验性 API 接口
  72. *
  73. * @param api 接口名称
  74. * @param param 接口参数
  75. * @note 该接口提供一些实验性功能
  76. */
  77. + (void)callExperimentalAPI:(NSString *)api
  78. param:(NSObject * _Nullable)param
  79. succ:(TIMPushCallExperimentalAPISucc)succ
  80. fail:(TIMPushFailedCallback)fail NS_EXTENSION_UNAVAILABLE_IOS("This API is not supported in App Extension");
  81. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  82. //
  83. // (二) Push 全局监听
  84. //
  85. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  86. /**
  87. * 2.1 添加 Push 监听器
  88. */
  89. + (void)addPushListener:(id<TIMPushListener>)listener NS_SWIFT_NAME(addPushListener(listener:)) NS_EXTENSION_UNAVAILABLE_IOS("This API is not supported in App Extension");
  90. /**
  91. * 2.2. 移除 Push 监听器
  92. */
  93. + (void)removePushListener:(id<TIMPushListener>)listener NS_SWIFT_NAME(removePushListener(listener:)) NS_EXTENSION_UNAVAILABLE_IOS("This API is not supported in App Extension");
  94. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  95. //
  96. // (三)统计 TIMPush 的推送抵达率
  97. //
  98. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  99. /**
  100. * 3.1 统计 TIMPush 的推送抵达率 (按照需求选择启用)
  101. *
  102. * @note 请注意:
  103. * - 仅支持在 Notification Service Extension 的 '- didReceiveNotificationRequest:withContentHandler:' 方法中调用;
  104. * - appGroup 标识当前主 APP 和 Extension 之间共享的 APP Group,需要在主 APP 的 Capability 中配置 App Groups 能力。
  105. * - 可以点击[https://cloud.tencent.com/document/product/269/100627#a76b331f-3d49-48c9-99a9-5301c7d7fa99]查阅详细步骤
  106. */
  107. + (void)handleNotificationServiceRequest:(UNNotificationRequest *)request appGroupID:(NSString *)appGroupID callback:(TIMPushNotificationExtensionCallback)callback NS_SWIFT_NAME(handleNotificationServiceRequest(request:appGroupID:callback:));
  108. @end
  109. @protocol TIMPushListener <NSObject>
  110. /**
  111. * 收到 Push 消息
  112. *
  113. * @param message 消息
  114. */
  115. - (void)onRecvPushMessage:(TIMPushMessage *)message;
  116. /**
  117. * 收到 Push 消息撤回的通知
  118. *
  119. * @param messageID 消息唯一标识
  120. */
  121. - (void)onRevokePushMessage:(NSString *)messageID;
  122. /**
  123. * 点击通知栏消息回调
  124. *
  125. * @param ext 离线消息透传字段
  126. *
  127. */
  128. - (void)onNotificationClicked:(NSString *)ext;
  129. @end
  130. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  131. //
  132. // 离线推送证书配置 与 点击事件处理回调
  133. //
  134. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  135. @protocol TIMPushDelegate <UIApplicationDelegate>
  136. @optional
  137. /**
  138. * 离线推送证书的 ID
  139. * 您需要在 AppDelegate.m 中实现该方法,返回值为 IM 控制台分配的证书 ID
  140. *
  141. * 特别注意的是,该证书ID使用时需要对应您的运行环境:
  142. * 使用开发环境的证书ID,可以直接在Xcode上运行测试(Debug 即可调试推送)。
  143. * 使用生产环境的证书ID,需要您 Archive 出 release 包后进行测试。
  144. */
  145. - (int)businessID;
  146. /**
  147. * 主 APP 和 NSNotification Service Extension 所属的 App Group ID [可选]
  148. * 注意: 当您需要借助 iOS 10 特性来统计消息的抵达率时,推荐您设置此属性。
  149. * 详细步骤可查阅:https://cloud.tencent.com/document/product/269/100624#ae5590eb-b974-4226-9f1b-720fb0201c85
  150. */
  151. - (NSString *)applicationGroupID;
  152. /**
  153. * 收到远程推送(在线收到后触发、离线时点击通知栏通知触发)
  154. * 如果要自定义解析收到的远程推送通知,请在您的 AppDelegate 中实现该方法
  155. *
  156. * @note
  157. * - 如果返回 YES, TIMPush 将不在执行内置的 TUIKit 离线推送解析逻辑,完全交由您自行处理;
  158. * - 如果返回 NO,TIMPush 将继续执行内置的 TUIKit 离线推送解析逻辑,继续回调 - navigateToBuiltInChatViewController:groupID: 方法。
  159. */
  160. - (BOOL)onRemoteNotificationReceived:(nullable NSString *)notice;
  161. /**
  162. * 点击通知栏离线推送的通知后,跳转到自定义页面
  163. * 如果要实现跳转到聊天列表,请在您的 AppDelegate 中实现如下方法
  164. *
  165. * @note
  166. * - TIMPush 默认已经从离线推送中解析出当前推送的 userID 和 groupID
  167. * - 如果 groupID 不为空,说明当前点击的是群聊离线消息
  168. * - 如果 groupID 为空且 userID 不为空,说明当前点击的是单聊离线消息
  169. */
  170. - (void)navigateToBuiltInChatViewController:(nullable NSString *)userID
  171. groupID:(nullable NSString *)groupID NS_SWIFT_NAME(navigateToBuiltInChatViewController(userID:groupID:));
  172. @end
  173. @interface TIMPushMessage : NSObject
  174. // 离线推送标题
  175. @property (nonatomic, copy) NSString *title;
  176. // 离线推送内容
  177. @property (nonatomic, copy) NSString *desc;
  178. // 离线推送透传内容
  179. @property (nonatomic, copy) NSString *ext;
  180. // 消息唯一标识 ID
  181. @property (nonatomic, copy) NSString *messageID;
  182. @end
  183. NS_ASSUME_NONNULL_END