iOS API

标签与别名 API(iOS)

功能说明

温馨提示,设置标签别名请注意处理 call back 结果。

只有 call back 返回值为 0 才设置成功,才可以向目标推送。否则服务器 API 会返回 1011 错误。所有回调函数都在主线程运行。


提供几个相关 API 用来操作别名(alias)与标签(tags)。

这几个 API 可以在 App 里任何地方调用。

别名 alias

为安装了应用程序的用户,取个别名来标识。以后给该用户 Push 消息时,就可以用此别名来指定。
每个用户只能指定一个别名。

同一个应用程序内,对不同的用户,建议取不同的别名。这样,尽可能根据别名来唯一确定用户。

系统不限定一个别名只能指定一个用户。如果一个别名被指定到了多个用户,当给指定这个别名发消息时,服务器端 API 会同时给这多个用户发送消息。

举例:在一个用户要登录的游戏中,可能设置别名为 userid。游戏运营时,发现该用户 3 天没有玩游戏了,则根据 userid 调用服务器端 API 发通知到客户端提醒用户。

标签 tag

为安装了应用程序的用户,打上标签。其目的主要是方便开发者根据标签,来批量下发 Push 消息。

可为每个用户打多个标签。

举例: game, old_page, women

Method - addTags:completion:seq:

调用此 API 来增加标签,在 block 中返回结果

Note:这个接口是增加逻辑,而不是覆盖逻辑

支持的版本

开始支持的版本:3.0.6

接口定义

  1. + (void)addTags:(NSSet<NSString *> *)tags
  2. completion:(JPUSHTagsOperationCompletion)completion
  3. seq:(NSInteger)seq;

参数说明

  • tags

    • 不能设置 nil 或者空集合([NSSet set])
    • 集合成员类型要求为 NSString 类型
    • 每次调用至少设置一个 tag
    • 有效的标签组成:字母(区分大小写)、数字、下划线、汉字、特殊字符@!#$&*+=.|
    • 限制:每个 tag 命名长度限制为 40 字节,最多支持设置 1000 个 tag,但总长度不得超过 5 K 字节。(判断长度需采用 UTF-8 编码)
    • 单个设备最多支持设置 1000 个 tag。App 全局 tag 数量无限制
  • completion

    • 用于回调返回对应的参数 tags。并返回对应的状态码:0 为成功,其他返回码请参考错误码定义。seq 为调用时传入的会话序列号
  • seq

    • 请求时传入的序列号,会在回调时原样返回

Method - setTags:completion:seq:

调用此 API 来设置标签,在 block 中返回结果

Note:这个接口是覆盖逻辑,而不是增加逻辑,调用此接口会覆盖之前设置的全部标签

支持的版本

开始支持的版本:3.0.6

接口定义

  1. + (void)setTags:(NSSet<NSString *> *)tags
  2. completion:(JPUSHTagsOperationCompletion)completion
  3. seq:(NSInteger)seq;

参数说明

  • tags

    • 不能设置 nil 或者空集合([NSSet set])
    • 集合成员类型要求为 NSString 类型
    • 每次调用至少设置一个 tag
    • 有效的标签组成:字母(区分大小写)、数字、下划线、汉字、特殊字符@!#$&*+=.|
    • 限制:每个 tag 命名长度限制为 40 字节,最多支持设置 1000 个 tag,但总长度不得超过 5 K 字节。(判断长度需采用 UTF-8 编码)
    • 单个设备最多支持设置 1000 个 tag。App 全局 tag 数量无限制
  • completion

    • 用于回调返回对应的参数 tags。并返回对应的状态码:0 为成功,其他返回码请参考错误码定义。seq 为调用时传入的会话序列号
  • seq

    • 请求时传入的序列号,会在回调时原样返回

Method - deleteTags:completion:seq:

调用此 API 来删除标签,在 block 中返回结果

支持的版本

开始支持的版本:3.0.6

接口定义

  1. + (void)deleteTags:(NSSet<NSString *> *)tags
  2. completion:(JPUSHTagsOperationCompletion)completion
  3. seq:(NSInteger)seq;

参数说明

  • tags

    • 不能设置 nil 或者空集合([NSSet set])
    • 集合成员类型要求为 NSString 类型
    • 每次调用至少删除一个 tag
    • 有效的标签组成:字母(区分大小写)、数字、下划线、汉字、特殊字符@!#$&*+=.|
    • 限制:每个 tag 命名长度限制为 40 字节,最多支持删除 1000 个 tag,但总长度不得超过 5 K 字节。(判断长度需采用 UTF-8 编码)
  • completion

    • 回调返回对应的参数 tags。并返回对应的状态码:0 为成功,其他返回码请参考错误码定义。seq 为调用时传入的会话序列号
  • seq

    • 请求时传入的序列号,会在回调时原样返回

Method - cleanTags:completion:seq:

调用此 API 来清除所有标签,在 block 中返回结果

支持的版本

开始支持的版本:3.0.6

接口定义

  1. + (void)cleanTags:(JPUSHTagsOperationCompletion)completion
  2. seq:(NSInteger)seq;

参数说明

  • completion

    • 回调返回的 tags 为 nil。返回对应的状态码:0 为成功,其他返回码请参考错误码定义。seq 为调用时传入的会话序列号
  • seq

    • 请求时传入的序列号,会在回调时原样返回

Method - getAllTags:completion:seq:

调用此 API 来获取所有标签,在 block 中返回结果

支持的版本

开始支持的版本:3.0.6

接口定义

  1. + (void)getAllTags:(JPUSHTagsOperationCompletion)completion
  2. seq:(NSInteger)seq;

参数说明

  • completion

    • 回调返回的 tags 为查询结果。返回对应的状态码:0 为成功,其他返回码请参考错误码定义。seq 为调用时传入的会话序列号
  • seq

    • 请求时传入的序列号,会在回调时原样返回

Method - validTag:completion:seq:

调用此 API 来验证目标 tag 是否已经设置

支持的版本

开始支持的版本:3.0.6

接口定义

  1. + (void)validTag:(NSString *)tag
  2. completion:(JPUSHTagValidOperationCompletion)completion
  3. seq:(NSInteger)seq;

参数说明

  • tag

    • 不能设置 nil 或者空字符串
    • 有效的标签组成:字母(区分大小写)、数字、下划线、汉字、特殊字符@!#$&*+=.|
    • 限制:每个 tag 命名长度限制为 40 字节(判断长度需采用 UTF-8 编码)
  • completion

    • 回调返回对应的参数 tag。并返回对应的状态码:0 为成功,其他返回码请参考错误码定义。seq 为调用时传入的会话序列号
    • 在回调中查看 isBind 属性查看是否已经设置,YES 为已经设置
  • seq

    • 请求时传入的序列号,会在回调时原样返回

Tags Block

  1. typedef void (^JPUSHTagsOperationCompletion)(NSInteger iResCode, NSSet *iTags, NSInteger seq);
  2. typedef void (^JPUSHTagValidOperationCompletion)(NSInteger iResCode, NSSet *iTags, NSInteger seq, BOOL isBind);

Method - setAlias:completion:seq:

调用此 API 来设置别名

支持的版本

开始支持的版本:3.0.6

接口定义

  1. + (void)setAlias:(NSString *)alias
  2. completion:(JPUSHAliasOperationCompletion)completion
  3. seq:(NSInteger)seq;

参数说明

  • alias
    • 不能设置 nil 或者空字符串 @””
    • 每次调用设置有效的别名,覆盖之前的设置
    • 有效的别名组成:字母(区分大小写)、数字、下划线、汉字、特殊字符@!#$&*+=.|
    • 限制:alias 命名长度限制为 40 字节。(判断长度需采用 UTF-8 编码)
  • completion

    • 回调返回对应的参数 alias。并返回对应的状态码:0 为成功,其他返回码请参考错误码定义。seq 为调用时传入的会话序列号
  • seq

    • 请求时传入的序列号,会在回调时原样返回

Method - deleteAlias:completion:seq:

调用此 API 来删除别名,在 block 中返回结果

支持的版本

开始支持的版本:3.0.6

接口定义

  1. + (void)deleteAlias:(JPUSHAliasOperationCompletion)completion
  2. seq:(NSInteger)seq;

参数说明

  • completion

    • 回调返回的 tags 为 nil。返回对应的状态码:0 为成功,其他返回码请参考错误码定义。seq 为调用时传入的会话序列号
  • seq

    • 请求时传入的序列号,会在回调时原样返回

Method - getAlias:completion:seq:

调用此 API 来查询当前别名,在 block 中返回结果

支持的版本

开始支持的版本:3.0.6

接口定义

  1. + (void)getAlias:(JPUSHAliasOperationCompletion)completion
  2. seq:(NSInteger)seq;

参数说明

  • completion

    • 回调返回的 tags 为查询结果。返回对应的状态码:0 为成功,其他返回码请参考错误码定义。seq 为调用时传入的会话序列号
  • seq

    • 请求时传入的序列号,会在回调时原样返回

Alias Block

  1. typedef void (^JPUSHAliasOperationCompletion)(NSInteger iResCode, NSString *iAlias, NSInteger seq);

Method - setTagsWithAlias (with Callback)

调用此 API 来同时设置别名与标签,支持回调函数。

需要理解的是,这个接口是覆盖逻辑,而不是增量逻辑。即新的调用会覆盖之前的设置。

在之前调用过后,如果需要再次改变别名与标签,只需要重新调用此 API 即可。

支持的版本

开始支持的版本:1.4.0

接口定义

  1. + (void)setTags:(NSSet *)tags alias:(NSString *)alias callbackSelector:(SEL)cbSelector object:(id)theTarget;

参数说明

  • alias
    • nil 此次调用不设置此值。
    • 空字符串(@””)表示取消之前的设置。
    • 每次调用设置有效的别名,覆盖之前的设置。
    • 有效的别名组成:字母(区分大小写)、数字、下划线、汉字、特殊字符(2.1.9 支持)@!#$&*+=.|。
    • 限制:alias 命名长度限制为 40 字节。(判断长度需采用 UTF-8 编码)
  • tags

    • nil 此次调用不设置此值。
    • 空集合([NSSet set])表示取消之前的设置。
    • 集合成员类型要求为 NSString 类型
    • 每次调用至少设置一个 tag,覆盖之前的设置,不是新增。
    • 有效的标签组成:字母(区分大小写)、数字、下划线、汉字、特殊字符(2.1.9 支持)@!#$&*+=.|。
    • 限制:每个 tag 命名长度限制为 40 字节,最多支持设置 1000 个 tag,但总长度不得超过 7 K 字节。(判断长度需采用 UTF-8 编码)
    • 单个设备最多支持设置 1000 个 tag。App 全局 tag 数量无限制。
  • callbackSelector

    • nil 此次调用不需要 Callback。
    • 用于回调返回对应的参数 alias, tags。并返回对应的状态码:0 为成功,其他返回码请参考错误码定义。
    • 回调函数请参考 SDK 实现。
  • theTarget

    • 参数值为实现了 callbackSelector 的实例对象。
    • nil 此次调用不需要 Callback。
  1. -(void)tagsAliasCallback:(int)iResCode
  2. tags:(NSSet*)tags
  3. alias:(NSString*)alias
  4. {
  5. NSLog(@"rescode: %d, \ntags: %@, \nalias: %@\n", iResCode, tags , alias);
  6. }

Method - setTagsWithAlias (background)

调用此 API 在后台同时设置别名与标签,不需要处理设置结果,SDK会自动进行失败重试

需要理解的是,这个接口是覆盖逻辑,而不是增量逻辑。即新的调用会覆盖之前的设置。

在之前调用过后,如果需要再次改变别名与标签,只需要重新调用此 API 即可。

需要注意,该 background 模式的设置和非 background 的设置是两种不同的设置,互相不影响,意味着,非 background 的设置不会终止当前进行的 background 设置,除非另一个 background 设置发生。

支持的版本

开始支持的版本:2.1.0

接口定义

  1. + (void)setTags:(NSSet *)tags aliasInbackground:(NSString *)alias;

参数说明

  • alias
    • nil 此次调用不设置此值。
    • 空字符串(@””)表示取消之前的设置。
    • 每次调用设置有效的别名,覆盖之前的设置。
    • 有效的别名组成:字母(区分大小写)、数字、下划线、汉字、特殊字符(2.1.9 支持)@!#$&*+=.|。
    • 限制:alias 命名长度限制为 40 字节。(判断长度需采用 UTF-8 编码)
  • tags

    • nil 此次调用不设置此值。
    • 空集合([NSSet set])表示取消之前的设置。
    • 集合成员类型要求为 NSString 类型
    • 每次调用至少设置一个 tag,覆盖之前的设置,不是新增。
    • 有效的标签组成:字母(区分大小写)、数字、下划线、汉字、特殊字符(2.1.9 支持)@!#$&*+=.|。
    • 限制:每个 tag 命名长度限制为 40 字节,最多支持设置 1000 个 tag,但总长度不得超过 7 K 字节。(判断长度需采用 UTF-8 编码)
    • 单个设备最多支持设置 1000 个 tag。App 全局 tag 数量无限制。
  1. [JPUSHService setTags:tags aliasInbackground:alias];

Method - setTagsWithAlias (with block)

调用此 API 来同时设置别名与标签,通过 block 来返回设置别名与标签的结果。

需要理解的是,这个接口是覆盖逻辑,而不是增量逻辑。即新的调用会覆盖之前的设置。

在之前调用过后,如果需要再次改变别名与标签,只需要重新调用此 API 即可。

支持的版本

开始支持的版本:2.1.0

接口定义

  1. + (void)setTags:(NSSet *)tags alias:(NSString *)alias fetchCompletionHandle:(void (^)(int iResCode, NSSet *iTags, NSString *iAlias))completionHandler

参数说明

  • alias
    • nil 此次调用不设置此值。
    • 空字符串(@””)表示取消之前的设置。
    • 每次调用设置有效的别名,覆盖之前的设置。
    • 有效的别名组成:字母(区分大小写)、数字、下划线、汉字、特殊字符(2.1.9 支持)@!#$&*+=.|。
    • 限制:alias 命名长度限制为 40 字节。(判断长度需采用 UTF-8 编码)
  • tags

    • nil 此次调用不设置此值。
    • 空集合([NSSet set])表示取消之前的设置。
    • 集合成员类型要求为 NSString 类型
    • 每次调用至少设置一个 tag,覆盖之前的设置,不是新增。
    • 有效的标签组成:字母(区分大小写)、数字、下划线、汉字、特殊字符(2.1.9 支持)@!#$&*+=.|。
    • 限制:每个 tag 命名长度限制为 40 字节,最多支持设置 1000 个 tag,但总长度不得超过 7 K 字节。(判断长度需采用 UTF-8 编码)
    • 单个设备最多支持设置 1000 个 tag。App 全局 tag 数量无限制。
  • (void (^)(int iResCode, NSSet iTags, NSString iAlias))completionHandler

    • completionHandler 用于处理设置返回结果
    • iResCode 返回的结果状态码
    • iTags 和 iAlias 返回设置的 tag 和 alias
  1. [JPUSHService setTags:tags alias:alias fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias){
  2. NSLog(@"rescode: %d, \ntags: %@, \nalias: %@\n", iResCode, iTags, iAlias);
  3. }];

Method - setTags

调用此 API 来设置标签,支持回调函数。

该方法是 setTagsWithAlias (with Callback) 的简化版本,用于只变更标签的情况。

使用建议

如果待设置的 alias / tags 是动态的,有可能在调用 setTagsWithAlias 时因为 alias / tags 无效而整调用失败。

调用此方法只设置 tags,可以排除可能的无效的 alias 对本次调用的影响。

支持的版本

开始支持的版本:1.4.0

接口定义

  1. + (void)setTags:(NSSet *)tags callbackSelector:(SEL)cbSelector object:(id)theTarget;

参数说明

  • tags

    • nil 此次调用不设置此值。
    • 空集合([NSSet set])表示取消之前的设置。
    • 每次调用至少设置一个 tag,覆盖之前的设置,不是新增。
    • 有效的标签组成:字母(区分大小写)、数字、下划线、汉字、特殊字符(2.1.9 支持)@!#$&*+=.|。
    • 限制:每个 tag 命名长度限制为 40 字节,最多支持设置 1000 个tag,但总长度不得超过 7 K 字节。(判断长度需采用 UTF-8 编码)
    • 单个设备最多支持设置 1000 个 tag。App 全局 tag 数量无限制。
  • callbackSelector

    • nil 此次调用不需要 Callback。
    • 用于回调返回对应的参数 alias, tags。并返回对应的状态码:0 为成功,其他返回码请参考错误码定义。
    • 回调函数请参考 SDK 实现。
  • theTarget

    • 参数值为实现了 callbackSelector 的实例对象。
    • nil 此次调用不需要 Callback。
  1. - (void)tagsAliasCallback:(int)iResCode tags:(NSSet*)tags alias:(NSString*)alias {
  2. NSLog(@"rescode: %d, \ntags: %@, \nalias: %@\n", iResCode, tags , alias);}

Method - setAlias

调用此 API 来设置别名,支持回调函数。

该方法是 setTagsWithAlias (with Callback) 的简化版本,用于只变更别名的情况。

支持的版本

开始支持的版本:1.4.0

接口定义

  1. + (void)setAlias:(NSString *)alias callbackSelector:(SEL)cbSelector object:(id)theTarget;

参数说明

  • alias
    • 空字符串(@””)表示取消之前的设置。
    • 每次调用设置有效的别名,覆盖之前的设置。
    • 有效的别名组成:字母(区分大小写)、数字、下划线、汉字、特殊字符(2.1.9 支持)@!#$&*+=.|。
    • 限制:alias 命名长度限制为 40 字节。(判断长度需采用 UTF-8 编码)
  • callbackSelector
    • nil 此次调用不需要 Callback。
    • 用于回调返回对应的参数 alias, tags。并返回对应的状态码:0 为成功,其他返回码请参考错误码定义。
    • 回调函数请参考 SDK 实现。
  • theTarget
  1. * 参数值为实现了 callbackSelector 的实例对象。
  2. * nil 此次调用不需要 Callback
  1. - (void)tagsAliasCallback:(int)iResCode tags:(NSSet*)tags alias:(NSString*)alias {
  2. NSLog(@"rescode: %d, \ntags: %@, \nalias: %@\n", iResCode, tags , alias) }

Method - filterValidTags

用于过滤出正确可用的 tags。

如果总数量超出最大限制则返回最大数量的靠前的可用 tags。

使用建议

设置 tags 时,如果其中一个 tag 无效,则整个设置过程失败。

如果 App 的 tags 会在运行过程中动态设置,并且存在对 JPush SDK tag 规定的无效字符,则有可能一个 tag 无效导致这次调用里所有的 tags 更新失败。

这时你可以调用本方法 filterValidTags 来过滤掉无效的 tags,得到有效的 tags,再调用 JPush SDK 的 set tags / alias 方法。

支持的版本

开始支持的版本:1.4.0

接口定义

  1. + (NSSet*)filterValidTags:(NSSet*)tags;

参数说明

  • tags
    • 原 tag 集合。

接口返回

有效的 tag 集合。

返回错误码参考: 错误码定义

获取 APNs(通知) 推送内容

支持的版本

最初的版本。

功能说明

iOS 设备收到一条推送(APNs),用户点击推送通知打开应用时,应用程序根据状态不同进行处理需在 AppDelegate 中的以下两个方法中添加代码以获取 apn 内容

  • 如果 App 状态为未运行,此函数将被调用,如果 launchOptions 包含 UIApplicationLaunchOptionsRemoteNotificationKey 表示用户点击 apn 通知导致 app 被启动运行;如果不含有对应键值则表示 App 不是因点击 apn 而被启动,可能为直接点击 icon 被启动或其他。
  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
  2. // apn 内容获取:
  3. NSDictionary *remoteNotification = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey]
  • 基于 iOS 6 及以下的系统版本,如果 App 状态为正在前台或者点击通知栏的通知消息,那么此函数将被调用,并且可通过 AppDelegate 的 applicationState 是否为 UIApplicationStateActive 判断程序是否在前台运行。此种情况在此函数中处理:
  1. - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo;
  • 基于 iOS 7 及以上的系统版本,如果是使用 iOS 7 的 Remote Notification 特性那么处理函数需要使用
  1. - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler;
  • 基于 iOS 10 及以上的系统版本,原 [application: didReceiveRemoteNotification:] 将会被系统废弃,
    由新增 UserNotifications Framework中的[UNUserNotificationCenterDelegate willPresentNotification:withCompletionHandler:]
    或者 [UNUserNotificationCenterDelegate didReceiveNotificationResponse:withCompletionHandler:] 方法替代。
    在 2.1.9 版本及以上可实现 SDK 封装的 JPUSHRegisterDelegate 协议方法,适配 iOS10 新增的 delegate 协议方法。
    即以下两个方法:
  1. - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler;
  2. // NSDictionary * userInfo = notification.request.content.userInfo;
  3. // APNs 内容为 userInfo
  4. - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler;
  5. // NSDictionary * userInfo = response.notification.request.content.userInfo;
  6. // APNs 内容为 userInfo

示例代码

  1. // NS_DEPRECATED_IOS(3_0, 10_0, "Use UserNotifications Framework's -[UNUserNotificationCenterDelegate willPresentNotification:withCompletionHandler:] or -[UNUserNotificationCenterDelegate didReceiveNotificationResponse:withCompletionHandler:] for user visible notifications and -[UIApplicationDelegate application:didReceiveRemoteNotification:fetchCompletionHandler:] for silent remote notifications")
  2. - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
  3. // 取得 APNs 标准信息内容
  4. NSDictionary *aps = [userInfo valueForKey:@"aps"];
  5. NSString *content = [aps valueForKey:@"alert"]; //推送显示的内容
  6. NSInteger badge = [[aps valueForKey:@"badge"] integerValue]; //badge 数量
  7. NSString *sound = [aps valueForKey:@"sound"]; //播放的声音
  8. // 取得 Extras 字段内容
  9. NSString *customizeField1 = [userInfo valueForKey:@"customizeExtras"]; //服务端中 Extras 字段,key 是自己定义的
  10. NSLog(@"content =[%@], badge=[%d], sound=[%@], customize field =[%@]",content,badge,sound,customizeField1);
  11. // iOS 10 以下 Required
  12. [JPUSHService handleRemoteNotification:userInfo];
  13. }
  14. //iOS 7 Remote Notification
  15. - (void)application:(UIApplication *)application didReceiveRemoteNotification: (NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
  16. NSLog(@"this is iOS7 Remote Notification");
  17. // iOS 10 以下 Required
  18. [JPUSHService handleRemoteNotification:userInfo];
  19. completionHandler(UIBackgroundFetchResultNewData);
  20. }
  21. #pragma mark- JPUSHRegisterDelegate // 2.1.9 版新增JPUSHRegisterDelegate,需实现以下两个方法
  22. // iOS 10 Support
  23. - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {
  24. // Required
  25. NSDictionary * userInfo = notification.request.content.userInfo;
  26. if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
  27. [JPUSHService handleRemoteNotification:userInfo];
  28. }
  29. else {
  30. // 本地通知
  31. }
  32. completionHandler(UNNotificationPresentationOptionAlert); // 需要执行这个方法,选择是否提醒用户,有 Badge、Sound、Alert 三种类型可以选择设置
  33. }
  34. // iOS 10 Support
  35. - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler: (void (^)())completionHandler {
  36. // Required
  37. NSDictionary * userInfo = response.notification.request.content.userInfo;
  38. if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
  39. [JPUSHService handleRemoteNotification:userInfo];
  40. }
  41. else {
  42. // 本地通知
  43. }
  44. completionHandler(); // 系统要求执行这个方法
  45. }
  • 基于iOS12以上的版本,UserNotifications Framework新增回调方法[userNotificationCenter:openSettingsForNotification:],在3.1.1及以上版本JPUSHRegisterDelegate同样新增了对应的回调方法。当从应用外部通知界面或通知设置界面进入应用时,该方法将回调。
  1. // iOS 12 Support
  2. - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center openSettingsForNotification:(UNNotification *)notification{
  3. if (notification) {
  4. //从通知界面直接进入应用
  5. }else{
  6. //从通知设置界面进入应用
  7. }
  8. }

参考文档:Handling Local and Remote Notifications

获取自定义消息推送内容

支持的版本

r1.2.5 以后。

功能说明

只有在前端运行的时候才能收到自定义消息的推送。

从 JPush 服务器获取用户推送的自定义消息内容和标题以及附加字段等。

实现方法

获取 iOS 的推送内容需要在 delegate 类中注册通知并实现回调方法。

在方法- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *) launchOptions 加入下面的代码:

  1. NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
  2. [defaultCenter addObserver:self selector:@selector(networkDidReceiveMessage:) name:kJPFNetworkDidReceiveMessageNotification object:nil];

实现回调方法 networkDidReceiveMessage

  1. - (void)networkDidReceiveMessage:(NSNotification *)notification {
  2. NSDictionary * userInfo = [notification userInfo];
  3. NSString *content = [userInfo valueForKey:@"content"];
  4. NSString *messageID = [userInfo valueForKey:@"_j_msgid"];
  5. NSDictionary *extras = [userInfo valueForKey:@"extras"];
  6. NSString *customizeField1 = [extras valueForKey:@"customizeField1"]; //服务端传递的 Extras 附加字段,key 是自己定义的
  7. }

参数描述:

content:获取推送的内容

messageID:获取推送的 messageID(key 为 @”_j_msgid”)

extras:获取用户自定义参数

customizeField1:根据自定义 key 获取自定义的 value

更多实现参考 SDK 下载压缩包中的 demo。

获取 RegistrationID

RegistrationID 定义

集成了 JPush SDK 的应用程序在第一次成功注册到 JPush 服务器时,JPush 服务器会给客户端返回一个唯一的该设备的标识 - RegistrationID。JPush SDK 会以广播的形式发送 RegistrationID 到应用程序。

应用程序可以把此 RegistrationID 保存以自己的应用服务器上,然后就可以根据 RegistrationID 来向设备推送消息或者通知。

API - registrationIDCompletionHandler:(with block)

支持的版本

开始支持的版本:2.1.9。

接口定义

  1. + (void)registrationIDCompletionHandler:(void(^)(int resCode,NSString *registrationID))completionHandler;

参数说明

  • (void(^)(int resCode,NSString *registrationID))completionHandler
    • completionHandler 用于处理设置返回结果
    • resCode 返回的结果状态码
    • registrationID 返回 registrationID
  1. [JPUSHService registrationIDCompletionHandler:^(int resCode, NSString *registrationID) {
  2. NSLog(@"resCode : %d,registrationID: %@",resCode,registrationID);
  3. }];

温馨提示:

建议使用此接口获取 registrationID,模拟器中调用此接口 resCode 返回 1011,registrationID 返回 nil。

API - registrationID

调用此 API 来取得应用程序对应的 RegistrationID。 只有当应用程序成功注册到 JPush 的服务器时才返回对应的值,否则返回空字符串。

支持的版本

开始支持的版本:1.7.0。

接口定义

+(NSString *)registrationID

温馨提示:

iOS 9 系统,应用卸载重装,APNs 返回的 devicetoken 会发生变化,开发者需要获取设备最新的 Registration id。请在 kJPFNetworkDidLoginNotification 的实现方法里面调用 “RegistrationID” 这个接口来获取 RegistrationID。

附加说明

通过 RegistrationID 推送消息和通知

可以通过 RegistrationID 来推送消息和通知, 参考文档 Push API v3, 当 audience 参数为 RegistrationID 时候即可根据 RegistrationID 推送。

注:要使用此功能,客户端 App 一定要集成有 r1.7.0 及以上版本的 JPush iOS SDK

设置 Badge

支持的版本

v1.7.4 及后续版本

功能说明

badge 是 iOS 用来标记应用程序状态的一个数字,出现在程序图标右上角。 JPush 封装 badge 功能,允许应用上传 badge 值至 JPush 服务器,由 JPush 后台帮助管理每个用户所对应的推送 badge 值,简化了设置推送 badge 的操作。

实际应用中,开发者可以直接对 badge 值做增减操作,无需自己维护用户与 badge 值之间的对应关系。 推送消息时,只需设置角标 +1,极光会在服务器中存储的每个用户的 badge 值上自动 +1 后下发给用户。

API setBadge

设置 JPush 服务器中存储的 badge 值

接口定义

  1. + (BOOL)setBadge:(int)value

参数说明

  • value 取值范围:[0,99999]

本地仍须调用 UIApplication:setApplicationIconBadgeNumber 函数设置图标上显示的 badge 值


  • 返回值
    • 在 value 的取值区间内返回 TRUE,否则返回 FALSE

API resetBadge

清空 JPush 服务器中存储的 badge 值,即 [setBadge:0]

接口定义

  1. + (void)resetBadge

本地通知

支持的版本

v1.8.0 及后续版本,v2.1.9 版本有更新

功能说明

iOS 设备收到一条本地通知,用户点击通知打开应用时,应用程序根据状态不同进行处理需在 AppDelegate 中的以下两个方法中添加代码以获取本地通知内容

  • 如果 App 状态为未运行,此函数将被调用,如果 launchOptions 包含 UIApplicationLaunchOptionsLocalNotificationKey 表示用户点击本地通知导致 app 被启动运行;如果不含有对应键值则表示 App 不是因点击本地通知而被启动,可能为直接点击 icon 被启动或其他。
  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
  2. // 本地通知内容获取:NSDictionary *localNotification = [launchOptions objectForKey: UIApplicationLaunchOptionsLocalNotificationKey]
  • 如果 App 状态为正在前台或者后台运行,那么此函数将被调用,并且可通过 AppDelegate的applicationState 是否为 UIApplicationStateActive 判断程序是否在前台运行。此种情况在此函数中处理:
  1. // NS_DEPRECATED_IOS(4_0, 10_0, "Use UserNotifications Framework's -[UNUserNotificationCenterDelegate willPresentNotification:withCompletionHandler:] or -[UNUserNotificationCenterDelegate didReceiveNotificationResponse:withCompletionHandler:]")
  2. - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification;
  3. // 本地通知为 notification
  • 在 iOS 10 以上上述方法将被系统废弃,由新增 UserNotifications Framework 中的 -[UNUserNotificationCenterDelegate willPresentNotification:withCompletionHandler:] 或者 -[UNUserNotificationCenterDelegate didReceiveNotificationResponse:withCompletionHandler:] 方法替代。为此,SDK 封装了 JPUSHRegisterDelegate 协议,只需实现相应的协议方法即可适配iOS10新增的delegate方法,与上述远程推送新回调方法一致,也即是如下方法:
  1. - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^) (NSInteger))completionHandler;
  2. // if (![notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
  3. // 本地通知为 notification
  4. // }
  5. - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler: (void (^)())completionHandler;
  6. // if (![response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
  7. // 本地通知为 response.notification
  8. // }

Method AddNotification

支持版本

v2.1.9 及后续版本

功能说明

API 用于注册或更新推送(支持 iOS 10,并兼容 iOS 10 以下版本)

接口定义

  1. + (void)addNotification:(JPushNotificationRequest *)request;

参数说明

  • request [JPushNotificationRequest] 实体类型,可传入推送的属性

调用说明

request 中传入已有推送的 request.requestIdentifier 即更新已有的推送,否则为注册新推送。

代码示例

  1. - (void)testAddNotification {
  2. JPushNotificationContent *content = [[JPushNotificationContent alloc] init];
  3. content.title = @"Test Notifications";
  4. content.subtitle = @"2016";
  5. content.body = @"This is a test code";
  6. content.badge = @1;
  7. content.categoryIdentifier = @"Custom Category Name";
  8. // 5s 后提醒 iOS 10 以上支持
  9. JPushNotificationTrigger *trigger1 = [[JPushNotificationTrigger alloc] init];
  10. trigger1.timeInterval = 5;
  11. //每小时重复 1 次 iOS 10 以上支持
  12. JPushNotificationTrigger *trigger2 = [[JPushNotificationTrigger alloc] init];
  13. trigger2.timeInterval = 3600;
  14. trigger2.repeat = YES;
  15. //每周一早上 8:00 提醒,iOS 10 以上支持
  16. NSDateComponents *components = [[NSDateComponents alloc] init];
  17. components.weekday = 2;
  18. components.hour = 8;
  19. JPushNotificationTrigger *trigger3 = [[JPushNotificationTrigger alloc] init];
  20. trigger3.dateComponents = components;
  21. trigger3.repeat = YES;
  22. //#import <CoreLocation/CoreLocation.h>
  23. //一到某地点提醒,iOS 8 以上支持
  24. CLLocationCoordinate2D cen = CLLocationCoordinate2DMake(37.335400, -122.009201);
  25. CLCircularRegion *region = [[CLCircularRegion alloc] initWithCenter:cen
  26. radius:2000.0
  27. identifier:@"jiguang"];
  28. JPushNotificationTrigger *trigger4 = [[JPushNotificationTrigger alloc] init];
  29. trigger4.region = region;
  30. //5s 后提醒,iOS 10 以下支持
  31. JPushNotificationTrigger *trigger5 = [[JPushNotificationTrigger alloc] init];
  32. trigger5.fireDate = [NSDate dateWithTimeIntervalSinceNow:5];
  33. JPushNotificationRequest *request = [[JPushNotificationRequest alloc] init];
  34. request.requestIdentifier = @"sampleRequest";
  35. request.content = content;
  36. request.trigger = trigger1;//trigger2;//trigger3;//trigger4;//trigger5;
  37. request.completionHandler = ^(id result) {
  38. NSLog(@"结果返回:%@", result);
  39. };
  40. [JPUSHService addNotification:request];
  41. }

Method RemoveNotification

支持版本

v2.1.9 及后续版本

功能说明

API 用于移除待推送或已在通知中心显示的推送(支持 iOS 10,并兼容 iOS 10 以下版本)

接口定义

  1. + (void)removeNotification:(JPushNotificationIdentifier *)identifier;

参数说明

  • identifier [JPushNotificationIdentifier]实体类型

调用说明

  • iOS 10 以上 identifier 设置为 nil,则移除所有在通知中心显示推送和待推送请求,也可以通过设置 identifier.delivered 和 identifier.identifiers 来移除相应在通知中心显示推送或待推送请求,identifier.identifiers 如果设置为 nil 或空数组则移除相应标志下所有在通知中心显示推送或待推送请求;iOS 10 以下 identifier 设置为 nil,则移除所有推送,identifier.delivered 属性无效,另外可以通过 identifier.notificationObj 传入特定推送对象来移除此推送。

代码示例

  1. - (void)testRemoveNotification {
  2. JPushNotificationIdentifier *identifier = [[JPushNotificationIdentifier alloc] init];
  3. identifier.identifiers = @[@"sampleRequest"];
  4. identifier.delivered = YES; //iOS 10 以上有效,等于 YES 则在通知中心显示的里面移除,等于 NO 则为在待推送的里面移除;iOS 10 以下无效
  5. [JPUSHService removeNotification:identifier];
  6. }
  7. - (void)testRemoveAllNotification {
  8. [JPUSHService removeNotification:nil]; // iOS 10 以下移除所有推送;iOS 10 以上移除所有在通知中心显示推送和待推送请求
  9. // //iOS 10 以上支持
  10. // JPushNotificationIdentifier *identifier = [[JPushNotificationIdentifier alloc] init];
  11. // identifier.identifiers = nil;
  12. // identifier.delivered = YES; //等于 YES 则移除所有在通知中心显示的,等于 NO 则为移除所有待推送的
  13. // [JPUSHService removeNotification:identifier];
  14. }

Method FindNotification

支持版本

v2.1.9 及后续版本

功能说明

API 用于查找推送(支持 iOS 10,并兼容 iOS 10 以下版本)

接口定义

  1. + (void)findNotification:(JPushNotificationIdentifier *)identifier;

参数说明

  • identifier [JPushNotificationIdentifier]实体类型

调用说明

  • iOS 10 以上可以通过设置 identifier.delivered和identifier.identifiers 来查找相应在通知中心显示推送或待推送请求,identifier.identifiers 如果设置为 nil 或空数组则返回相应标志下所有在通知中心显示推送或待推送请求;iOS 10 以下 identifier.delivered 属性无效,identifier.identifiers 如果设置 nil 或空数组则返回所有未触发的推送。
  • 须要设置 identifier.findCompletionHandler 回调才能得到查找结果,通过 (NSArray *results) 返回相应对象数组。

代码示例

  1. - (void)testFindNotification {
  2. JPushNotificationIdentifier *identifier = [[JPushNotificationIdentifier alloc] init];
  3. identifier.identifiers = @[@"sampleRequest"];
  4. identifier.delivered = YES; //iOS 10 以上有效,等于 YES 则在通知中心显示的里面查找,等于 NO 则在待推送的里面查找;iOS10 以下无效
  5. identifier.findCompletionHandler = ^(NSArray *results) {
  6. NSLog(@"返回结果为:%@", results); // iOS 10 以下返回 UILocalNotification 对象数组,iOS10 以上根据 delivered 传入值返回 UNNotification 或 UNNotificationRequest 对象数组
  7. };
  8. [JPUSHService findNotification:identifier];
  9. }
  10. - (void)testFindAllNotification {
  11. JPushNotificationIdentifier *identifier = [[JPushNotificationIdentifier alloc] init];
  12. identifier.identifiers = nil;
  13. identifier.delivered = YES; //iOS 10 以上有效,等于 YES 则查找所有在通知中心显示的,等于 NO 则为查找所有待推送的;iOS 10 以下无效
  14. identifier.findCompletionHandler = ^(NSArray *results) {
  15. NSLog(@"返回结果为:%@", results); // iOS 10 以下返回 UILocalNotification 对象数组,iOS 10 以上根据 delivered 传入值返回 UNNotification 或 UNNotificationRequest 对象数组
  16. };
  17. [JPUSHService findNotification:identifier];
  18. }

Method SetLocalNotification

功能说明

API 用于注册本地通知

v2.1.9 版后将会被废弃,由 AddNotification 方法取代,建议及早放弃使用。

接口定义

  1. + (UILocalNotification *)setLocalNotification:(NSDate *)fireDate
  2. alertBody:(NSString *)alertBody
  3. badge:(int)badge
  4. alertAction:(NSString *)alertAction
  5. identifierKey:(NSString *)notificationKey
  6. userInfo:(NSDictionary *)userInfo
  7. soundName:(NSString *)soundName;

iOS 8 新参数使用 API。非 iOS 8 版本或者不需要使用 iOS 8 新功能请使用上面的 API

  1. + (UILocalNotification *)setLocalNotification:(NSDate *)fireDate
  2. alertBody:(NSString *)alertBody
  3. badge:(int)badge
  4. alertAction:(NSString *)alertAction
  5. identifierKey:(NSString *)notificationKey
  6. userInfo:(NSDictionary *)userInfo
  7. soundName:(NSString *)soundName
  8. region:(CLRegion *)region
  9. regionTriggersOnce:(BOOL)regionTriggersOnce
  10. category:(NSString *)category

参数说明

  • fireDate 本地推送触发的时间
  • alertBody 本地推送需要显示的内容
  • badge 角标的数字。如果不需要改变角标传 -1
  • alertAction 弹框的按钮显示的内容(iOS 8 默认为”打开”,其他默认为”启动”)
  • notificationKey 本地推送标示符
  • userInfo 自定义参数,可以用来标识推送和增加附加信息
  • soundName 本地通知声音名称设置,空为默认声音
  • region
  • regionTriggersOnce
  • category

调用说明

fireDate 必须大于当前时间,同时不能为空。注册通知数目必须小于 64 个。

代码示例

  1. [JPUSHService setLocalNotification:[NSDate dateWithTimeIntervalSinceNow:100]
  2. alertBody:@"alert content"
  3. badge:1
  4. alertAction:@"buttonText"
  5. identifierKey:@"identifierKey"
  6. userInfo:nil
  7. soundName:nil];

Method showLocalNotificationAtFront

功能说明

API 用来在 APP 前台运行时,仍然将通知显示出来。(样式为 UIAlertView)

iOS 10 以下还可继续使用,iOS 10 以上在 [JPUSHRegisterDelegate jpushNotificationCenter:willPresentNotification:withCompletionHandler:] 方法中调用 completionHandler(UNNotificationPresentationOptionSound | UNNotificationPresentationOptionAlert);即可,故 v2.1.9 版后将会被废弃,建议及早放弃使用。

接口定义

  1. + (void)showLocalNotificationAtFront:(UILocalNotification *)notification
  2. identifierKey:(NSString *)notificationKey;

参数说明

  • notification 当前触发的 UILocalNotification
  • notificationKey 过滤不需要前台显示的通知。只有 notificationKey 标示符的通知才会在前台显示。如果需要全部都显示,该参数传 nil。

调用说明

API必须放在 - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification(AppDelegate.m) 苹果的回调函数下。

代码示例

  1. - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { [JPUSHService showLocalNotificationAtFront:notification identifierKey:@"identifierKey"]; }

Delegate Method findLocalNotificationWithIdentifier

功能说明

API 用于获取自定义的 identifierKey 标示符的 UILocationNotification 对象

v2.1.9 版后将会被废弃,由 FindNotification 方法取代,建议及早放弃使用。

接口定义

  1. + (NSArray *)findLocalNotificationWithIdentifier:(NSString *)notificationKey;

参数说明

  • notificationKey 获取通知对象的标示符

调用说明

API 返回数组,包含所有和 identifierKey 匹配的 LocalNotification 对象,如果没找到,则为一个空的数组对象。

代码示例

  1. NSArray *LocalNotifications = [JPUSHService findLocalNotificationWithIdentifier:@"identifierKey"];

Delegate Method deleteLocalNotification

功能说明

API 用于删除指定的 LocalNotification 对象

v2.1.9 版后将会被废弃,由 RemoveNotification 方法取代,建议及早放弃使用。

接口定义

  1. + (void)deleteLocalNotification:(UILocalNotification *)localNotification;

参数说明

  • localNotification 删除的本地通知对象

调用说明

API 参数 localNotification 不能为 nil.

代码示例

  1. [JPUSHService deleteLocalNotification:localNotification];

Delegate Method deleteLocalNotificationWithIdentifierKey

功能说明

API 用于删除指定所有 identifierKey 标示符的通知对象

v2.1.9 版后将会被废弃,由 RemoveNotification 方法取代,建议及早放弃使用。

接口定义

  1. + (void)deleteLocalNotificationWithIdentifierKey:(NSString *)notificationKey;

参数说明

  • notificationKey 删除的通知拥有的标示符

调用说明

API 参数 notificationKey 不能为 nil.

代码示例

  1. [JPUSHService deleteLocalNotificationWithIdentifierKey:@"identifierKey"];

Delegate Method clearAllLocalNotification

功能说明

API 用于清除所有注册的通知

v2.1.9 版后将会被废弃,由 RemoveNotification 方法取代,建议及早放弃使用。

接口定义

  1. + (void)clearAllLocalNotifications;

代码示例

  1. [JPUSHService clearAllLocalNotifications];

日志等级设置

支持版本

v1.8.0 版本开始

Method - setDebugMode

功能说明

API 用于开启 Debug 模式,显示更多的日志信息

接口定义

  1. + (void)setDebugMode;

调用说明

当需要了解更多的调试信息时候,调用 API 开启 Debug 模式

代码示例

  1. [JPUSHService setDebugMode];

Method setLogOFF

功能说明

API 用来关闭日志信息(除了必要的错误信息)

接口定义

  1. + (void)setLogOFF;

调用说明

不需要任何调试信息的时候,调用此 API (发布时建议调用此 API,用来屏蔽日志信息,节省性能消耗)

代码示例

  1. [JPUSHService setLogOFF];

页面的统计

支持的版本

r1.7.0 版本开始。

JPush 上该系列 api 的功能已废弃,如需页面流相关的统计请使用极光统计产品 JAnalytics

功能说明

本 API 用于“用户指定页面使用时长”的统计,并上报到服务器,在 Portal 上展示给开发者。页面统计集成正确,才能够获取正确的页面访问路径、访问深度(PV)的数据。

API

接口定义

  1. + (void)startLogPageView:(NSString*)pageName;
  2. + (void)stopLogPageView:(NSString*)pageName;
  3. + (void)beginLogPageView:(NSString*)pageName duration:(int)seconds;

参数说明

  • pageName 需要统计页面自定义名称
  • duration 自定义的页面时间

调用说明

应在所有的需要统计得页面得 viewWillAppear 和 viewWillDisappear 加入 startLogPageView 和 stopLogPageView 来统计当前页面的停留时间。

或者直接使用 beginLogPageView 来自定义加入页面和时间信息。

代码示例

  1. - (void)viewWillAppear:(BOOL)animated
  2. {
  3. [super viewWillAppear:animated];
  4. [JPUSHService startLogPageView:@"PageOne"];
  5. }
  6. - (void)viewWillDisappear:(BOOL)animated
  7. {
  8. [super viewWillDisappear:animated];
  9. [JPUSHService stopLogPageView:@"PageOne"];
  10. }
  11. -(void)trackView
  12. {
  13. [JPUSHService beginLogPageView:@"PageTwo" duration:10];
  14. }

地理位置统计

支持版本

v1.8.0 版本开始

温馨提示: iOS 11 上要弹出获取地理位置的弹框,建议在 info.plist 配置以下 3 个 key。

NSLocationAlwaysAndWhenInUseUsageDescription

NSLocationAlwaysUsageDescription

NSLocationWhenInUseUsageDescription

Method SetLatitude: longitude

功能说明

API 用于统计用户地理信息。

接口定义

  1. + (void)setLatitude:(double)latitude longitude:(double)longitude;

参数说明

  • latitude 地理位置纬度
  • longitude 地理位置经度

调用说明

需要加入 CoreLocation.framework 库, 并且引入 头文件(#import

经度和纬度需要开发者自己调用苹果的地理位置信息 API 获取。

代码示例

  1. [JPUSHService setLatitude:100.0 longitude:100.0];

Method setLocation

功能说明

API 用来统计地理位置信息

接口定义

  1. + (void)setLocation:(CLLocation *)location;

参数说明

  • location 当前地理位置的 CLLocation 对象

调用说明

需要加入 CoreLocation.framework 库, 并且引入 头文件(#import

CLLocation 对象需要开发者自己调用苹果的地理位置信息 API 获取。

代码示例

  1. Build Phases Link Binary With Libraries 添加 CoreLocation.framework
  2. 应用的 plist 增加 NSLocationAlwaysUsageDescription NSLocationWhenInUseUsageDescription 字段,内容为是否允许 alert 的内容
  3. #import <CoreLocation/CoreLocation.h>
  4. @interface xxx : UIViewController<CLLocationManagerDelegate>
  5. @property(nonatomic, strong) CLLocationManager *currentLoaction;
  6. - (void)viewDidLoad {
  7. //注册 LocationManager
  8. _currentLoaction = [[CLLocationManager alloc] init];
  9. _currentLoaction.delegate = self;
  10. #ifdef __IPHONE_8_0
  11. if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
  12. [_currentLoaction requestAlwaysAuthorization];
  13. }
  14. #endif
  15. if ([CLLocationManager locationServicesEnabled]) {
  16. NSLog(@"您的设备的[设置]-[隐私]-[定位]已开启");
  17. [_currentLoaction startUpdatingLocation];
  18. }
  19. else{
  20. NSLog(@"您的设备的[设置]-[隐私]-[定位]尚未开启");
  21. }
  22. }
  23. #ifdef __IPHONE_6_0
  24. - (void)locationManager:(CLLocationManager *)manager
  25. didUpdateLocations:(NSArray *)locations {
  26. if ([[UIDevice currentDevice].systemVersion floatValue] >= 6.0) {
  27. CLLocation *newLocation = [locations lastObject];
  28. float longtitude = newLocation.coordinate.longitude;
  29. float latitude = newLocation.coordinate.latitude;
  30. [JPUSHService setLocation:newLocation];
  31. //[JPUSHService setLatitude:latitude longitude:longtitude];
  32. [manager stopUpdatingLocation];
  33. }
  34. }
  35. #endif
  36. - (void)locationManager:(CLLocationManager *)manager
  37. didUpdateToLocation:(CLLocation *)newLocation
  38. fromLocation:(CLLocation *)oldLocation {
  39. if ([[UIDevice currentDevice].systemVersion floatValue] < 6.0) {
  40. float longtitude = newLocation.coordinate.longitude;
  41. float latitude = newLocation.coordinate.latitude;
  42. [JPUSHService setLocation:newLocation];
  43. //[JPUSHService setLatitude:latitude longitude:longtitude];
  44. [manager stopUpdatingLocation];
  45. }
  46. }
  47. - (void)locationManager:(CLLocationManager *)manager
  48. didFailWithError:(NSError *)error{
  49. //获取地理位置错误处理
  50. }

崩溃日志统计

支持版本

v1.8.0 版本开始

Method crashLogON

功能说明

API 用于统计用户应用崩溃日志

接口定义

  1. + (void)crashLogON;

调用说明

如果需要统计 Log 信息,调用该接口。当你需要自己收集错误信息时,切记不要调用该接口。

代码示例

  1. [JPUSHService crashLogON];

设置手机号码

支持的版本

v3.0.8 版本开始

功能说明

用于短信补充功能。设置手机号码后,可实现“推送不到短信到”的通知方式,提高推送达到率。

接口定义

  1. + (void)setMobileNumber:(NSString *)mobileNumber completion:(void (^)(NSError *error))completion

参数说明

  • mobileNumber 手机号码。只能以 “+” 或者数字开头,后面的内容只能包含 “-” 和数字,并且长度不能超过 20。如果传 nil 或空串则为解除号码绑定操作
  • completion 响应回调。成功则 error 为空,失败则 error 带有错误码及错误信息,具体错误码详见错误码定义

调用说明

此接口调用频率有限制,10s 之内最多 3 次。建议在登录成功以后,再调用此接口。结果信息通过 completion 异步返回,也可将completion 设置为 nil 不处理结果信息。

代码示例

  1. [JPUSHService setMobileNumber:@"xxx" completion:^(NSError *error) {
  2. if (error) {
  3. NSLog(@"error:%@", error);
  4. }
  5. else {
  6. // success
  7. }
  8. }];

地理围栏

功能说明

温馨提示,使用地理围栏时注意先要配置位置权限,然后在BackgroundModes中选中Location updates。 iOS 11 以上版本必须有地理位置Always Use 权限,才能生效。


地理围栏(Geo-fencing)是LBS的一种新应用,就是用一个虚拟的栅栏围出一个虚拟地理边界。当手机进入或离开某个特定地理区域时,手机可以接收自动通知和警告。

Method - registerLbsGeofenceDelegate: withLaunchOptions:

调用此 API 注入地理围栏触发时的回调方法

支持的版本

开始支持的版本:3.1.2

接口定义

  1. + (void)registerLbsGeofenceDelegate:(id<JPUSHGeofenceDelegate>)delegate withLaunchOptions:(NSDictionary *)launchOptions;

参数说明

  • delegate
    • 代理 JPUSHGeofenceDelegate 类型
    • 有三个代理方法回调给开发者,具体使用参考下面的接口说明
  • launchOptions
    • NSDictionary 类型application:didFinishlaunchOptions: 中传入的字典。

调用说明

在AppDelegate中application:didFinishlaunchOptions: 调用

  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
  2. {
  3. [JPUSHService registerLbsGeofenceDelegate:self withLaunchOptions:launchOptions];
  4. }

Method - removeGeofenceWithIdentifier:

调用此 API 删除地理围栏

支持的版本

开始支持的版本:3.2.1

接口定义

  1. + (void)removeGeofenceWithIdentifier:(NSString *)geofenceId;

参数说明

  • geofenceId
    • 字符串类型,地理围栏id,创建地理围栏时会产生地理围栏id。

调用说明

  1. [JPUSHService removeGeofenceWithIdentifier:@"geofenceId"];

Delegate Method - jpushGeofenceIdentifer:didEnterRegion: error:

用户进入地理围栏区域触发的回调。

支持的版本

开始支持的版本:3.1.2

接口定义

  1. - (void)jpushGeofenceIdentifer:(NSString * _Nonnull)geofenceId didEnterRegion:(NSDictionary * _Nullable)userInfo error:(NSError * _Nullable)error;

参数说明

  • geofenceId
    • 地理围栏唯一id
    • NSString 字符串类型
  • userInfo
    • NSDictionary 类型。
    • 触发地理围栏时回调的相关展示信息
  • error
    • 错误信息

Delegate Method - jpushGeofenceIdentifer:didExitRegion: error:

用户离开地理围栏区域触发的回调。

支持的版本

开始支持的版本:3.1.2

接口定义

  1. - (void)jpushGeofenceIdentifer:(NSString * _Nonnull)geofenceId didExitRegion:(NSDictionary * _Nullable)userInfo error:(NSError * _Nullable)error;

参数说明

  • geofenceId
    • 地理围栏唯一id
    • NSString 字符串类型
  • userInfo
    • NSDictionary 类型。
    • 触发地理围栏时回调的相关展示信息
  • error
    • 错误信息

Method - setGeofenecMaxCount:

调用此 API 来设置最大的地理围栏监听个数,默认值为10

支持的版本

开始支持的版本:3.1.2

接口定义

  1. + (void)setGeofenecMaxCount:(NSInteger)count;

参数说明

  • count
    • 类型要求为NSInteger 类型
    • 默认值为10
    • iOS系统要求最大不能超过20个,否则会报错。

Notification Service Extension 相关接口

支持的版本

Notification Service Extension SDK v1.0.0(随 JPush iOS SDK 3.0.7 版本发布)及以后的版本

功能说明

使用 Notification Service Extension SDK 上报推送送达情况

jpushSetAppkey:

设置 appkey 接口,必须提前调用

接口定义

  1. + (void)jpushSetAppkey:(NSString *)appkey

参数说明

  • appkey 需要和 main app 中的 JPush SDK 的 appkey 保持一致

jpushReceiveNotificationRequest:with:

消息送达统计接口,调用该接口上报 APNs 消息体中的 JPush 相关数据

接口定义

  1. + (void)jpushReceiveNotificationRequest:(UNNotificationRequest *)request with:(void (^)(void))completion

参数说明

  • request UNNotificationRequest
  • completion 消息送达上报回调,请在该回调中执行显示 APNs 等操作

setLogOff

关闭日志
默认为开启,建议发布时关闭以减少不必要的 IO

接口定义

  1. + (void)setLogOff

客户端错误码定义

Code 描述 详细解释
1005 AppKey 不存在 请到官网检查 Appkey 对应的应用是否已被删除
1008 AppKey 非法 请到官网检查此应用详情中的 Appkey,确认无误
1009 当前的 Appkey 下没有创建 iOS 应用;你所使用的 SDK 版本低于 2.1.0 请到官网检查此应用的应用详情;更新应用中集成的极光 SDK 至最新。
6001 无效的设置,tag/alias 不应参数都为 null
6002 设置超时 建议重试,一般出现在网络不佳、初始化尚未完成时
6003 alias 字符串不合法 有效的别名、标签组成:字母(区分大小写)、数字、下划线、汉字、特殊字符(2.1.9 支持)@!#$&+=.|
6004 alias 超长。最多 40 个字节 中文 UTF-8 是 3 个字节
6005 某一个 tag 字符串不合法 有效的别名、标签组成:字母(区分大小写)、数字、下划线、汉字、特殊字符(2.1.9 支持)@!#$&+=.|
6006 某一个 tag 超长。一个 tag 最多 40 个字节 中文 UTF-8 是 3 个字节
6007 tags 数量超出限制。最多 1000 个 这是一台设备的限制。一个应用全局的标签数量无限制。
6008 tag 超出总长度限制 总长度最多 7 K 字节
6009 未知错误 SDK 发生了意料之外的异常,客户端日志中将有详细的报错信息,可据此排查。
6011 短时间内操作过于频繁 10s 内设置 tag 或 alias 大于 10 次,或 10s 内设置手机号码大于 3 次
6012 在 JPush 服务 stop 状态下设置了 tag 或 alias 或手机号码 开发者可根据这个错误码的信息做相关处理或者提示
6013 用户设备时间轴异常 设备本地时间轴异常变化影响了设置手机号码
6014 网络繁忙 网络繁忙,本次请求失败,请重新发起请求
6015 黑名单 用户被拉入黑名单,请联系 support 解除
6016 该用户无效 失效用户请求失败
6017 该请求无效 本次请求出现异常参数,请求无效
6018 Tags 过多 该用户 tags 已设置超过 1000 个,不能再设置
6019 获取 Tags 失败 在获取全部 tags 时发生异常
6020 请求失败 发生了特殊问题导致请求失败
6021 上一次的 tags 请求还在等待响应,暂时不能执行下一次请求 多次调用 tag 相关的 API,请在获取到上一次调用回调后再做下一次操作;在未取到回调的情况下,等待 20 秒后可做下一次操作。
6022 上一次的 alias 请求还在等待响应,暂时不能执行下一次请求。 多次调用 alias 相关的 API,请在获取到上一次调用回调后再做下一次操作;在未取到回调的情况下,等待 20 秒后可做下一次操作。
6023 手机号码不合法 只能以 “+” 或者数字开头,后面的内容只能包含 “-” 和数字
6024 服务器内部错误 服务器内部错误,过一段时间再重试
6025 手机号码太长 手机号码过长,目前极光检测手机号码的最大长度为 20
7000 地理围栏过期 当前时间超过设置的过期时间
7001 地理围栏不存在 逻辑是触发地理围栏的时候,本地缓存列表没有查找到对应的geofenceid