收到消息後,程序可能處於三狀態:1.程序未啓動;2.程序在後臺掛起;3.程序在前臺運行ios
主要分爲兩種:點擊APP圖標仍是點擊推送消息,查看消息的。服務器
1.程序未啓動,退出狀態,無論點擊圖標仍是推送消息,都會調用app
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 方法,二者的區別在於點擊推送消息啓動應用會把消息的userInfo經過launchOptionsfetch
二、3:會調用it
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject])io
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) 兩個方法後臺
下邊方法是ios7添加的方法,實現下邊方法後上邊方法會被覆蓋掉。下邊方法有以下特性,當程序在前臺運行時,收到遠程推送,會馬上調用此方法,可是若是程序在後臺被掛起,收到消息(未點擊推送消息)並不會執行下邊方法,若是想在收到消息的時候有些需求須要執行一些代碼,那麼能夠讓服務器發給APNS是在aps字典中加入ios7
aps = {
content-available = 1;
};程序
這個字段,那麼當應用在後臺掛起時接收到消息時就會先執行下邊方法,固然,當點擊推送消息時,還會再次執行,這兩種狀況能夠根據applicationstate這個屬性區分,而上邊方法只會在點擊推送消息,或者應用在前臺運行時接受到消息時調用方法
程序在前臺運行時,轉化爲本地通知
if (application.applicationState == UIApplicationStateActive) {
使用激光方法,將遠程消息轉化爲本地通知
}
在func application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification)方法中,將本地消息以alert的形式展現出來
if application.applicationState == UIApplicationState.Inactive{
解析數據,進行相應跳轉
}