UMessage.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. //
  2. // UMessage.h
  3. // UMessage
  4. //
  5. // Created by shile on 2017/4/1.
  6. // Copyright © 2017年 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. typedef NS_OPTIONS(NSUInteger, UMessageAuthorizationOptions) {
  50. UMessageAuthorizationOptionNone = 0,
  51. UMessageAuthorizationOptionBadge = (1 << 0),
  52. UMessageAuthorizationOptionSound = (1 << 1),
  53. UMessageAuthorizationOptionAlert = (1 << 2),
  54. };
  55. typedef void (^UMPlaunchFinishBlock)();
  56. @interface UMessageRegisterEntity : NSObject
  57. //需要注册的类型
  58. @property (nonatomic, assign) NSInteger types;
  59. @property (nonatomic, strong) NSSet * categories;
  60. @end
  61. /** UMessage:开发者使用主类(API)
  62. */
  63. @interface UMessage : NSObject
  64. ///---------------------------------------------------------------------------------------
  65. /// @name settings(most required)
  66. ///---------------------------------------------------------------------------------------
  67. //--required
  68. /**
  69. 友盟推送的注册接口
  70. @param launchOptions 系统的launchOptions启动消息参数用于处理用户通过消息打开应用相关信息。
  71. @param entity 友盟推送的注册类如果使用默认的注册,Entity设置为nil即可。如需其他的可选择其他参数,具体的参考demo或者文档。
  72. @param completionHandler iOS10授权后的回调。
  73. */
  74. + (void)registerForRemoteNotificationsWithLaunchOptions:(NSDictionary *_Nullable)launchOptions Entity:(UMessageRegisterEntity *)entity completionHandler:(void (^_Nullable)(BOOL granted, NSError *__nullable error))completionHandler;
  75. /** 解除RemoteNotification的注册(关闭消息推送,实际调用:[[UIApplication sharedApplication] unregisterForRemoteNotifications])
  76. iOS10.0,iOS10.1两个版本存在系统bug,调用此方法后可能会导致无法再次打开推送
  77. */
  78. + (void)unregisterForRemoteNotifications;
  79. /** 向友盟注册该设备的deviceToken,便于发送Push消息
  80. @param deviceToken APNs返回的deviceToken
  81. */
  82. + (void)registerDeviceToken:(nullable NSData *)deviceToken;
  83. /** 应用处于运行时(前台、后台)的消息处理
  84. @param userInfo 消息参数
  85. */
  86. + (void)didReceiveRemoteNotification:(nullable NSDictionary *)userInfo;
  87. /** 设置是否允许SDK自动清空角标(默认开启)
  88. @param value 是否开启角标清空
  89. */
  90. + (void)setBadgeClear:(BOOL)value;
  91. /** 设置是否允许SDK当应用在前台运行收到Push时弹出Alert框(默认开启)
  92. @warning 建议不要关闭,否则会丢失程序在前台收到的Push的点击统计,如果定制了 Alert,可以使用`sendClickReportForRemoteNotification`补发 log
  93. @param value 是否开启弹出框
  94. */
  95. + (void)setAutoAlert:(BOOL)value;
  96. /** 为某个消息发送点击事件
  97. @warning 请注意不要对同一个消息重复调用此方法,可能导致你的消息打开率飚升,此方法只在需要定制 Alert 框时调用
  98. @param userInfo 消息体的NSDictionary,此Dictionary是
  99. (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo中的userInfo
  100. */
  101. + (void)sendClickReportForRemoteNotification:(nullable NSDictionary *)userInfo;
  102. ///---------------------------------------------------------------------------------------
  103. /// @name tag (optional)
  104. ///---------------------------------------------------------------------------------------
  105. /** 获取当前绑定设备上的所有tag(每台设备最多绑定64个tag)
  106. @warning 获取列表的先决条件是已经成功获取到device_token,否则失败(kUMessageErrorDependsErr)
  107. @param handle responseTags为绑定的tag
  108. 集合,remain剩余可用的tag数,为-1时表示异常,error为获取失败时的信息(ErrCode:kUMessageError)
  109. */
  110. + (void)getTags:(void (^_Nonnull)(NSSet *__nonnull responseTags,NSInteger remain,NSError *__nonnull error))handle;
  111. /** 绑定一个或多个tag至设备,每台设备最多绑定64个tag,超过64个,绑定tag不再成功,可`removeTag`或者`removeAllTags`来精简空间
  112. @warning 添加tag的先决条件是已经成功获取到device_token,否则直接添加失败(kUMessageErrorDependsErr)
  113. @param tag tag标记,可以为单个tag(NSString)也可以为tag集合(NSArray、NSSet),单个tag最大允许长度50字节,编码UTF-8,超过长度自动截取
  114. @param handle responseTags为绑定的tag集合,remain剩余可用的tag数,为-1时表示异常,error为获取失败时的信息(ErrCode:kUMessageError)
  115. */
  116. + (void)addTags:(__nonnull id)tag response:(nullable void (^)(id __nonnull responseObject ,NSInteger remain,NSError *__nonnull error))handle;
  117. /** 删除设备中绑定的一个或多个tag
  118. @warning 添加tag的先决条件是已经成功获取到device_token,否则失败(kUMessageErrorDependsErr)
  119. @param tag tag标记,可以为单个tag(NSString)也可以为tag集合(NSArray、NSSet),单个tag最大允许长度50字节,编码UTF-8,超过长度自动截取
  120. @param handle responseTags为绑定的tag集合,remain剩余可用的tag数,为-1时表示异常,error为获取失败时的信息(ErrCode:kUMessageError)
  121. */
  122. + (void)deleteTags:(__nonnull id)tag response:(nullable void (^)(id __nonnull responseObject,NSInteger remain,NSError *__nonnull error))handle;
  123. ///---------------------------------------------------------------------------------------
  124. /// @name WeightedTag (optional)
  125. ///---------------------------------------------------------------------------------------
  126. /**
  127. 绑定一个或多个weightedtag以及权值至设备
  128. @warning 添加tag的先决条件是已经成功获取到device_token,否则直接添加失败(kUMessageErrorDependsErr)
  129. @param weightedTag tag标记,为NSDictionary类型,key为weightedtag名称,value为权值。
  130. @param handle responseTags为绑定的tag集合,remain剩余可用的tag数,为-1时表示异常,error为获取失败时的信息(ErrCode:kUMessageError)
  131. */
  132. + (void)addWeightedTags:(NSDictionary * _Nonnull)weightedTag response:(nullable void (^)(id __nonnull responseObject ,NSInteger remain,NSError *__nonnull error))handle;
  133. /** 获取当前绑定设备上的所有Weightedtag
  134. @warning 获取列表的先决条件是已经成功获取到device_token,否则失败(kUMessageErrorDependsErr)
  135. @param handle responseWeightedTags为绑定的WeightedTags字典,key为weightedtag名称,value为权值,remain剩余可用的weightedtag数,为-1时表示异常,error为获取失败时的信息(ErrCode:kUMessageError)
  136. */
  137. + (void)getWeightedTags:(void (^_Nonnull)(NSDictionary *__nonnull responseWeightedTags,NSInteger remain,NSError *__nonnull error))handle;
  138. /**
  139. 删除一个设备中绑定的一个或多个weightedtag
  140. @warning 添加tag的先决条件是已经成功获取到device_token,否则直接添加失败(kUMessageErrorDependsErr)
  141. @param weightedTags tag标记,为NSDictionary类型,key为tag名称,value为权值。
  142. @param handle responseTags为绑定的tag集合,remain剩余可用的tag数,为-1时表示异常,error为获取失败时的信息(ErrCode:kUMessageError)
  143. */
  144. + (void)deleteWeightedTags:(id _Nonnull)weightedTags response:(nullable void (^)(id __nonnull responseObject,NSInteger remain,NSError *__nonnull error))handle;
  145. /// @name alias (optional)
  146. ///---------------------------------------------------------------------------------------
  147. /** 绑定一个别名至设备(含账户,和平台类型)
  148. @warning 添加Alias的先决条件是已经成功获取到device_token,否则失败(kUMessageErrorDependsErr)
  149. @param name 账户,例如email
  150. @param type 平台类型,参见本文件头部的`kUMessageAliasType...`,例如:kUMessageAliasTypeSina
  151. @param handle block返回数据,error为获取失败时的信息,responseObject为成功返回的数据
  152. */
  153. + (void)addAlias:(NSString * __nonnull)name type:(NSString * __nonnull)type response:(nullable void (^)(id __nonnull responseObject,NSError *__nonnull error))handle;
  154. /** 绑定一个别名至设备(含账户,和平台类型),并解绑这个别名曾今绑定过的设备。
  155. @warning 添加Alias的先决条件是已经成功获取到device_token,否则失败(kUMessageErrorDependsErr)
  156. @param name 账户,例如email
  157. @param type 平台类型,参见本文件头部的`kUMessageAliasType...`,例如:kUMessageAliasTypeSina
  158. @param handle block返回数据,error为获取失败时的信息,responseObject为成功返回的数据
  159. */
  160. + (void)setAlias:(NSString *__nonnull )name type:(NSString * __nonnull)type response:(nullable void (^)(id __nonnull responseObject,NSError *__nonnull error))handle;
  161. /** 删除一个设备的别名绑定
  162. @warning 删除Alias的先决条件是已经成功获取到device_token,否则失败(kUMessageErrorDependsErr)
  163. @param name 账户,例如email
  164. @param type 平台类型,参见本文件头部的`kUMessageAliasType...`,例如:kUMessageAliasTypeSina
  165. @param handle block返回数据,error为获取失败时的信息,responseObject为成功返回的数据
  166. */
  167. + (void)removeAlias:(NSString * __nonnull)name type:(NSString * __nonnull)type response:(nullable void (^)(id __nonnull responseObject, NSError *__nonnull error))handle;
  168. /** 添加一个启动页的开屏消息
  169. */
  170. +(void)addLaunchMessage;
  171. /** 添加一个插屏消息
  172. @param label 当前位置的标识
  173. */
  174. +(void)addCardMessageWithLabel:(NSString* __nonnull)label;
  175. /**
  176. 添加一个自定义插屏消息
  177. @param portraitsize portrait时显示的size
  178. @param landscapesize landscape时显示的大小
  179. @param button button 可以自定义的button
  180. @param label 标识
  181. */
  182. +(void)addCustomCardMessageWithPortraitSize:(CGSize )portraitsize LandscapeSize:(CGSize )landscapesize CloseBtn:(UIButton *_Nullable)button Label:(NSString *_Nonnull)label umCustomCloseButtonDisplayMode:(BOOL )displaymode;
  183. /**
  184. 增加一个文本插屏消息
  185. @param label 当前位置的标识
  186. */
  187. +(void)addPlainTextCardMessageWithTitleFont:(UIFont *_Nullable)titlefont ContentFont:(UIFont *_Nullable)contentfont buttonFont:(UIFont *_Nullable)buttonfont Label:(NSString*_Nonnull)label;;
  188. /**
  189. 设置应用内通知的模式
  190. @param debugmode 是否是debug模式
  191. */
  192. +(void)openDebugMode:(BOOL)debugmode;
  193. /**
  194. 设置webViewController在.h文件中声明一个叫url的参数,SDK内部会去调用
  195. @param webViewController webViewController
  196. */
  197. +(void)setWebViewController:(UIViewController *_Nonnull)webViewController;
  198. @end