No Description

UMessage.h 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. //
  2. // UMessage.h
  3. // UMessage
  4. //
  5. // Created by luyiyuan on 10/8/13.
  6. // Copyright (c) 2013 umeng.com. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. #import <UIKit/UIKit.h>
  10. #import <UserNotifications/UserNotifications.h>
  11. /** String type for alias
  12. */
  13. //新浪微博
  14. UIKIT_EXTERN NSString * __nonnull const kUMessageAliasTypeSina;
  15. //腾讯微博
  16. UIKIT_EXTERN NSString * __nonnull const kUMessageAliasTypeTencent;
  17. //QQ
  18. UIKIT_EXTERN NSString * __nonnull const kUMessageAliasTypeQQ;
  19. //微信
  20. UIKIT_EXTERN NSString * __nonnull const kUMessageAliasTypeWeiXin;
  21. //百度
  22. UIKIT_EXTERN NSString * __nonnull const kUMessageAliasTypeBaidu;
  23. //人人网
  24. UIKIT_EXTERN NSString * __nonnull const kUMessageAliasTypeRenRen;
  25. //开心网
  26. UIKIT_EXTERN NSString * __nonnull const kUMessageAliasTypeKaixin;
  27. //豆瓣
  28. UIKIT_EXTERN NSString * __nonnull const kUMessageAliasTypeDouban;
  29. //facebook
  30. UIKIT_EXTERN NSString * __nonnull const kUMessageAliasTypeFacebook;
  31. //twitter
  32. UIKIT_EXTERN NSString * __nonnull const kUMessageAliasTypeTwitter;
  33. //error for handle
  34. extern NSString * __nonnull const kUMessageErrorDomain;
  35. typedef NS_ENUM(NSInteger, kUMessageError) {
  36. /**未知错误*/
  37. kUMessageErrorUnknown = 0,
  38. /**响应出错*/
  39. kUMessageErrorResponseErr = 1,
  40. /**操作失败*/
  41. kUMessageErrorOperateErr = 2,
  42. /**参数非法*/
  43. kUMessageErrorParamErr = 3,
  44. /**条件不足(如:还未获取device_token,添加tag是不成功的)*/
  45. kUMessageErrorDependsErr = 4,
  46. /**服务器限定操作*/
  47. kUMessageErrorServerSetErr = 5,
  48. };
  49. @class CLLocation;
  50. /** UMessage:开发者使用主类(API)
  51. */
  52. @interface UMessage : NSObject
  53. ///---------------------------------------------------------------------------------------
  54. /// @name settings(most required)
  55. ///---------------------------------------------------------------------------------------
  56. //--required
  57. /** 绑定App的appKey和启动参数,启动消息参数用于处理用户通过消息打开应用相关信息
  58. @param appKey 主站生成appKey
  59. @param launchOptions 启动参数
  60. */
  61. + (void)startWithAppkey:(NSString * __nonnull)appKey launchOptions:(NSDictionary * __nullable)launchOptions;
  62. /** 绑定App的appKey和启动参数,启动消息参数用于处理用户通过消息打开应用相关信息
  63. @param appKey 主站生成appKey
  64. @param launchOptions 启动参数
  65. @param value 开启友盟内部协议使用https的开关,默认是关闭
  66. */
  67. + (void)startWithAppkey:(NSString * __nonnull)appKey launchOptions:(NSDictionary * __nullable)launchOptions httpsenable:(BOOL)value;
  68. /** 注册RemoteNotification的类型
  69. @brief 分别针对iOS8以前版本及iOS8及以后开启推送消息推送。
  70. 默认的时候是sound,badge ,alert三个功能全部打开, 没有开启交互式推送行为分类。
  71. */
  72. + (void)registerForRemoteNotifications;
  73. /** 注册RemoteNotification的类型
  74. @brief 分别针对iOS8以下版本及iOS8及以上开启推送消息推送。
  75. 默认的时候是sound,badge ,alert三个功能全部打开。
  76. @param categories 交互式推送行为分类。可以具体查看demo。
  77. */
  78. + (void)registerForRemoteNotifications:(nullable NSSet<UIUserNotificationCategory *> *)categories8;
  79. /** 注册RemoteNotification的类型
  80. @brief 分别针对iOS8以前版本及iOS8及以后开启推送消息推送。
  81. 默认的时候是sound,badge ,alert三个功能全部打开。
  82. @param categories8 交互式推送行为分类。可以具体查看demo。
  83. @param types7 iOS7及以下版本的推送类型。默认types7 = UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeSound;
  84. @param types8 iOS8及以上,iOS10以下版本的推送类型。默认types8 = UIUserNotificationTypeAlert|UIUserNotificationTypeSound|UIUserNotificationTypeBadge;
  85. */
  86. + (void)registerForRemoteNotifications:(nullable NSSet<UIUserNotificationCategory *> *)categories8
  87. withTypesForIos7:(UIRemoteNotificationType)types7
  88. withTypesForIos8:(UIUserNotificationType)types8;
  89. /** 解除RemoteNotification的注册(关闭消息推送,实际调用:[[UIApplication sharedApplication] unregisterForRemoteNotifications])
  90. @param types 消息类型,参见`UIRemoteNotificationType`
  91. */
  92. + (void)unregisterForRemoteNotifications;
  93. /** 向友盟注册该设备的deviceToken,便于发送Push消息
  94. @param deviceToken APNs返回的deviceToken
  95. */
  96. + (void)registerDeviceToken:(nullable NSData *)deviceToken;
  97. /** 应用处于运行时(前台、后台)的消息处理
  98. @param userInfo 消息参数
  99. */
  100. + (void)didReceiveRemoteNotification:(nullable NSDictionary *)userInfo;
  101. //--optional
  102. /** 开发者自行传入location
  103. @param location 当前location信息
  104. */
  105. + (void)setLocation:(nullable CLLocation *)location;
  106. /** 设置应用的日志输出的开关(默认关闭)
  107. @param value 是否开启标志,注意App发布时请关闭日志输出
  108. */
  109. + (void)setLogEnabled:(BOOL)value;
  110. /** 设置是否允许SDK自动清空角标(默认开启)
  111. @param value 是否开启角标清空
  112. */
  113. + (void)setBadgeClear:(BOOL)value;
  114. /** 设置是否允许SDK当应用在前台运行收到Push时弹出Alert框(默认开启)
  115. @warning 建议不要关闭,否则会丢失程序在前台收到的Push的点击统计,如果定制了 Alert,可以使用`sendClickReportForRemoteNotification`补发 log
  116. @param value 是否开启弹出框
  117. */
  118. + (void)setAutoAlert:(BOOL)value;
  119. /** 设置App的发布渠道(默认为:"App Store")
  120. @param channel 渠道名称
  121. */
  122. + (void)setChannel:(nullable NSString *)channel;
  123. /** 设置设备的唯一ID,目前友盟这边设备的唯一ID是OpenUdid,如果你们可以采集到更合适的唯一ID,可以采用这个ID来替换OpenUdid
  124. @warning 用户可以设置uniqueId方便以后扩展,我们短时间内在服务区端任然会采取OpenUdid作为唯一标记。
  125. @param uniqueId 唯一ID名称
  126. */
  127. + (void)setUniqueID:(nullable NSString *)uniqueId;
  128. /** 为某个消息发送点击事件
  129. @warning 请注意不要对同一个消息重复调用此方法,可能导致你的消息打开率飚升,此方法只在需要定制 Alert 框时调用
  130. @param userInfo 消息体的NSDictionary,此Dictionary是
  131. (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo中的userInfo
  132. */
  133. + (void)sendClickReportForRemoteNotification:(nullable NSDictionary *)userInfo;
  134. ///---------------------------------------------------------------------------------------
  135. /// @name tag (optional)
  136. ///---------------------------------------------------------------------------------------
  137. /** 获取当前绑定设备上的所有tag(每台设备最多绑定64个tag)
  138. @warning 获取列表的先决条件是已经成功获取到device_token,否则失败(kUMessageErrorDependsErr)
  139. @param handle responseTags为绑定的tag
  140. 集合,remain剩余可用的tag数,为-1时表示异常,error为获取失败时的信息(ErrCode:kUMessageError)
  141. */
  142. + (void)getTags:(nullable void (^)(NSSet *__nonnull responseTags,NSInteger remain,NSError *__nonnull error))handle;
  143. /** 绑定一个或多个tag至设备,每台设备最多绑定64个tag,超过64个,绑定tag不再成功,可`removeTag`或者`removeAllTags`来精简空间
  144. @warning 添加tag的先决条件是已经成功获取到device_token,否则直接添加失败(kUMessageErrorDependsErr)
  145. @param tag tag标记,可以为单个tag(NSString)也可以为tag集合(NSArray、NSSet),单个tag最大允许长度50字节,编码UTF-8,超过长度自动截取
  146. @param handle responseTags为绑定的tag集合,remain剩余可用的tag数,为-1时表示异常,error为获取失败时的信息(ErrCode:kUMessageError)
  147. */
  148. + (void)addTag:(nullable id)tag response:(nullable void (^)(id __nonnull responseObject ,NSInteger remain,NSError *__nonnull error))handle;
  149. /** 删除设备中绑定的一个或多个tag
  150. @warning 添加tag的先决条件是已经成功获取到device_token,否则失败(kUMessageErrorDependsErr)
  151. @param tag tag标记,可以为单个tag(NSString)也可以为tag集合(NSArray、NSSet),单个tag最大允许长度50字节,编码UTF-8,超过长度自动截取
  152. @param handle responseTags为绑定的tag集合,remain剩余可用的tag数,为-1时表示异常,error为获取失败时的信息(ErrCode:kUMessageError)
  153. */
  154. + (void)removeTag:(id __nonnull)tag response:(nullable void (^)(id __nonnull responseObject,NSInteger remain,NSError *__nonnull error))handle;
  155. /** 删除设备中所有绑定的tag,handle responseObject
  156. @warning 删除tag的先决条件是已经成功获取到device_token,否则失败(kUMessageErrorDependsErr)
  157. @param handle responseTags为绑定的tag集合,remain剩余可用的tag数,为-1时表示异常,error为获取失败时的信息(ErrCode:kUMessageError)
  158. */
  159. + (void)removeAllTags:(nullable void (^)(id __nonnull responseObject,NSInteger remain,NSError *__nonnull error))handle;
  160. ///---------------------------------------------------------------------------------------
  161. /// @name alias (optional)
  162. ///---------------------------------------------------------------------------------------
  163. /** 绑定一个别名至设备(含账户,和平台类型)
  164. @warning 添加Alias的先决条件是已经成功获取到device_token,否则失败(kUMessageErrorDependsErr)
  165. @param name 账户,例如email
  166. @param type 平台类型,参见本文件头部的`kUMessageAliasType...`,例如:kUMessageAliasTypeSina
  167. @param handle block返回数据,error为获取失败时的信息,responseObject为成功返回的数据
  168. */
  169. + (void)addAlias:(NSString * __nonnull)name type:(NSString * __nonnull)type response:(nullable void (^)(id __nonnull responseObject,NSError *__nonnull error))handle;
  170. /** 绑定一个别名至设备(含账户,和平台类型),并解绑这个别名曾今绑定过的设备。
  171. @warning 添加Alias的先决条件是已经成功获取到device_token,否则失败(kUMessageErrorDependsErr)
  172. @param name 账户,例如email
  173. @param type 平台类型,参见本文件头部的`kUMessageAliasType...`,例如:kUMessageAliasTypeSina
  174. @param handle block返回数据,error为获取失败时的信息,responseObject为成功返回的数据
  175. */
  176. + (void)setAlias:(NSString *__nonnull )name type:(NSString * __nonnull)type response:(nullable void (^)(id __nonnull responseObject,NSError *__nonnull error))handle;
  177. /** 删除一个设备的别名绑定
  178. @warning 删除Alias的先决条件是已经成功获取到device_token,否则失败(kUMessageErrorDependsErr)
  179. @param name 账户,例如email
  180. @param type 平台类型,参见本文件头部的`kUMessageAliasType...`,例如:kUMessageAliasTypeSina
  181. @param handle block返回数据,error为获取失败时的信息,responseObject为成功返回的数据
  182. */
  183. + (void)removeAlias:(NSString * __nonnull)name type:(NSString * __nonnull)type response:(nullable void (^)(id __nonnull responseObject, NSError *__nonnull error))handle;
  184. @end