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

最終更新日: 2022 年 2 月 14 日

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

簡単な説明

APN が証明書にリンクされているバンドル ID (トピック/アプリケーション) を認識しない場合、APN は 400 ステータスコードと「DeviceTokenNotForTopic」エラーを返します。

このエラーが発生すると、APN は関連付けられているプラットフォームエンドポイントも非アクティブ化します。

この問題は、プッシュ通知の POST API リクエストのヘッダーフィールドに正しくない APN バンドル ID が含まれていることによって発生します。

APN にプッシュ通知を送信するために Amazon SNS または Amazon Pinpoint を使用する場合にこのエラーを解決するには、まず非アクティブ化されたプラットフォームエンドポイントをアクティブ化します。その後、ご利用のアプリケーション用に APN に登録されているバンドル ID を確認し、ユースケースに応じて次のいずれかを実行します。

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

- または -

  • Amazon SNS または Amazon Pinpoint がプッシュ通知の POST API リクエストのヘッダーフィールドで使用するバンドル ID を上書きします。

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

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

解決方法

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

非アクティブ化されたプラットフォームエンドポイントをアクティブ化する

Amazon SNS の場合

set-platform-application-attributes AWS CLI コマンドを実行します。

Amazon Pinpoint の場合

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

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

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

1.    Apple Developer アカウントを開きます。

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

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

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

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

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

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

2.    Xcode を開きます。

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

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

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

Amazon SNS または Amazon Pinpoint がプッシュ通知の POST API リクエストのヘッダーフィールドで使用するバンドル ID を上書きするには

Amazon SNS の場合

Amazon SNS が APN に送信する POST API リクエストで、予約済みメッセージ属性 AWS.SNS.MOBILE.APNS.TOPIC にカスタム APN ヘッダー値を指定します。カスタムヘッダー値が APN に登録されているバンドル ID と一致することを確認します。

手順とコマンド例については、「Amazon SNS デベロッパーガイド」の「APN ヘッダーのカスタム値を指定する」を参照してください。

Amazon Pinpoint の場合

Amazon Pinpoint が APN に送信する POST API リクエストで、APN に登録されているバンドル ID と一致するように ThreadId プロパティを変更します。

詳細については、「Amazon Pinpoint REST API リファレンス」の「Messages」(メッセージ) と「AWS CLI リファレンス」の「send-messages」を参照してください。

特定のエンドポイントにプッシュ通知を送信する Amazon Pinpoint の send-messages コマンドの例

aws pinpoint send-messages --application-id 38d6b2282bdc4b46b2e24a14efe04914 --message-request file://pinpointapns.json

アプリケーションのバンドル ID を上書きする APN プッシュ通知用の Amazon Pinpoint の Post API リクエストスキーマの例

注: このサンプルスキーマの ThreadId 値 (バンドル ID) は「com.example.push」です。

{   
 "Addresses": {
 "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX": {  
 "ChannelType": "APNS_SANDBOX"  
 }     
 },       
 "MessageConfiguration": {  
 "APNSMessage": {
 "APNSPushType": "alert",
 "Body":"Sample Text for iOS Endpoints",  
 "ThreadId":"com.example.push" 
 }      
 }        
}

この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?