好久沒有接觸推送了,最近的項(xiàng)目使用的是極光推送氢哮,在這里重新溫習(xí)記錄
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
[JPUSHService resetBadge];
<b>配置注意事項(xiàng)</b>
配置極光推送app的信息,按照文檔去配置項(xiàng)目,一定要好好查看iOS SDK API
注意獲取推送信息的的調(diào)用方法在iOS 10型檀,iOS 7,iOS6是不一樣的
APNS和自定義消息不同裂七!自定義消息內(nèi)容在推送應(yīng)用內(nèi)消息通道(非APNS)獲取
iOS7~iOS9的版本(iOS6及之前的不考慮)
前臺(tái)(APNS+自定義消息)仓坞、在后臺(tái)
會(huì)接收到自定義消息,但不顯示
首先接受到自定義消息時(shí)響應(yīng)的通知:
kJPFNetworkDidReceiveMessageNotification
然后接受到推送消息時(shí)響應(yīng)方法:
[AppDelegate application:didReceiveRemoteNotification: fetchCompletionHandler:]
APP未打開都一樣 (APNS+自定義消息)
會(huì)顯示推送消息徙瓶,點(diǎn)擊推送會(huì)響應(yīng)
首先接受到推送消息時(shí)響應(yīng)方法:
[AppDelegate application:didReceiveRemoteNotification: fetchCompletionHandler:]
然后接受到自定義消息時(shí)響應(yīng)的通知:
kJPFNetworkDidReceiveMessageNotification
</br>
iOS10
前臺(tái)+后臺(tái) APNS
設(shè)置JPUSHRegisterDelegate代理
收到推送消息時(shí)響應(yīng)方法:
[AppDelegate jpushNotificationCenter: willPresentNotification: withCompletionHandler: ]
點(diǎn)擊推送消息時(shí)響應(yīng)方法:
[AppDelegate jpushNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:]
前臺(tái)+后臺(tái) 自定義消息(一般都用這個(gè))
設(shè)置JPUSHRegisterDelegate代理嫉称、接受kJPFNetworkDidReceiveMessageNotification通知
收到推送消息時(shí)響應(yīng)的是:
kJPFNetworkDidReceiveMessageNotification通知(后臺(tái)定義的信息在這里面)
點(diǎn)擊推送消息時(shí)響應(yīng)方法是:
[AppDelegate jpushNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:]
<b>獲取APNS推送的數(shù)據(jù)</b>
// iOS 10 Support
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
// Required
NSDictionary * userInfo = response.notification.request.content.userInfo;
if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
[JPUSHService handleRemoteNotification:userInfo];
}
completionHandler(); // 系統(tǒng)要求執(zhí) 這個(gè) 法
//信息就在這里,通過這里可以獲取到推送數(shù)據(jù)
UNNotificationRequest *request = response.notification.request;
NSLog(@"request: %@", request);
NSLog(@"%s", __func__);
}
<b>獲取自定義信息非APNS的數(shù)據(jù)</b>
NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
[defaultCenter addObserver:self selector:@selector(networkDidReceiveMessage:) name:kJPFNetworkDidReceiveMessageNotification object:nil];
- (void)networkDidReceiveMessage:(NSNotification *)notification {
NSDictionary * userInfo = [notification userInfo];
NSString *content = [userInfo valueForKey:@"content"];
NSDictionary *extras = [userInfo valueForKey:@"extras"];
NSString *customizeField1 = [extras valueForKey:@"customizeField1"]; //服務(wù)端傳遞的Extras附加字段壳繁,key是自己定義的
NSLog(@"%s userInfo:%@ 自定義消息:%@荔棉, %@, %@", __func__, userInfo, content, extras, customizeField1);
}
<b>設(shè)置badge的值</b>
服務(wù)器通過 “+1”來添加number润樱,客戶d
<b>用戶分類</b>
<b>別名 alias</b>
為安裝了應(yīng)用程序的用戶,取個(gè)別名來標(biāo)識(shí)嗅钻。以后給該用戶 Push 消息時(shí)舌稀,就可以用此別名來指定。
每個(gè)用戶只能指定一個(gè)別名觉至。
同一個(gè)應(yīng)用程序內(nèi)睡腿,對(duì)不同的用戶峻贮,建議取不同的別名应闯。這樣,盡可能根據(jù)別名來唯一確定用戶碉纺。
系統(tǒng)不限定一個(gè)別名只能指定一個(gè)用戶。如果一個(gè)別名被指定到了多個(gè)用戶耿导,當(dāng)給指定這個(gè)別名發(fā)消息時(shí)态贤,服務(wù)器端API會(huì)同時(shí)給這多個(gè)用戶發(fā)送消息。
舉例:在一個(gè)用戶要登錄的游戲中箱吕,可能設(shè)置別名為 userid柿冲。游戲運(yùn)營時(shí),發(fā)現(xiàn)該用戶 3 天沒有玩游戲了姻采,則根據(jù) userid 調(diào)用服務(wù)器端API發(fā)通知到客戶端提醒用戶。
<b>標(biāo)簽 tag</b>
為安裝了應(yīng)用程序的用戶,打上標(biāo)簽刑棵。其目的主要是方便開發(fā)者根據(jù)標(biāo)簽愚铡,來批量下發(fā) Push 消息。
可為每個(gè)用戶打多個(gè)標(biāo)簽沥寥。
舉例: game, old_page, women
接口調(diào)用:
+ (void)setTags:(NSSet *)tags alias:(NSString *)alias callbackSelector:(SEL)cbSelector object:(id)theTarget;
ps:
- 這個(gè)接口是覆蓋邏輯,而不是增量邏輯片橡。即新的調(diào)用會(huì)覆蓋之前的設(shè)置淮野。
在之前調(diào)用過后吹泡,如果需要再次改變別名與標(biāo)簽经瓷,只需要重新調(diào)用此 API 即可。 - 調(diào)用此 API 在后臺(tái)同時(shí)設(shè)置別名與標(biāo)簽揭朝,不需要處理設(shè)置結(jié)果色冀,SDK會(huì)自動(dòng)進(jìn)行失敗重試
<b>項(xiàng)目中遇到的問題</b>
- 自定義消息發(fā)送會(huì)遇到一個(gè)問題(ios10)
- 在app啟動(dòng)狀態(tài)下,會(huì)先收到推送的信息敌卓,然后再響應(yīng)到推送的點(diǎn)擊代理方法伶氢。
- 在app未啟動(dòng)狀態(tài)下,會(huì)響應(yīng)到推送的點(diǎn)擊代理方法癣防,然后再收到推送的信息