如何對透過 Amazon SNS 或 Amazon Pinpoint 發佈 APN 推送通知時的 “DeviceTokenNotForTopic” 錯誤進行疑難排解?

上次更新日期:2022 年 8 月 17 日

我的 Apple 推送通知服務 (APN) 行動推送通知無法透過 Amazon Simple Notification Service (Amazon SNS) 或 Amazon Pinpoint 傳送。當推送通知失敗時,APN 傳回 400/410 狀態代碼,並顯示 "DeviceTokenNotForTopic" 錯誤訊息。為什麼我會收到此錯誤,以及該如何解決問題?

簡短描述

建立 Amazon SNS 平台應用程式或設定 Amazon Pinpoint APN 通道時,需要連結至特定搭售方案 ID 的憑證/令牌。您的應用程式會產生具有該搭售方案 ID 的裝置令牌。向裝置端點傳送訊息時,APN 期望此裝置令牌具有相同的搭售方案 ID。

如果 APN 取用具有不同搭售方案 ID 的裝置令牌,則會傳回 400/410 狀態代碼和以下錯誤:"DeviceTokenNotForTopic"。發生此錯誤時,APNs 會停用關聯的平台端點,並在 SNS 上顯示此端點的狀態為 “disabled”(已停用)。

有關更多資訊,請參閱《Amazon SNS 開發人員指南》中的使用者通知流程概觀Apple 身分驗證方法。另請參閱 Apple 開發人員網站上的處理來自 APN 的通知回應

注意:您可以設定在某些應用程式事件發生時的行動應用程式事件通知,以便對該事件採取程式設計動作。例如,您可以設定在平台端點停用時的事件通知。

解決方案

注意:如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請確保您使用的是最新的 AWS CLI 版本

要解決使用 Amazon SNS 或 Amazon Pinpoint 向 APN 傳送推送通知時出現的錯誤

1.    請先查看您的應用程式已向 APN 註冊的搭售方案 ID。

2.    更新應用程式的搭售方案 ID 以符合已向 APN 註冊的搭售方案 ID,並產生新的裝置令牌。

3.    然後,使用新產生的裝置令牌更新平台端點。

查看您的應用程式已向 APN 註冊的搭售方案 ID

憑證型身分驗證

1.    登入您的 Apple 開發人員帳戶。

2.    在左側導覽列中,選擇 Certificates, IDs & Profiles (憑證、ID 和設定檔)。

3.    在左側導覽列中,選擇 Identifiers (識別符)。

4.    選擇您的應用程式。

      注意:若要驗證您的應用程式已連結至憑證,請導覽至 Certificates (憑證),然後檢視 Name (名稱) 的搭售方案 ID。

5.    複製 Name (名稱) 欄位中的搭售方案 ID。這是您的應用程式已向 APN 註冊的搭售方案 ID。

令牌型身分驗證

對於令牌型身分驗證,您可以將多個搭售方案 ID (應用程式) 與單個令牌進行對應。若要驗證您使用的是正確的搭售方案 ID,請在 Apple 開發人員帳戶或 SNS 主控台上進行確認。

1.    登入您的 Apple 開發人員帳戶。

2.    在左側導覽列中,選擇 Certificates, IDs & Profiles (憑證、ID 和設定檔)。

3.    在左側導覽列中,選擇 Identifiers (識別符)。然後,App IDs (應用程式 ID)。

4.    選擇您的應用程式。

5.    複製 Name (名稱) 欄位中的搭售方案 ID。這是您的應用程式已向 APN 註冊的搭售方案 ID。

6.    登入您的 SNS Console (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 開發人員指南》中的建立平台端點向 Amazon Pinpoint 新增端點


此文章是否有幫助?


您是否需要帳單或技術支援?