標籤:第一條 推斷 push ica share sdn tracking lan 大致
如果讀者已經知道push的基本知識,本文僅僅是解決一些適配,相容問題。如果對push 不甚瞭解,參考以下的文章
1.【iOS push全方位解析】(一) push的概述
2.【iOS push全方位解析】(二) 產生push認證,產生Provisioning Profile
3. 【iOS push全方位解析】(三)一個極簡的demo。並測試一下push
4. 給iOS程式加入push代碼
======================本文=======================
client須要處理三中情況:
1. client在前台。一般是彈窗● iOS6 的-(void) application: didReceiveRemoteNotification:被調用
● iOS7 的-(void) application: didReceiveRemoteNotification: fetchCompletionHandler:被調用
所以,為了相容iOS6.通常的做法是,在-(void) application: didReceiveRemoteNotification: fetchCompletionHandler:中調用-(void) application: didReceiveRemoteNotification: 方法。
● push處理模組,推斷一下程式是否是活躍 [UIApplication sharedApplication].applicationState == UIApplicationStateActive。
進而推斷是否須要彈出對話方塊。
2. client在後台。可是還活著大致原理同第一條,注意處理是否彈框。
3. client被殺死的狀態。進來push訊息。滑動(點擊)push訊息調起client。● iOS 6調用 -(void) application: didFinishLaunchingWithOptions:帶有launchDictionary。裡麵包括了push訊息
須要簡單處理一下,擷取真正的內容[launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]
● iOS 7以後調用兩個方法:
-(void) application: didFinishLaunchingWithOptions:
-(void) application: didReceiveRemoteNotification: fetchCompletionHandler:
這樣就有一個坑。iOS7以上,可能就反覆處理同一個push訊息了。
【解決】:因為僅僅有iOS7以上都會調用-(void) application: didReceiveRemoteNotification: fetchCompletionHandler:方法。
那麼。為了相容iOS6:在-(void) application: didFinishLaunchingWithOptions:中僅僅處理iOS6。
4.如今的APP都有一個啟動圖過程。如果push訊息過來。APP正好是被殺死狀態,且如果啟動後有啟動圖。
這中push拉起APP後是直接處理push的,不彈框。
【解決】首先想到的方法是:暫存這個push訊息。然後等啟動圖完了再展示push內容。注意,等到啟動圖完畢,再使用push模組
[UIApplication sharedApplication].applicationState == UIApplicationStateActive就不好用了。由於此時APP應該是活躍的了,就須要彈框了。
所以。須要push模組支援一個強制不彈框的介面。
iOS6和iOS7處理push不同之處,解決反覆push,-(void) application: didReceiveRemoteNotification: fetchCompletionHandl