共用方式為


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

本文說明如何使用 Azure 通訊服務聊天 SDK 在 iOS 應用程式中建立推播通知。

當行動應用程式未在前台運行時,推播通知會提醒使用者收到新的聊天訊息。 Azure 通訊服務 支援兩個版本的推播通知:

  • 基本版本:應用程式圖示上會出現徽章號碼、裝置播放通知音效,並出現快顯警示橫幅。

    推播通知基本版本的螢幕快照。

  • 進階版本:除了基本版本支援的功能之外,您還可以在警示橫幅中自定義標題和訊息預覽。

    推播通知進階版本的螢幕快照。

在本教學課程中,您已:

  • 設定 Apple 推播通知服務 (APN) 憑證。
  • 為推播通知設定 Xcode。
  • 實作推播通知的基本或進階版本。
  • 在您的應用程式上測試通知。
  • 設定推播通知的自動註冊續期。

下載程式碼

在 GitHub Azure 範例中下載範例程式代碼, 將聊天新增至您的應用程式

必要條件

建立 .p12 APNs憑證,並將其設定在通知中心

如果您不是 Microsoft 內部客戶,請完成以下程式中的步驟,以建立 Apple 推送通知服務(APNs) 憑證。

如果您是Microsoft內部客戶, 請提交票證 並提供應用程式的套件組合標識碼以取得 .p12 憑證。 然後略過以下程序的最後一步。

  1. 登入 Apple Developer Portal

  2. 移至 憑證、標識符和配置檔>標識符>應用程式 ID,然後選取與您的應用程式相關聯的應用程式 ID。

    顯示選擇應用程式識別碼之選取項目的螢幕快照。

  3. 在應用程式識別碼的頁面上,選取 [功能>推播通知],然後選取 [儲存]。

    顯示編輯應用程式識別碼設定選項的螢幕快照。

  4. 在出現的 [ 修改應用程式功能] 對話框中,選取 [ 確認]。

    顯示用於修改應用程式功能的 [確認] 按鈕的螢幕快照。

  5. 在應用程式識別碼的頁面上,選取 [功能>推播通知設定>],然後選取下列其中一個選項:

    • 若要在開發 iOS 應用程式時測試推播通知,請選取 [開發 SSL 憑證] 下的 [建立憑證] 按鈕。
    • 若要在生產環境中傳送推播通知,請選取 [生產 SSL 憑證] 底下的 [建立憑證] 按鈕。

    顯示建立開發憑證或生產憑證的選項螢幕快照。

  6. [ 建立新的憑證 ] 區域會出現在 [憑證]、[標識符和配置檔 ] 頁面上。

    顯示上傳憑證簽署要求選項的螢幕快照。

    在此區域中,您會上傳憑證簽署要求 (CSR):

    1. 在新的瀏覽器分頁中,按照此 Apple 說明頁面的指示來建立 CSR,並將檔案儲存為 應用程式名.cer。 這些指示包括使用憑證小幫手來要求憑證,以及填寫憑證資訊。

      此螢幕快照顯示從證書頒發機構單位要求憑證的選項。

      顯示填入憑證資訊的範例螢幕快照。

    2. 將.cer檔案拖曳至 [選擇檔案 ] 區域。 然後選取右上角的 [ 繼續 ]。

      選擇憑證檔案的區域螢幕快照。

  7. 選擇下載

    下載憑證的按鈕螢幕快照。

  8. 將檔案以 .p12 格式儲存在本機。

    顯示儲存憑證檔案的區域螢幕快照。

  9. 開啟您下載的 .cer 檔案。 在 [金鑰鏈存取] 中,選取您的憑證,以滑鼠右鍵按鍵按一下憑證,然後以格式匯出您的憑證 .p12

  10. 移至您的通知中樞。 在 [設定] 底下,選取 [Apple][APNS]。 然後填入憑證詳細數據:

    • 針對 [ 驗證模式],選取 [ 憑證]。
    • 針對 [上傳憑證],上傳您建立的 .p12 檔案。
    • 針對 [ 應用程式模式],根據您的需求選取模式。

    當您完成輸入所有資訊時,請選取 [ 儲存]。

    顯示通知中樞應用程式和憑證設定的螢幕快照。

設定 Xcode

  1. 在 Xcode 中,移至 [簽署與功能]

  2. 選取+ 功能以新增一項功能,然後選取推播通知

  3. 選取 [+ 功能],然後選取 [背景模式],以新增另一個功能。

  4. 在 [背景模式] 底下,選取 [遠端通知]。

    顯示 Xcode 中新增推播通知和背景模式的螢幕快照。

  5. 針對 [Pod 目標 - AzureCore],將 [只需要 App-Extension-Safe API] 設定為 [否]

實作推播通知

基本版本

如果您想要實作推播通知的基本版本,您必須向 APN 註冊遠端通知。 如需 AppDelegate.swift 相關實作,請參閱 GitHub Azure 範例 App Delegate Swift 程式碼

進階版本

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

加密金鑰的數據記憶體

在 iOS 裝置中建立持續性數據記憶體。 此資料記憶體必須在主要應用程式與應用程式延伸模組之間共享數據。

在本教學課程的範例程式代碼中,選擇 App Groups 作為數據記憶體,如下所示:

  1. 遵循 Apple 文章 將功能新增至應用程式的目標(主要應用程式和應用程式延伸模組)中的步驟,將應用程式群組功能新增至您的應用程式

  2. 遵循設定應用程式群組一文 中的步驟來設定應用程式群組。 請確定您的主要應用程式和應用程式延伸模組具有相同的容器名稱。

通知服務延伸模組

實作與主要應用程式搭配的通知服務延伸模組。 此應用程式延伸模組會在裝置收到推播通知承載時解密。

  1. 請參閱 Apple 檔中 的將服務應用程式延伸模組新增至您的專案 ,並遵循步驟。

  2. 請參閱 Apple 文件中的實作擴充功能的處理常式方法 (英文)。

Apple 提供用來解密資料的預設程式代碼,您可以遵循本教學課程的整體結構。 不過,由於您使用 Chat SDK 進行解密,因此您必須以自定義邏輯取代開頭 // Try to decode the encrypted message data 的部分。

如需NotificationService.swift中的相關實作,請參閱 GitHub Azure Samples 中的 Swift 通知服務範例。

PushNotificationKeyStorage 協定的實作

進階版本的推播通知需要通訊 PushNotificationKeyStorage 協定。 您可以使用 Chat SDK 提供的預設 AppGroupPushNotificationKeyStorage 類別。 如果您未使用應用程式群組作為密鑰記憶體,或如果您想要自定義金鑰儲存方法,請建立符合通訊協定的 PushNotificationKeyStorage 您自己的類別。

PushNotificationKeyStorage 定義兩種方法:

  • onPersistKey(encryptionKey:expiryTime):此方法會在使用者的 iOS 裝置記憶體中保存加密金鑰。 Chat SDK 會將 45 分鐘設定為加密金鑰的到期時間。 如果您想要推播通知生效超過 45 分鐘,您需要更頻繁地排程 chatClient.startPushNotifications(deviceToken:) 通話(例如每 15 分鐘),以便在舊密鑰到期之前註冊新的加密密鑰。

  • onRetrieveKeys() -> [String]:此方法會擷取先前儲存的有效密鑰。 您可以根據您稍早選擇的數據記憶體,彈性地提供自定義。

在通訊協定擴充功能中,Chat SDK 會提供您可以使用之 decryptPayload(notification:) -> PushNotificationEvent 方法的實作。 有關NotificationService.swift相關實作,請參閱 GitHub Azure Samples 的 Notification Service for Swift

測試您的通知

  1. 建立一個與使用者 A 和使用者 B 的聊天話題。

  2. 下載範例應用程式的 GitHub 存放庫。

  3. 將使用者 A 的 <ACCESS_TOKEN><ACS_RESOURCE_ENDPOINT> 值放入 AppSettings.plist

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

  5. 將 iOS 裝置插入 Mac 並執行程式。 當系統要求您授權裝置上的推播通知時,請選取 [ 允許]。

  6. 以使用者 B 身分傳送聊天訊息。 確認使用者 A 在 iOS 裝置上收到推播通知。

執行註冊更新

若要讓Microsoft提供安全的聊天服務,iOS 裝置上的推播通知註冊僅有效 45 分鐘。 若要維護推播通知的功能,您必須在用戶端應用程式中實作註冊更新。

本文說明兩個符合Apple官方指導方針的解決方案。 我們建議您一起實作這兩個解決方案,以提高其有效性。

附註

許多因素可能會影響任一解決方案的有效性。 例如,裝置的電池狀態、網路條件和iOS特定限制可能會影響應用程式執行背景工作的能力。 如需詳細資訊,請參閱 App 背景執行 中的進階影片和 從 Apple 將背景更新推送至您的應用程式 文章。

解決方案 1:背景工作

即使應用程式不在前景,背景工作也提供執行活動的方法。 當您實作背景工作時,您的應用程式可以要求更多時間來完成特定工作,例如更新推播通知註冊。

下列各節說明如何使用背景工作進行註冊更新。

設定使用者存取令牌的自動重新整理

若要確保對聊天服務的不間斷存取,您必須維護有效的使用者存取令牌。 令牌通常會有預設有效期間 24 小時,之後令牌就會到期,且需要更新。 實作自動重新整理機制有助於保證每當啟用聊天應用程式時令牌都有效。

聊天 SDK 會在實作自訂存取權杖重新整理器時,將重新整理程序自動化,以簡化權杖管理。 完成下列步驟,以設定聊天應用程式來支援自動權杖重新整理:

  1. 若要協助確保您的聊天應用程式維持持續且安全的使用者存取,您必須實作專用於發行令牌的服務層級。 其中一個選項是使用此用途的 Azure Functions。

    若要建立 Azure 函式,請參閱 使用 Azure Functions 建置受信任的使用者存取服務一文。 它描述如何設定函式應用程式,並部署發行令牌所需的程序代碼。

  2. 設定 Azure 函式之後:

    1. 從 Azure 入口網站 取得令牌簽發者 URL。 您的聊天應用程式會使用此 URL 來要求新的令牌。

    2. 在聊天應用程式中建立並整合令牌重新整理器。 此元件會要求全新令牌,並初始化聊天用戶端,以便順暢地自動更新令牌。

      令牌重新整理工具的範例程序代碼及其與聊天用戶端的整合可在範例應用程式的 GitHub 存放庫中取得

啟用及排程背景工作

若要在 iOS 應用程式中啟用及排程背景工作,請遵循 Apple 文章 使用背景工作來更新您的應用程式中的步驟。

如需實際實作,請參閱 GitHub Azure 範例 將聊天新增至您的應用程式。 提供的範例會使用 BGProcessingTask,其設定為在未來不超過一分鐘起始,示範如何有效率地在背景擷取資料。

解決方案2:遠端通知

遠端通知是 iOS 應用程式執行背景工作以回應外部觸發程式的機制。 您可以將遠端通知用於重新整理註冊等工作,而不需使用者介入。

若要使用遠端通知來執行背景工作:

  1. 實作觸發機制。

    例如,您可以使用 Azure 函式應用程式作為觸發機制。 它可讓您執行程式代碼來回應各種觸發程式,包括 HTTP 要求,因此適合用來起始無訊息推播通知。 請記得在您的端實作裝置登錄,讓函式應用程式知道傳遞通知的位置。

  2. 設定通知中樞。

    Azure 通知中樞服務提供可調整的推播通知基礎結構,可從任何後端(雲端或內部部署)將通知傳送至任何平臺(iOS、Android、Windows 等)。

    您可以重複使用用於一般推播通知的相同通知中樞。 如果您想要設定新的通知中樞,請參閱 Azure 通知中樞檔

  3. 設定 Azure 功能應用程式來執行定期通知。

    調整函式應用程式,以定期透過通知中樞傳送遠端通知。 這些通知會轉送至 APN,並導向至指定的裝置。 如需更多指示,請參閱 Azure Functions 的通知中樞輸出系結。

  4. 處理應用程式中的通知。

    在您的 iOS 應用程式中,實作 應用程式實例方法 ,以便在收到靜音通知時自動觸發註冊的重新整理。

如需詳細資訊,請參閱Apple文章 設定遠端通知伺服器