首先要說明兩個(gè)概念:本地通知和遠(yuǎn)程推送。本地通知是由本地應(yīng)用觸發(fā)的,接收會比較及時(shí)。遠(yuǎn)程推送是通過蘋果的APNs發(fā)送到應(yīng)用客戶端的。
以下有處理推送的三種狀態(tài):
一.APP沒有被殺掉進(jìn)程的時(shí)候,會根據(jù)是本地通知還是遠(yuǎn)程推送來調(diào)用不同的函數(shù)
//本地通知
-(void)application:(UIApplication*)application didReceiveLocalNotification:(UILocalNotification*)notification {
...
}
//遠(yuǎn)程推送
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo {
...
}
//遠(yuǎn)程推送時(shí)蘋果官方文檔更推薦使用這個(gè)
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo fetchCompletionHandler:(void(^)(UIBackgroundFetchResult))completionHandler
{
}
二.APP在殺掉進(jìn)程的時(shí)候,當(dāng)我們通過通知進(jìn)入APP時(shí),會調(diào)用下面的函數(shù)
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
//檢查是否從通知啟動
if(launchOptions)
{
NSDictionary* remoteNotification=[launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
NSLog(@"remoteNotification%@",remoteNotification);
}
}
三.判斷接收消息時(shí)的狀態(tài)
//當(dāng)應(yīng)用程序在激活狀態(tài)時(shí)接到通知,會是如下狀態(tài)
if(application.applicationState == UIApplicationStateActive) {
...
//當(dāng)應(yīng)用程序在后臺掛起時(shí)接到通知,用戶進(jìn)入應(yīng)用后,會是如下狀態(tài)
}else if(application.applicationState == UIApplicationStateInactive) {
...
}
在我們了解了以上三點(diǎn)后,就可以根據(jù)不同的情況處理推送消息了。
天倫物業(yè)項(xiàng)目的要求是不管APP在什么狀態(tài)點(diǎn)擊推送都要跳轉(zhuǎn)到相應(yīng)的頁面,這個(gè)時(shí)候我們通過第一點(diǎn)和第二點(diǎn)會調(diào)用的函數(shù),解析收到的消息字典獲取不同的type值,做相應(yīng)的跳轉(zhuǎn)。
我完成的仟詢項(xiàng)目的要求是APP在活躍狀態(tài)下是不處理推送的,我們接收到消息的情況下,可以通過第三點(diǎn)來判斷APP狀態(tài)做相應(yīng)的處理
文/zyh1158(簡書作者)
原文鏈接:http://www.itdecent.cn/p/4126ce0fe13f
著作權(quán)歸作者所有,轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),并標(biāo)注“簡書作者”。