iOS的推送功能包括:遠(yuǎn)程推送以及本地推送,從iOS4到目前的iOS10禾怠,推送功能經(jīng)歷了多個版本的修改×赘現(xiàn)在做一個總結(jié):
基本已iOS8以及iOS10作為分界點崖堤,目前分為3個階段,[iOS4,iOS8.0),[iOS8.0-iOS10.0),[iOS10.0-x]柠并,至于最早是不是iOS4.0開始有推送的岭接,我不得而知,接觸的最早的iOS系統(tǒng)就是4.0開始的臼予。暫且這么認(rèn)為吧鸣戴。
在第一個階段的時候,[iOS4.0-iOS8.0)粘拾,本地推送是附加與遠(yuǎn)程推送的窄锅,也就是說:申請了遠(yuǎn)程推送則自然而然就擁有了本地推送,并且推送權(quán)限的獲取與deviceToken的獲取在同一個API里缰雇,一次做完入偷。
第二個階段,[iOS8.0械哟,iOS10.0)疏之,做了一些改進(jìn),本地推送與遠(yuǎn)程推送稍作區(qū)分暇咆,并且推送權(quán)限的獲取與deviceToken的獲取分離為兩個流程:先獲取推送權(quán)限锋爪,在推送權(quán)限的代理回調(diào)方法中 根據(jù)獲取到權(quán)限與否,再進(jìn)行是否獲取deviceToken的流程操作爸业。并且推送功能增加了 推送消息的快捷處理功能:預(yù)覽完整消息其骄,快捷回復(fù)某個推送消息,而不用進(jìn)入對應(yīng)的App去處理沃呢,當(dāng)然需要App事先做好與推送消息的交互類型的約定與處理邏輯年栓。
第三個階段,[iOS10.0,x)薄霜,將推送功能模塊化某抓,從UIKit中的UIApplication里分出,做成獨立的框架UserNotification.framework,等系列模塊惰瓜。與前一個不同的地方是:推送通知可以分離出UIApplicationDelegate獨立在某個業(yè)務(wù)處理中心否副,而不必在UIApplicationDelegate里一堆代碼,并且將本地推送與遠(yuǎn)程推送表面上合并:開發(fā)者不必關(guān)心是什么推送崎坊,接口上都是一樣的是由于在用戶看來:推送表現(xiàn)都是一樣的备禀,在桌面 下拉一個消息出來。所以在這一點來說有點回歸,還有一個不同曲尸,推送權(quán)限的獲取成功與否不是在代理回調(diào)中處理赋续,而是在block中處理,然后deviceToken的流程是一樣的另患,并且獲取deviceToken仍是在UIApplicationDelegate里面做纽乱,這個自始至終到現(xiàn)在都沒變,可能以后會移到UserNotification模塊吧昆箕。目前推送功能仍是不完善的鸦列,還是比較混亂:各位可以做個實驗,iOS10.x系統(tǒng)鹏倘,利用UserNotificationCenter添加幾個CaledarTrigger類型的簡單的(不帶交互與附件)本地通知薯嗤,本地推送通知觸發(fā)后,桌面下拉消息出現(xiàn)纤泵,如果點擊此消息則激活A(yù)pp骆姐,此時進(jìn)入的函數(shù)是
- (void)userNotificationCenter:(UNUserNotificationCenter?*)center didReceiveNotificationResponse:(UNNotificationResponse?*)response withCompletionHandler:(void(^)())completionHandler;而如果你的App本身就是在前臺的時候夕吻,進(jìn)入的函數(shù)卻是
-(void)application:(UIApplication?*)application didReceiveLocalNotification:(UILocalNotification?*)notification诲锹,而這個函數(shù)卻被標(biāo)記為deprecated。如果添加的是帶交互的本地通知涉馅,估計回調(diào)的API仍是不同的(App本身就在前臺與App進(jìn)入后臺被推送消息交互激活)。
特別是為了做iOS系統(tǒng)版本兼容的稚矿,可真是“男朋友漏電啊”。
目前手頭只有一個iOS10.x的設(shè)備與一個iOS8.x設(shè)備捻浦,XCode也是6.x的晤揣,所以比較老的iOS系統(tǒng):比方8.0以前的,我已無法驗證朱灿,也無法做實驗了(xcode版本比較新昧识,老的API有些就看不到了),只是憑記憶來做總結(jié)盗扒。
我的App里目前需要支持iOS7以及以后系統(tǒng)的推送功能跪楞,所以就需要仔細(xì)處理。也僅僅是憑記憶和某些帖子來做了侣灶,如果用戶反饋問題不多甸祭,那基本就這樣沒問題的。