消息推送
工作
--- 消息推送
消息推送
消息推送集成參考友盟 http://dev.umeng.com/push/ios/integration
注意測試環境下,(友盟)設備在手機啟動程序的時候已經在友盟服務器注冊了,但是還需要手動添加設備方可推送
消息推送方法回調
一共有以下情況
- 應用啟動,在前台顯示收到推送消息
- 應用會alert出來(這里我沒有做處理)
- 應用啟動,退到后台收到推送消息
- 在方法里面
- (void) application:(UIApplication*)application didReceiveLocalNotification:(UILocalNotification*)notification //數據在notification里面
-
應用未啟動收到推送信息(由於我的工程是用了covadova框架,所以這里主要說一下如何在covadova框架的適配)
- 首先,這里的前提是由於應用關閉的狀態下來接收推送消息的,所以要明白一點
“Each device establishes an accredited and encrypted IP connection with the service and”
receives notifications over this persistent connection. If a notification for an app arrives
when that app is not running, the device alerts the user that the app has data waiting for
it.
意思就是,每個設備都會與蘋果的provider(服務器)加密連接,如果一個app的推送消息送達,但是app沒有運行,那么設備就會提醒用戶去處理該app的推送消息,簡而言之,無論多少個應用有推送功能,無論該應用是運行或關閉,設備都會與蘋果服務器進行加密連接。- 二,在方法
-
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOption
其實我們在里面設置一些UI全局參數以及自定義控制器,如果之前沒有接觸過消息推送的話,可能沒留意到這個啟動參數,如果沒有接收到推送消息,那么這個啟動參數(字典就為null),如果應用關閉的時候接收到推送消息然后點擊這個推送消息來啟動應用,那么里面的字典就存儲了該推送消息。
- 三,我要實現頁面跳轉,由於covadova框架只有一個UIWebView實例,所以我要等webView加載完畢之后才能執行目標跳轉,這里我需要了解控制器與AppDelegate里面個方法的執行順序,這哥們在這方面做了些功夫,幫了不少忙http://www.cnblogs.com/dsxniubility/p/4322525.html 只是我在xcode7.1.1里面運行多次,都是viewDidAppearance運行在最后而非applicationDidBecomeActive,於是我覺得還是以自己當前的版本為准,在viewDidAppearace里面加載目標頁面,但失敗了,於是乎我猜想,可能是在加載目標url后,程序還在繼續執行和面的代碼,導致覆蓋掉了效果,於是我想到了利用異步線程處理,當然由於是界面渲染,所以最后一定要回到主線程執行。像這樣
dispatch_queue_t queue = dispatch_queue_create("some", DISPATCH_QUEUE_CONCURRENT); dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), queue, ^{ dispatch_async(dispatch_get_main_queue(), ^{ UIWebView * webView = window.rootViewController.view.subviews[0]; [webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"window.location='%@'",_targetUrl]]; }); });
最后我發現,無論在viewDidAppearance還是在applicationDidBecomeActive方法里面執行該段代碼,均可獲得一樣的效果,於是乎為了方便,我最終在appdelegate里面完成跳轉。
