私のアプリはAppstoreにあります。プッシュ通知はiOS 9では正常に機能していますが、iOS 10では機能していません。 iOS 10デバイスのプッシュ通知を受信していません。サーバーでデバイストークンと証明書を確認しました。すべて正しいです。また、設定アプリで通知プロパティを確認しました。すべて大丈夫です。しかし、私は通知を受け取りませんでした。アプリの通知をオフとオンに切り替えるだけです。そして、アプリを開いて、デバイストークンが変更されているかどうかを確認しました。サーバーに合わせて変更および更新されます。その後、適切に通知を受け取ります。現在、私のデバイスでは正常に動作しています。
これがすべてのユーザーに影響するのか、私だけに影響するのか心配です。誰でも適切な解決策を見つけてください。
前もって感謝します
XCode 8を使用したiOS 10の変更が必要GM UserNotifications.frameworkとそのデリゲートメソッドを実装して、プッシュ通知を処理する必要があります。
新しいUserNotifications.frameworkを使用して問題を解決しました。このリンクをたどってください: iOS 10のプッシュ通知の問題
「serNotifications」はiOS10では必須ではありません。 "IUserNotificationSettings"はiOS10でも引き続き機能します。
次のコードがある場合、iOS10で動作するはずです。
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
ただし、Xcode8以上でビルドする場合は、entitlementsに次のエントリがあることを確認してください。このエントリは、「Capabilities」で「Push Notifications」を有効にすると自動的に追加されます。
<key>aps-environment</key>
<string>development</string>
リリース配布ビルドでは、これは次のように自動的に変更されます
<key>aps-environment</key>
<string>production</string>
IOS 10のコードを変更する必要があります。
Appdelegate.h
#import <UserNotifications/UserNotifications.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate,UNUserNotificationCenterDelegate>
@end
OSバージョンを確認する
#define SYSTEM_VERSION_GRATERTHAN_OR_EQUALTO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
登録通知
- (void)registerForRemoteNotifications {
if(SYSTEM_VERSION_GRATERTHAN_OR_EQUALTO(@"10.0")){
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
[center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){
if(!error){
[[UIApplication sharedApplication] registerForRemoteNotifications];
}
}];
}
else {
// Code for old versions
}
}
ヘンデルデリゲートメソッド
//foreground app.
-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler{
NSLog(@"User Info : %@",notification.request.content.userInfo);
completionHandler(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge);
}
-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler{
NSLog(@"User Info : %@",response.notification.request.content.userInfo);
completionHandler();
}
IOS 10では、プッシュ通知の資格を追加する必要があるため、機能で「問題を修正」すると、問題は自動的に解決されます。