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