自iOS10 更新以來,Apple 表示這是 iOS 有史以來最大的升級(our biggest release yet),更加智能開放的Siri、強化應用對3DTouch支持、 HomeKit 、電話攔截及全新設計的通知等等。html
iOS 10 中將以前繁雜的推送通知統一成UserNotifications.framework 來集中管理和使用通知功能,還增長一些實用的功能——撤回單條通知、更新已展現通知、中途修改通知內容、在通知中顯示多媒體資源、自定義UI等功能。ios
iOS10推送通知的有如下兩個兩個擴展框架:git
通知拓展 | 特性 |
---|---|
UNNotificationServiceExtension | 在收到通知後,展現通知前,作一些事情的。好比,增長附件,網絡請求等。 |
UNNotificationContentExtension | 能夠經過提早配置的categoryIdentifier來定製推送顯示的界面 |
的主要功能,是讓咱們在收到遠程推送的時候,在推送展現以前對其進行修改,由於咱們收到遠程推送以前會先去執行Service Extension中的代碼,這樣就能夠在收到遠程推送展現以前作一些操做。github
通知服務拓展能作什麼?舉個例子:bash
經過遠程推送,推送的內容的title="1",我能夠在收到推送將要顯示以前將標題修改爲title="2",那麼推送條展現的title就是2。網絡
在發送推送的時候發送一段用公鑰加密的內容,而後設備收到推送以後,用私鑰進行解密而後再去展現。例如開發者不想讓第三方推送sdk(極光推送等)知曉推送內容,則能夠採用通知服務拓展。框架
在推送發送時,可使用服務拓展對通知的狀態(例如到達率)作統計。工具
當遠程推送須要展現多媒體的時候,也須要在這下載,下載完畢以後,獲取本地下載文件路徑再進行展現。對下載附件多媒體得須要Service Extension。測試
File -> New -> Target
選擇拓展 ui
第一步,選擇target爲extension,運行項目:
第三步,在NotificationService.m中的didReceiveNotificationRequest中添加斷點:
新加 NotificationServiceExtension的項目,對應的的Extension target的Build Phases-》link binary with libraries 加上
相對於普通推送,推送服務拓展payload的內容基本相同,舉個例子:
{
"aps":{
"alert":{
"title":"iOS 10 title",
"subtitle":"iOS 10 subtitle",
"body":"iOS 10 body"
},
"mutable-content":1,
"category":"saySomethingCategory",
"sound":"default",
"badge":3
}
}
複製代碼
注意,推送內容多了一個mutable-content,它表示咱們會在接收到通知時對內容進行更改。
開發者在didReceiveNotificationRequest方法中有30秒的時間對推送內容到達前進行處理。例如:
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
self.contentHandler = contentHandler;
self.bestAttemptContent = [request.content mutableCopy];
// Modify the notification content here...
self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]", self.bestAttemptContent.title];
self.bestAttemptContent.body = @"我是新修改的body";
self.bestAttemptContent.title = @"我是新修改的title";
self.bestAttemptContent.subtitle = @"我是新修改的subtitle";
self.contentHandler(self.bestAttemptContent);
}
複製代碼
這裏推薦Knuff: github.com/KnuffApp/Kn…
參考文獻http://www.cocoachina.com/ios/20160628/16833.html
若開發者使用極光推送,則下載極光的SDK ,把裏面的lib文件拷貝到工程中: