關於iOS Push Notification的響應問題

 
最近在作推送消息的時候遇到一個問題,就是當程序在後臺運行時,這時候收到推送消息後,點擊應用圖標後沒法拿到這個消息,至今還未解決,若有可以解決辦法的朋友,忘不吝賜教。
 
簡單總結一下推送消息的相應狀況
1. 當程序處於關閉狀態收到推送消息時,點擊圖標會調用- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 這個方法,那麼消息給經過launchOptions這個參數獲取到。

2. 當程序處於前臺工做時,這時候若收到消息推送,會調用- (void)application:(UIApplication *)applicationapp

didReceiveRemoteNotification:(NSDictionary *)userInfo這個方法spa

3. 當程序處於後臺運行時,這時候若收到消息推送,若是點擊消息或者點擊消息圖標時,也會調用- (void)application:(UIApplication*)applicationit

didReceiveRemoteNotification:(NSDictionary *)userInfo這個方法io

4. 當程序處於後臺運行時,這時候若收到消息推送,若是點擊桌面應用圖標,則不會調用didFinishLaunchingWithOptions和didReceiveRemoteNotification方法,因此沒法獲取消息class

下面是針對以上4種狀況作響應處理:後臺

第一種狀況:變量

if (launchOptions) {object

NSDictionary* pushNotificationKey = [launchOptionsobjectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];程序

        if (pushNotificationKey) {方法

            //這裏定義本身的處理方式

        }

}

第2、三種狀況:

if (application.applicationState == UIApplicationStateActive) {

//第二種狀況

        if ([[userInfo objectForKey:@"aps"] objectForKey:@"alert"]!=NULL) {

            [WLHelper showAlert:@"推送消息" msg:[[userInfo objectForKey:@"aps"] objectForKey:@"alert"]];

        }

} else {

//第三種狀況

//這裏定義本身的處理方式

}

第四種狀況: 

這時候你確定是拿不到的

由於推送來的時候若是app進入後臺,它已經進了這個回調

- (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)userInfo

你能夠直接在這個回調進行處理你想要的效果,或者你弄一個變量,把推送過的數據保存起來,在程序後臺進入前臺的時候加一個判斷作你想要的效果

固然最好使用第一種,由於推送來的時候你就把推送給處理了 (尚未驗證這個第四種方法,朋友們一塊兒研究)

相關文章
相關標籤/搜索