一.設置標簽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函數