iOS 10
的消息通知和之前有很大變化,不過好消息是它變得配置更加簡單更加集中了。
1.登陸開發(fā)者賬號,這個界面排版比以前好看了一些,點擊中間的證書。
2.接下來點選 App IDs
3.在這里可以看到各種權(quán)限的開啟狀態(tài),這個我已經(jīng)配置好了。
4.點擊編輯,配置開發(fā)模式和生產(chǎn)模式的證書,配置好之后可以下載下來雙擊安裝到本地。
這里要上傳一個本地證書,生成方式如下:
1.鑰匙串訪問 -> 證書助理 -> 從證書頒發(fā)機構(gòu)請求證書…
2.郵箱隨便填寫,一定要存在本地磁盤你能找到的地方
5.到這里還沒完,還需要打開我們的工程開啟通知開關(guān),如圖。
6.這樣提交新的版本之后就可以順利收到通知啦,由于歷史原因我們用的是某萌,我也不想啦。還需要把之前的 apns 證書打包成 .p12 文件傳遞到它們的后臺。
簡單講一下如何導(dǎo)出.p12文件:
在自帶 app 中找到鑰匙串,右鍵你要導(dǎo)出的證書,就是這個樣子。
設(shè)密碼,導(dǎo)出
7.如果你也用某萌,代碼示例
注冊通知
- (void)registerAPNS {
if (SYSTEM_VER >= 10.0f) {// 下一個版本就只支持10以上了
// iOS10特有
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
// 必須寫代理,不然無法監(jiān)聽通知的接收與點擊
center.delegate = self;
[center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert |
UNAuthorizationOptionBadge |
UNAuthorizationOptionSound)
completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (granted) {
// 點擊允許
NSLog(@"注冊APNS成功");
[center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
NSLog(@"%@", settings);
}];
} else {
// 點擊不允許
NSLog(@"注冊APNS失敗");
}
}];
}else {
// iOS8 - iOS9
[[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert |
UIUserNotificationTypeSound |
UIUserNotificationTypeBadge
categories:nil]];
}
[[UIApplication sharedApplication] registerForRemoteNotifications];
}
回調(diào)
// 獲得Device Token
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
NSString *strDT = [[[[deviceToken description] stringByReplacingOccurrencesOfString:@"<"withString:@""]
stringByReplacingOccurrencesOfString:@">" withString:@""]
stringByReplacingOccurrencesOfString: @" " withString: @""];
NSString *userDefToken = @"你的 token";
do something...
}
// 獲得Device Token失敗
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
#warning 配置 aps-environment
NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error);
}
// iOS 7~9收到通知
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:
(void (^)(UIBackgroundFetchResult))completionHandler {
NSLog(@"iOS7及以上系統(tǒng),收到通知:%@", userInfo);
completionHandler(UIBackgroundFetchResultNewData);
}