一.设置标签alias(userId 单个推送)和别名tags(行业分类 多个推送)
覆盖逻辑 而不是新增逻辑 block回调
+ (void) setTags:(NSSet *)tags
alias:(NSString *)alias
fetchCompletionHandle:(void (^)(int iResCode, NSSet *iTags, NSString *iAlias))completionHandler;
三. 应用程序进入前台各种情况的判断
1.应用程序关闭
NSDictionary* remoteNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (remoteNotification ==nil) {
//1.点击icon进入应用
}else{
//2.点击消息进入应用
int badge =[remoteNotification[@"aps"][@"badge"] intValue];
badge--;
[APService setBadge:badge];
[UIApplication sharedApplication].applicationIconBadgeNumber =badge;
self.pushType = [remoteNotification objectForKey:@"msg_type"];
badge--;
[APService setBadge:badge];
[UIApplication sharedApplication].applicationIconBadgeNumber =badge;
self.pushType = [remoteNotification objectForKey:@"msg_type"];
self.pushID = [remoteNotification objectForKey:@"msg_id"];
//根据推送消息的 类型 和 参数 推不同的控制器
if ([self.pushType isEqualToString:@"news"]) {
}else if([self.pushType isEqualToString:@"rsp-sl"]){
}else if([self.pushType isEqualToString:@"rsp-sl-1"]){
}
}
2.应用程序在活跃状态
//收到通知
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^) (UIBackgroundFetchResult))completionHandler {
[JPUSHService handleRemoteNotification:userInfo];
completionHandler(UIBackgroundFetchResultNewData);
// 取得 APNs 标准信息内容
//NSDictionary *aps = [userInfo valueForKey:@"aps"];
//NSString *content = [aps valueForKey:@"alert"]; //推送显示的内容
//NSInteger badge = [[aps valueForKey:@"badge"] integerValue]; //badge数量
//NSString *sound = [aps valueForKey:@"sound"]; //播放的声音
//取得Extras字段内容
//NSString *customizeField1 = [userInfo valueForKey:@"customizeExtras"]; //服务端中Extras字段,key是自己定义的
//NSLog(@"content =[%@], badge=[%lu], sound=[%@], customize field =[%@]",content,badge,sound,customizeField1);
int badge =[userInfo[@"aps"][@"badge"] intValue];
badge--;
[APService setBadge:badge];
[UIApplication sharedApplication].applicationIconBadgeNumber =badge;
self.pushType = [userInfo objectForKey:@"msg_type"];
self.pushID = [userInfo objectForKey:@"msg_id"];
//iOS的应用程序分为3种状态,1是前台运行的状态UIApplicationStateActive;
2是后台运行的状态UIApplicationStateInactive;
3是app关闭状态UIApplicationStateBackground
现在只有第三种状态app关闭的情况下会自动统计角标数目;其它两种情况下都需要手动操作来实现角标的统计,这块的实现机制就是这样的。
//1.应用程序处在前台
if (application.applicationState == UIApplicationStateActive) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"收到推送消息"
message:userInfo[@"aps"][@"alert"]
delegate:self
cancelButtonTitle:@"取消"
otherButtonTitles:@"确定", nil,nil];
alert.tag=4020;
//点确定跳到相应的界面。
[alert show];
}2.应用程序在后台
else if(application.applicationState ==UIApplicationStateInactive){
//根据推送消息的 类型 和 参数 推不同的控制器
if ([self.pushType isEqualToString:@"news"]) {
}else if([self.pushType isEqualToString:@"rsp-sl"]){
}else if([self.pushType isEqualToString:@"rsp-sl-1"]){
}
}
}
四.RegistrationID 设备ID
集成了 JPush SDK 的应用程序在第一次成功注册到 JPush 服务器时,JPush 服务器会给客户端返回一个唯一的该设备的标识 - RegistrationID
应用程序可以把此 RegistrationID 保存以自己的应用服务器上,然后就可以根据 RegistrationID 来向设备推送消息或者通知。
iOS 9系统,应用卸载重装,APNs返回的devicetoken会发生变化,开发者需要获取设备最新的Registration id。请在kJPFNetworkDidLoginNotification的实现方法里面调用"RegistrationID"这个接口来获取 RegistrationID。
五.设置JPush服务器中存储的badge值
+ (BOOL)setBadge:(int)value
设置badge值,本地仍须调用UIApplication:setApplicationIconBadgeNumber函数