iOS本身沒(méi)有透?jìng)魍扑蜋C(jī)制,是否使用第三方并不會(huì)改變推送的機(jī)制,第三方只是幫你寫好與APNS的交互,你只需設(shè)置要傳送的消息就好。只要有推送過(guò)來(lái)就一定會(huì)顯示推送彈窗,除非用戶關(guān)閉通知。
個(gè)推的透?jìng)骶妥咚麄冏约旱耐競(jìng)鞣椒ǖ?,分在線離線,離線就是后臺(tái)或app未啟動(dòng),在線就是app打開狀態(tài),如果是離線狀態(tài)收到消息會(huì)走APNS(表現(xiàn)就是頂部彈框、通知欄彈框、角標(biāo)變化,如果是靜默推送,還會(huì)自動(dòng)執(zhí)行一個(gè)方法,最下面有寫。普通推送不會(huì)走),但是打開app后就會(huì)走透?jìng)飨⒎椒ˋAA(靜默推送的話直接走透?jìng)鞣椒ˋAA,普通推送的話,先走BBB/CCC,再走AAA),如果是在線狀態(tài)就直接走透?jìng)飨ⅲ蛔逜PNS。如果你是用透?jìng)飨⑼扑偷脑?,都在透?jìng)鞣椒ㄖ刑幚砭秃昧恕?br> 結(jié)合我們公司的App,之前有個(gè)疑問(wèn):發(fā)單的那一刻,我們公司后臺(tái)走的是APNs還是透?jìng)髂兀?現(xiàn)在可以肯定的回答:離線走APNs,在線走透?jìng)鳌?/p>
- 透?jìng)飨⒎椒ˋAA
執(zhí)行時(shí)間1:程序離線(在后臺(tái)或者app未啟動(dòng))收到推送時(shí)候,當(dāng)由離線進(jìn)入在線的時(shí)候會(huì)執(zhí)行(此時(shí)offLine為YES)。如果一直是離線,那么肯定不會(huì)執(zhí)行該方法。
執(zhí)行時(shí)間2:程序在線收到推送的時(shí)候會(huì)執(zhí)行(此時(shí)offLine為NO)。
- (void)GeTuiSdkDidReceivePayloadData:(NSData *)payloadData andTaskId:(NSString *)taskId andMsgId:(NSString *)msgId andOffLine:(BOOL)offLine fromGtAppId:(NSString *)appId {
}
普通推送(收到推送,有聲音有文字)
應(yīng)用在后臺(tái)收到通知的時(shí)候(不點(diǎn)開通知,也不打開APP哦),就不會(huì)執(zhí)行如下代碼
- 在iOS 10之前,點(diǎn)通知,會(huì)調(diào)用如下方法BBB。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
...
做你想做的操作。例如更新UI,跳轉(zhuǎn)界面,操作userInfo中的內(nèi)容。
...
}
- iOS 10 及以后版本,點(diǎn)擊通知,會(huì)調(diào)用如下方法CCC
-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler{
...
做你想做的操作。例如更新UI,跳轉(zhuǎn)界面,操作userInfo中的內(nèi)容。
...
NSLog(@"didReceiveNotification:%@", response.notification.request.content.userInfo);
// [ GTSdk ]:將收到的APNs信息傳給個(gè)推統(tǒng)計(jì)
[GeTuiSdk handleRemoteNotification:response.notification.request.content.userInfo];
completionHandler();
}
靜默推送(收到推送,沒(méi)有聲音沒(méi)有文字)。應(yīng)用在后臺(tái)(應(yīng)用被殺死或者應(yīng)用未啟動(dòng)不滿足靜默推送)收到通知的時(shí)候(不點(diǎn)開通知,也不打開APP哦),就會(huì)立刻執(zhí)行如下的代碼。 部分iOS10+還是iOS10-
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
...
做你想做的操作:這里我用蘋果自帶的文字轉(zhuǎn)語(yǔ)音播放userInfo里面的指定內(nèi)容
...
}