web-dev-qa-db-ja.com

iOS 10でプッシュ通知が受信されない

私のアプリはAppstoreにあります。プッシュ通知はiOS 9では正常に機能していますが、iOS 10では機能していません。 iOS 10デバイスのプッシュ通知を受信して​​いません。サーバーでデバイストークンと証明書を確認しました。すべて正しいです。また、設定アプリで通知プロパティを確認しました。すべて大丈夫です。しかし、私は通知を受け取りませんでした。アプリの通知をオフとオンに切り替えるだけです。そして、アプリを開いて、デバイストークンが変更されているかどうかを確認しました。サーバーに合わせて変更および更新されます。その後、適切に通知を受け取ります。現在、私のデバイスでは正常に動作しています。

これがすべてのユーザーに影響するのか、私だけに影響するのか心配です。誰でも適切な解決策を見つけてください。

前もって感謝します

9
Yogesh Mv

XCode 8を使用したiOS 10の変更が必要GM UserNotifications.frameworkとそのデリゲートメソッドを実装して、プッシュ通知を処理する必要があります。

新しいUserNotifications.frameworkを使用して問題を解決しました。このリンクをたどってください: iOS 10のプッシュ通知の問題

7
Ashish Shah

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>
7
arango_86

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();
}
3
Keyur Hirani

IOS 10では、プッシュ通知の資格を追加する必要があるため、機能で「問題を修正」すると、問題は自動的に解決されます。

1
raul