建議儘快升級。使用 iOS 10 SDK 須要 Xcode 8 的支持。iOS 10 推出兩週內,安裝率就已經達到 48.16%,不升級 Xcode 8 並適配 iOS 10 意味着你如今可能已經損失了 50% 的高端客戶,並且在將來的幾個月內或許會陸續損失 90% 以上的客戶。ios
projectName.entitlements
文件,請不要隨意刪除、修改:JPUSHService.h
、jpush-ios-2.1.9.a
。UserNotifications.framework
原先向系統註冊並請求推送權限的代碼是醬紫的,根據 iOS 8 之後及之前分兩步:xcode
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
//能夠添加自定義categories
[JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge |
UIUserNotificationTypeSound |
UIUserNotificationTypeAlert)
categories:nil];
}
else {
//categories 必須爲nil
[JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeSound |
UIRemoteNotificationTypeAlert)
categories:nil];
}複製代碼
如今在前面加了一段 iOS 10 的註冊方法:ide
//Required
if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) {
JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];
entity.types = UNAuthorizationOptionAlert|UNAuthorizationOptionBadge|UNAuthorizationOptionSound;
[JPUSHService registerForRemoteNotificationConfig:entity delegate:self];
}
else if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
//能夠添加自定義categories
[JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge |
UIUserNotificationTypeSound |
UIUserNotificationTypeAlert)
categories:nil];
} else {
//categories 必須爲nil
[JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeSound |
UIRemoteNotificationTypeAlert)
categories:nil];
}複製代碼
在 Change 4 中的該行代碼處會報警告:ui
[JPUSHService registerForRemoteNotificationConfig:entity delegate:self];複製代碼
其中的 self 類必須實現
實現
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {
// Required
NSDictionary * userInfo = notification.request.content.userInfo;
if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
[JPUSHService handleRemoteNotification:userInfo];
}
completionHandler(UNNotificationPresentationOptionAlert); // 須要執行這個方法,選擇是否提醒用戶,有Badge、Sound、Alert三種類型能夠選擇設置
}
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
// Required
NSDictionary * userInfo = response.notification.request.content.userInfo;
if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
[JPUSHService handleRemoteNotification:userInfo];
}
completionHandler(); // 系統要求執行這個方法
}複製代碼
其中:代理
willPresentNotification
在展現推送以前觸發,能夠在此替換推送內容,更改展現效果:內容、聲音、角標。didReceiveNotificationResponse
在收到推送後觸發,你原先寫在 didReceiveRemoteNotification
方法裏接收推送並處理相關邏輯的代碼,如今須要在這個方法裏也寫一份:
這兩個 iOS 10 的新特性,暫未包含在 JPush SDK 中,須要用戶手動建立相應的 Target 並實現。code
主要負責修改推送內容、增長圖片、gif、audio、video 展現。
收到推送小圖 - 下拉 - 展現大圖
cdn
用於徹底自定義推送展現 UI,響應用戶操做事件,並即時更新推送展現 UI。
注意下圖中點擊 Accept 後,推送 UI 裏日程表 UI 發生了刷新。
blog