標籤:
最近在做推送訊息的時候遇到一個問題,就是當程式在後台運行時,這時候收到推送訊息後,點擊應用表徵圖後無法拿到這個訊息,至今還未解決,如有能夠解決辦法的朋友,忘不吝賜教。
簡單總結一下推送訊息的相應情況1. 當程式處於關閉狀態收到推送訊息時,點擊表徵圖會調用- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 這個方法,那麼訊息給通過launchOptions這個參數擷取到。
2. 當程式處於前台工作時,這時候若收到訊息推送,會調用- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo這個方法
3. 當程式處於後台運行時,這時候若收到訊息推送,如果點擊訊息或者點擊訊息表徵圖時,也會調用- (void)application:(UIApplication*)application
didReceiveRemoteNotification:(NSDictionary *)userInfo這個方法
4. 當程式處於後台運行時,這時候若收到訊息推送,如果點擊案頭應用表徵圖,則不會調用didFinishLaunchingWithOptions和didReceiveRemoteNotification方法,所以無法擷取訊息
下面是針對以上4種情況做響應處理:
第一種情況:
if (launchOptions) {
NSDictionary* pushNotificationKey = [launchOptionsobjectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (pushNotificationKey) {
//這裡定義自己的處理方式
}
}
第二、三種情況:
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
你可以直接在這個回調進行處理你想要的效果,或者你弄一個變數,把推送過的資料儲存起來,在程式後台進入前台的時候加一個判斷做你想要的效果
當然最好使用第一種,因為推送來的時候你就把推送給處理了 (還沒有驗證這個第四種方法,朋友們一起研究)
關於iOS Push Notification的響應問題