APNS 的令牌型 (HTTP/2) 驗證

概觀

本文說明如何使用新的 APNS HTTP/2 通訊協定搭配令牌型驗證。

使用新通訊協定的主要優點包括:

  • 權杖產生相對簡單(與憑證相比)
  • 不再到期日期 – 您控制驗證權杖及其撤銷
  • 承載現在最多可達 4 KB
  • 同步意見反應
  • 您使用的是 Apple 的最新通訊協定 – 憑證仍然使用標示為淘汰的二進位通訊協定

您可以使用這個新機制,在兩個步驟中執行:

  • 從 Apple 開發人員帳戶入口網站取得必要資訊。
  • 使用新資訊設定通知中樞。

通知中樞現在已設定為搭配APNS使用新的驗證系統。

請注意,如果您從使用APNS的憑證認證進行移轉,令牌屬性會在我們的系統中覆寫您的憑證,但您的應用程式會繼續順暢地接收通知。

從 Apple 取得驗證資訊

若要啟用令牌型驗證,您需要來自 Apple Developer 帳戶的下列屬性:

金鑰識別碼

您可以在 Apple Developer 帳戶的 [憑證]、[標識符和配置檔] 下方的 [金鑰] 頁面取得金鑰標識碼:

Certificates

Identifiers

應用程式識別碼和應用程式名稱

應用程式名稱和識別碼也可以在開發人員帳戶的 [憑證、標識元和配置檔] 頁面中取得

Certificates and IDs

透過 .NET SDK 或 Azure 入口網站 進行設定

您可以使用我們最新的用戶端 SDK,或在 Azure 入口網站 中,將中樞設定為使用令牌型驗證。 若要在入口網站中啟用令牌型驗證,請登入 Azure 入口網站,然後移至通知中樞的 設定 > Apple (APNS) 面板。 從 [驗證模式] 屬性選取 [令牌],以使用所有相關令牌屬性更新中樞。

Configure token

  • 輸入您從 Apple Developer 帳戶擷取的屬性。
  • 選擇應用程式模式(生產沙盒)。
  • 按兩下 [儲存 ] 按鈕以更新您的 APNS 認證。

權杖型認證是由下列欄位所組成:

  • 金鑰識別碼:Apple 開發人員入口網站中產生的私鑰標識碼,例如 2USFGKSKLT
  • 小組標識碼:也稱為「前置詞」或「應用程式前置詞」。這是 Apple Developer 入口網站中組織的標識符;例如, S4V3D7CHJR
  • 套件組合標識碼:也稱為「應用程式識別碼」。 這是應用程式的套件組合識別符;例如, com.example.myapp。 請注意,您只能針對一個應用程式使用一個金鑰。 這個值會在傳送通知時對應至 apns-topic HTTP 標頭,並用來以特定應用程式為目標。 您無法明確設定的值 apns-topic
  • 令牌:也稱為「金鑰」或「私鑰」。這是從 Apple Developer 入口網站上產生的 .p8 檔案取得。 密鑰必須啟用 APNS(產生金鑰時,已在 Apple Developer 入口網站上選取該金鑰)。 當您將 PEM 頁首/頁尾從其中移除時,此值必須提供給 NH 入口網站/API。
  • 端點:這是通知中樞入口網站刀鋒視窗中的切換,以及 API 中的字元串字段。 有效值為 https://api.development.push.apple.com:443/3/devicehttps://api.sandbox.push.apple.com:443/3/device。 通知中樞會針對生產環境或沙盒環境使用此值來傳送通知。 這必須符合 aps-environment 應用程式中的權利,否則產生的APNS裝置令牌不符合環境,且通知無法傳送。

以下是說明正確使用方式的程式代碼範例:

NamespaceManager nm = NamespaceManager.CreateFromConnectionString(_endpoint);
string token = "YOUR PRIVATE KEY HERE";
string keyId = "YOUR KEY ID HERE";
string appName = "YOUR APP NAME HERE";
string appId = "YOUR APP ID HERE";
NotificationHubDescription desc = new NotificationHubDescription("PATH TO YOUR HUB");
desc.ApnsCredential = new ApnsCredential(token, keyId, appId, appName);
desc.ApnsCredential.Endpoint = @"https://api.development.push.apple.com:443/3/device";
nm.UpdateNotificationHubAsync(desc);

下一步