Amazon SNS または Amazon Pinpoint 経由で APN プッシュ通知を発行する際に表示される「DeviceTokenNotForTopic」エラーをトラブルシューティングするにはどうすればよいですか?

所要時間2分
0

Apple プッシュ通知サービス (APN) のモバイルプッシュ通知が Amazon Simple Notification Service (Amazon SNS) または Amazon Pinpoint 経由で送信できません。プッシュ通知が失敗すると、APN は 400/410 ステータスコードと「DeviceTokenNotForTopic」のエラーメッセージを返します。このエラーが表示されるのはなぜですか? また、問題を解決するにはどうすればよいですか?

簡単な説明

Amazon SNS プラットフォームアプリケーションを作成するとき、または Amazon Pinpoint APN チャネルを設定するときは、特定のバンドル ID にリンクされた証明書/トークンが必要です。アプリケーションは、そのバンドル ID を持つデバイストークンを生成します。デバイスエンドポイントにメッセージを送信するとき、APN はこのデバイストークンについて同じバンドル ID を想定します。

異なるバンドル ID のデバイストークンを APN が取得すると、400/410 ステータスコードと「DeviceTokenNotForTopic」というエラーが返されます。このエラーが発生すると、APN は関連付けられているプラットフォームエンドポイントを非アクティブ化し、SNS でこのエンドポイントの [disabled] (無効) ステータスを表示します。

詳細については、「Amazon SNS デベロッパーガイド」の「ユーザー通知プロセスの概要」と「Apple 認証方法」を参照してください。また、Apple Developer ウェブサイトの「Handling notification responses from APNs」(APN からの通知レスポンスの処理) も参照してください。

注: 特定のアプリケーションイベントが発生した場合に備えてモバイルアプリケーションのイベント通知を設定し、そのイベントに対してプログラムによるアクションを実行するようにできます。例えば、プラットフォームエンドポイントが非アクティブ化されたときにイベント通知を設定できます。

解決方法

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

Amazon SNS または Amazon Pinpoint を使用して APN にプッシュ通知を送信する際のエラーを解決するには

1.    最初に、ご利用のアプリケーション用に APN に登録されているバンドル ID を確認します。

2.    アプリケーションのバンドル ID を、APN に登録されているバンドル ID と一致するように更新し、新しいデバイストークンを生成します。

3.    その後、新しく生成されたデバイストークンでプラットフォームエンドポイントを更新します。

ご利用のアプリケーション用に APN に登録されているバンドル ID を確認する

証明書ベースの認証

1.    Apple Developer アカウントにサインインします。

2.    左のナビゲーションバーで、[Certificates, IDs & Profiles] (証明書、ID、プロファイル) を選択します。

3.    左のナビゲーションバーで、[Identifiers] (識別子) を選択します。

4.    アプリケーションを選択します。

注: アプリケーションが証明書にリンクされていることを確認するには、[Certificates] (証明書) に移動し、[Name] (名前) の下のバンドル ID を確認します。

5.    [Name] (名前) フィールドにあるバンドル ID をコピーします。これは、ご利用のアプリケーション用に APN に登録されているバンドル ID です。

トークンベース認証

トークンベース認証では、複数のバンドル ID (アプリケーション) を 1 つのトークンにマッピングできます。正しいバンドル ID を使用していることを確認するには、Apple Developer アカウントまたは SNS コンソールで確認します。

1.    Apple Developer アカウントにサインインします。

2.    左のナビゲーションバーで、[Certificates, IDs & Profiles] (証明書、ID、プロファイル) を選択します。

3.    左のナビゲーションバーで、[Identifiers] (識別子) を選択します。その後、[App IDs] (アプリケーション ID) を選択します。

4.    アプリケーションを選択します。

5.    [Name] (名前) フィールドにあるバンドル ID をコピーします。これは、ご利用のアプリケーション用に APN に登録されているバンドル ID です。

6.    SNS コンソールにサインインします。

7.    [Mobile] (モバイル) の [Push Notification] (プッシュ通知) に移動します。

8.    プラットフォームアプリケーションを選択します。

9.    Apple Bundle ID が正しいバンドル ID であることを確認します。

アプリケーションのバンドル ID を、APN に登録されているバンドル ID と一致するように更新するには

1.    まだダウンロードしていない場合は、Xcode をダウンロードします。

2.    Xcode を開きます。

3.    アプリケーションのルートプロジェクトフォルダを選択します。

4.    [Signing & Capabilities] (署名と機能) を選択します。

5.    [Bundle Identifier] (バンドル識別子) のテキストフィールドで、ご利用のアプリケーション用に APN に登録されているバンドル ID を入力します。新しいバンドル ID は自動的に保存されます。

6.    アプリケーションを実行して、正しいバンドル ID を持つ新しいデバイストークンを生成します。

プラットフォームエンドポイントを更新する

Amazon SNS の場合

1.    set-endpoint-attributes AWS CLI コマンドを実行します。

2.    [Enabled] (有効) 属性を true に変更します。次に、[Token] (トークン) に、新しく生成されたデバイストークンを指定します。

Amazon Pinpoint の場合

1.    update-endpoint AWS CLI コマンドを実行します。

2.    [Address] (アドレス) 属性には、新しく生成されたデバイストークンを指定します。

詳細については、「Amazon SNS デベロッパーガイド」の「プラットフォームエンドポイントを作成する」および「Adding endpoints to Amazon Pinpoint」(Amazon Pinpoint へエンドポイントを追加する) を参照してください。


関連情報

モバイルプッシュ API エラー

コメントはありません

関連するコンテンツ