在您的聊天應用程式中啟用推播通知

本教學課程將引導您使用 Azure 通訊聊天 SDK 在 IOS 應用程式中啟用推播通知。
推播通知會在行動裝置應用程式未在前景執行的情況下,在聊天對話中警示用戶端有傳入訊息。 Azure 通訊服務支援兩個版本的推播通知。

  • Basic Version:使用者將能夠看到應用程式圖示上的徽章號碼 1、接收通知音效,並看到快顯警示橫幅。

  • Advanced Version:除了基本版本支援的功能之外,Contoso 將能夠自訂警示橫幅中的標題和訊息預覽區段。

    Screenshot of basic version of push notification.

    [基本版本]

    Screenshot of advanced version of push notification.

    [進階版本]

下載程式碼

GitHub 上存取本教學課程的範例程式碼。

必要條件

  1. 完成聊天快速入門中的所有必要條件步驟

  2. ANH 設定
    在與通訊服務資源相同的訂用帳戶內建立 Azure 通知中樞,並將通知中樞連結至您的通訊服務資源。 請參閱通知中樞佈建

  3. APNS 憑證設定
    在這裡,我們建議建立 .p12 APNS 憑證,並在通知中樞中加以設定。

    If you are not a Microsoft internal client,請遵循步驟 1 到步驟 9。
    If you are a Microsoft internal client,請在這裡提交票證,並提供您應用程式的套件組合識別碼,以取得 .p12 憑證。一旦您發行了有效憑證後,請執行步驟 9。

  • 步驟 1:登入 Apple 開發人員入口網站。 瀏覽至 Certificates, IDs & Profiles > Identifiers > App IDs,然後按一下與您應用程式相關聯的 App ID。

    Screenshot of APNS Cert Configuration step 1.
  • 步驟 2:在 App ID 的畫面上,檢查 Capabilities > Push Notifications。 按一下 [儲存],並對隨即顯示的 [修改應用程式功能] 對話方塊回應 [確認]。

    Screenshot of APNS Cert Configuration step 2-1.Screenshot of APNS Cert Configuration step 2-2.
  • 步驟 3:在相同的頁面中,按一下 Capabilities > Push Notifications > Configure。 按下列其中一個按鈕:

    • 開發 SSL 憑證 > 建立憑證 (用於在開發 iOS 應用程式時測試推播通知)
    • 生產 SSL 憑證 > 建立憑證 (用於在生產環境中傳送推播通知)
    Screenshot of APNS Cert Configuration step 3.
  • 步驟 4:然後瀏覽至下列頁面。 在這裡,您將上傳憑證簽署要求 (CSR)。 請遵循下一個步驟來建立 CSR。

    Screenshot of APNS Cert Configuration step 4.
  • 步驟 5:在新瀏覽器索引標籤中,遵循此說明頁面來建立 CSR,並將檔案儲存為「應用程式名稱.cer」。

    Screenshot of APNS Cert Configuration step 5 - 1.Screenshot of APNS Cert Configuration step 5 - 2.
  • 步驟 6:將 .cer 檔案拖曳至 [選擇檔案] 區域。 然後在右上角按下「繼續」。

    Screenshot of APNS Cert Configuration step 6.
  • 步驟 7:按一下 [下載],並將檔案儲存到本機磁碟。

    Screenshot of APNS Cert Configuration step 7.
  • 步驟 8:開啟您下載的 .cer 檔案;其會開啟 [金鑰鏈存取]。 選取您的憑證,以滑鼠右鍵按一下,並以 .p12 格式匯出您的憑證。

    Screenshot of APNS Cert Configuration step 8.
  • 步驟 9:移至您的通知中樞、按一下 [設定] 下的 [Apple (APNS)],然後選取 [驗證模式] 下的 [憑證]。 另根據您的需求選取 [應用程式模式]。 然後上傳您剛才建立的 .p12 檔案。

    Screenshot of APNS Cert Configuration step 9.
  1. XCode 設定
  • 在 XCode 中,移至 Signing & Capabilities。 選取 [+ 功能],然後選取 [推播通知],以新增功能。

  • 選取 [+ 功能],然後選取 [背景模式],以新增另一個功能。 此外,選取 [背景模式] 底下的 [遠端通知]。

Screenshot of Enable Push Notifications and Background modes in Xcode.
  • 將 [只需要 App-Extension-Safe API] 設定為 [否] 做為 Pod 目標 - AzureCore

實作

1 - 基本版本

如果您想要實作基本版本的推播通知,您必須向 APNS 註冊遠端通知 (Apple Push Notification Service)。 請參閱範例程式碼,以查看 AppDelegate.swift 中的相關實作。

2 - 進階版本

如果您想要實作進階版本的推播通知,您必須在應用程式中包含下列項目。 原因是我們在推播通知承載中加密客戶內容 (例如聊天訊息內容、寄件者顯示名稱等),這需要您這方的一些因應措施。

  • 項目 1:加密金鑰的資料儲存體

首先,您應該在 IOS 裝置中建立永續性資料儲存體。 此資料儲存體應該能夠在主要應用程式與應用程式延伸模組之間共用資料 (如需有關應用程式延伸模組 – 通知服務延伸模組的詳細資訊,請參閱項目 2)。

在我們的範例程式碼中,我們會選擇 [應用程式群組] 做為資料儲存體。 以下是建立及使用 [應用程式群組] 的建議步驟:

請遵循新增功能中的步驟,將 [應用程式群組] 功能新增至應用程式的目標,包括主要應用程式和通知服務延伸模組 (請參閱項目 2,了解如何建立通知服務延伸模組)。

此外,請遵循此 Apple 官方文件中的步驟來設定應用程式群組。 請確定您的主要應用程式和應用程式延伸模組具有相同的容器名稱。

  • 項目 2:通知服務延伸模組

其次,您應該實作與主要應用程式搭配的「通知服務延伸模組」。 這用於在接收推播通知承載時進行解密。

移至此 Apple 官方文件。遵循「將服務應用程式延伸模組新增至您的專案」和「實作延伸模組的處理常式方法」步驟。

請注意,在「實作延伸模組的處理常式方法」步驟中,Apple 會提供範例程式碼來解密資料,我們將遵循整體結構。 不過,由於我們使用聊天 SDK 進行解密,因此我們需要以自訂邏輯來取代從 “// Try to decode the encrypted message data.” 開始的部分。 請參閱範例程式碼,以查看 NotificationService.swift 中的相關實作。

  • 項目 3:實作 PushNotificationKeyStorage 通訊協定

第三,進階版本需要 PushNotificationKeyStorage。 身為 SDK 使用者,您可以使用聊天 SDK 所提供的預設 AppGroupPushNotificationKeyStorage 類別。 如果您不使用 App Group 做為金鑰儲存體,或想要自訂金鑰儲存方法,請建立您自己符合 PushNotificationKeyStorage 通訊協定的類別。

針對 PushNotificationKeyStorage,其會定義兩種方法:onPersistKey(encryptionKey:expiryTime)onRetrieveKeys() -> [String]

第一個方法是用來將加密金鑰保存在使用者 IOS 裝置的儲存體中。 聊天 SDK 會將 45 分鐘設定為加密金鑰的到期時間。 如果您想要讓推播通知生效超過 45 分鐘,則需要以相對頻繁方式 (例如每 15 分鐘) 排程呼叫 chatClient.startPushNotifications(deviceToken:),以便在舊金鑰到期之前註冊新的加密金鑰。

第二個方法是用來擷取先前儲存的有效金鑰。 您可以彈性地根據您選擇的資料儲存體 (項目 1) 提供自訂。

在通訊協定延伸模組中,聊天 SDK 提供您可以利用的實作 decryptPayload(notification:) -> PushNotificationEvent 方法。 請參閱範例程式碼,以查看 NotificationService.swift 中的相關實作。

測試

  1. 利用使用者 A 和使用者 B 建立聊天對話。

  2. 下載範例應用程式存放庫,並遵循必要條件和實作一節中的上述步驟。

  3. 將使用者 A 的 <ACESS_TOEKN> 和 <ACS_RESOURCE_ENDPOINT> 放入 AppSettings.plist

  4. 將兩個 Pod 目標的 [啟用 Bitcode] 設定為 [否] – AzureCommunicationChat 和 Trouter。

  5. 將 IOS 裝置插入 mac、執行程式,並在要求授權裝置上的推播通知時,按一下 [允許]。

  6. 以使用者 B 身分傳送聊天訊息。 您 (使用者 A) 應該能夠在 IOS 裝置中接收推播通知。