web-dev-qa-db-ja.com

iOS 13でAPNSデバイストークンを取得できない

APNSデバイストークンに関連する問題があります。 Xcode 10.2とiOS 12.1を使用する前。現時点では、デリゲートメソッドでデバイストークンを取得するために使用していました

-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

私はこのようにAPNSに登録していますが、問題なく機能していました。

UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    center.delegate = self;
    [center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){
                if(!error){
                    [[UIApplication sharedApplication] registerForRemoteNotifications];
                }
    }];

IPhone 13にiOS 13をインストールし、Xcode 11を使用すると、デリゲートメソッドdidRegisterForRemoteNotificationsWithDeviceTokenが呼び出されなくなります。この問題を理解できません。私はすでにこれについて調査しましたが、デリゲートメソッドからトークンを取得する際にいくつかの変更点があることを知っていますが、私の場合、デリゲートメソッドは呼び出されていません。繰り返しになりますが、iOS 12では問題なく動作しています。

12
IOS Dev

IPhoneを再起動するだけです。それはそれと同じくらい簡単で、90%のケースで問題を解決します。

9

https://appleid.Apple.com/ にログオンし、URL " https://developer.Apple.com/account/ios/identifier/bundle "を開きます" https://developer.Apple.com/account/resources/certificates/list "。

まず、2つの新しい証明書を作成します。(1)Apple開発署名iOS、macOS、tvOS、およびwatchOSアプリの開発バージョン。 Xcode 11以降で使用します。 (2)Apple配布App Storeへの提出またはアドホック配布用にアプリに署名します。 Xcode 11以降で使用します。

次に、メニュー「ID」をURL " https://developer.Apple.com/account/resources/identifiers/list "で見つけます。アプリの識別子を編集し、開発SSL証明書とプロダクションSSL証明書がプッシュ通知に追加されていることを確認します。

次に、メニュー "プロファイル"をURL " https://developer.Apple.com/account/resources/profiles/list "で開きます。 Xcode 11以降で使用されるDistributionForのタイプとしての証明書を確認し、保存します

最後に、プロビジョニングプロファイルファイルと作成されたCA証明書ファイルをMACにダウンロードします。これらは、ファイルを個別にダブルクリックして、XCodeおよびキーチェーンアプリケーションに追加されます。

さらに、携帯電話を再起動し、リモート通知が正しく設定されていることを確認してください。

1
Dengshan Tian

私も同じ問題に直面しました。多くのシナリオを試しました。私は以下の手順を実行した後に成功しました:

  1. 再起動されたデバイス
  2. メインスレッドでregisterForRemoteNotificationsメソッドを呼び出しました。

私の場合、デバイストークンを取得していましたが、応答に遅延があります(リモート通知をバックグラウンドスレッドに登録したためだと思います)。しかし、移動後[[UIApplication sharedApplication] registerForRemoteNotifications]メインスレッドでは、すべて正常に動作します。

これが私のコードです:

    [UIApplication sharedApplication].applicationIconBadgeNumber = 0;
    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    center.delegate = delegate;
    [center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){
        if(!error){
            dispatch_async(dispatch_get_main_queue(), ^{
                [[UIApplication sharedApplication] registerForRemoteNotifications];
                [self callCompletion:TRUE completion:completion];
            });
        }
    }];

これがお役に立てば幸いです。

1
Kirti Nikam

これは、デプロイデバイスで使用されるプラットフォームバージョンのXCodeインストールに欠落しているDeviceSupportに関連しています。

私の場合、13.1プラットフォームがありませんでした。解決するには、DeviceSupportsをフォルダーに追加するだけです

Xcode.app/Contents/Develper/Platforms/iPhoneOS.platform/DeviceSupport

不足しているDeviceSupportは次からダウンロードできます。 https://github.com/iGhibli/iOS-DeviceSupport/tree/master/DeviceSupport

0
Giuseppe

これを試して。

  1. アプリケーションを削除します。
  2. スマートフォンを再起動します。
  3. デバイスでビルドして実行(アプリケーションを再インストール)します。

それは私のために働いた。

0
kylie kim