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
你能夠直接在這個回調進行處理你想要的效果,或者你弄一個變量,把推送過的數據保存起來,在程序後臺進入前臺的時候加一個判斷作你想要的效果
固然最好使用第一種,由於推送來的時候你就把推送給處理了 (尚未驗證這個第四種方法,朋友們一塊兒研究)