教學課程:在您的 iOS 應用程式中建立推播通知
本教學課程會引導您使用 Azure 通訊服務 Chat SDK 在 iOS 應用程式中建立推播通知。
當行動應用程式未在前景執行時,推播通知會提醒使用者聊天對話中的內送訊息。 Azure 通訊服務 支援兩個版本的推播通知:
基本版本:應用程式圖示上會出現徽章號碼、裝置播放通知音效,並出現快顯警示橫幅。
進階版本:除了基本版本支援的功能之外,您還可以在警示橫幅中自定義標題和訊息預覽。
在本教學課程中,您已:
- 設定 Apple 推播通知服務 (APNs) 憑證。
- 設定推播通知的 Xcode。
- 實作推播通知的基本或進階版本。
- 在您的應用程式上測試通知。
- 設定推播通知的自動註冊更新。
下載程式碼
在 GitHub 上存取本教學課程的範例程式碼。
必要條件
完成快速入門: 將聊天新增至您的應用程式中的所有必要步驟。
在與通訊服務資源相同的訂用帳戶內建立 Azure 通知中樞,然後將通知中樞連結至您的通訊服務資源。 請參閱 通知中樞布建。
建立 .p12 APNs 憑證,並將其設定在通知中樞
如果您不是Microsoft內部客戶,請執行下列程式中的所有步驟。
如果您是Microsoft內部客戶, 請提交票證 並提供應用程式的套件組合標識碼以取得 .p12 憑證。 然後跳到下列程式中的最後一個步驟。
移至 [憑證]、[標識符和配置檔>標識符>] [應用程式標識符],然後選取與您的應用程式相關聯的應用程式標識符。
在應用程式識別碼的頁面上,選取 [功能>推播通知],然後選取 [儲存]。
在出現的 [ 修改應用程式功能] 對話框中,選取 [ 確認]。
在應用程式識別碼的頁面上,選取 [功能>推播通知設定>],然後做出下列選擇:
- 若要在開發 iOS 應用程式時測試推播通知,請選取 [開發 SSL 憑證] 下的 [建立憑證] 按鈕。
- 若要在生產環境中傳送推播通知,請選取 [生產 SSL 憑證] 底下的 [建立憑證] 按鈕。
[ 建立新的憑證 ] 區域會出現在 [憑證]、[標識符和配置檔 ] 頁面上。
在此區域中,您會上傳憑證簽署要求 (CSR):
在新的瀏覽器索引標籤上,遵循 此 Apple 說明頁面 來建立 CSR,並將檔案儲存為 應用程式name.cer。 這些指示包括使用憑證小幫手來要求憑證,以及填寫憑證資訊。
將.cer檔案拖曳至 [選擇檔案 ] 區域。 然後選取右上角的 [ 繼續 ]。
選取 [下載]。
以 .p12 格式將檔案儲存在本機。
開啟您下載的.cer檔案。 在 [金鑰鏈存取] 中,選取您的憑證,以滑鼠右鍵按兩下該憑證,然後以 .p12 格式匯出您的憑證。
移至您的通知中樞。 在 [設定] 底下,選取 [Apple][APNS]。 然後填入憑證詳細數據:
- 針對 [ 驗證模式],選取 [ 憑證]。
- 針對 [上傳憑證],上傳您剛才建立的 .p12 檔案。
- 針對 [ 應用程式模式],根據您的需求選取模式。
當您完成輸入所有資訊時,請選取 [ 儲存]。
設定 Xcode
在 Xcode 中,移至 [簽署與功能]。
選取 [+ 功能],然後選取 [推播通知],以新增功能。
選取 [+ 功能],然後選取 [背景模式],以新增另一個功能。
在 [背景模式] 底下,選取 [遠端通知]。
針對 Pod 目標 - AzureCore,將 [只需要應用程式擴充功能安全 API] 設定為 [否]。
實作推播通知
基本版本
如果您想要實作推播通知的基本版本,您必須向 APN 註冊遠端通知。 請參閱範例程序代碼,以查看AppDelegate.swift中的相關實作。
進階版本
如果您想要實作進階版本的推播通知,您必須在應用程式中包含下列專案。 原因是推播通知承載中的客戶內容加密(例如聊天訊息內容和寄件者顯示名稱)需要一些因應措施。
加密金鑰的數據記憶體
在 iOS 裝置中建立持續性數據記憶體。 此資料記憶體應該能夠在主要應用程式與應用程式延伸模組之間共享數據。
在本教學課程的範例程式代碼中,採取下列動作,選擇 [應用程式群組] 作為數據記憶體:
遵循 Apple 文章 將功能新增至應用程式的目標(主要應用程式和應用程式延伸模組)中的步驟,將應用程式群組功能新增至您的應用程式。
遵循設定應用程式群組一文 中的步驟來設定應用程式群組。 請確定您的主要應用程式和應用程式延伸模組具有相同的容器名稱。
通知服務延伸模組
實作與主要應用程式搭配的通知服務延伸模組。 當裝置收到推播通知承載時,此應用程式延伸模組會用來解密推播通知承載。
移至 Apple 檔案中的將服務應用程式延伸模組新增至您的專案 ,並遵循步驟。
移至 Apple 檔中的實作擴充功能的處理程式方法 。 Apple 提供用來解密資料的預設程式代碼,您可以遵循本教學課程的整體結構。 不過,由於您使用 Chat SDK 進行解密,因此您必須以自定義邏輯取代開頭
// Try to decode the encrypted message data
的部分。 請參閱範例程序代碼,以查看 NotificationService.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 中的相關實作。
測試您的通知
使用使用者 A 和使用者 B 建立聊天對話。
下載範例應用程式的 GitHub 存放庫。
將使用者的
<ACESS_TOKEN>
和值放入 AppSettings.plist<ACS_RESOURCE_ENDPOINT>
。將兩個 Pod 目標的 [啟用 Bitcode] 設定為 [否]:AzureCommunicationChat 和 Trouter。
將 iOS 裝置插入 Mac 並執行程式。 當系統要求您授權裝置上的推播通知時,請選取 [ 允許]。
以使用者 B 身分傳送聊天訊息。 確認使用者 A 在 iOS 裝置上收到推播通知。
實作註冊更新
若要讓Microsoft提供安全的聊天服務,iOS 裝置上的推播通知註冊僅有效 45 分鐘。 若要維護推播通知的功能,您必須在用戶端應用程式中實作註冊更新。
本教學課程建議兩個符合Apple官方指導方針的解決方案。 我們建議您一起實作這兩個解決方案,以提高其有效性。
注意
各種因素可能會影響任一解決方案的有效性。 例如,裝置的電池狀態、網路條件和iOS特定限制可能會影響應用程式執行背景工作的能力。 如需詳細資訊,請參閱 App 背景執行 中的進階影片和 從 Apple 將背景更新推送至您的應用程式 文章。
解決方案 1:背景工作
即使應用程式不在前景,背景工作也提供執行活動的方法。 當您實作背景工作時,您的應用程式可以要求更多時間來完成特定工作,例如更新推播通知註冊。
下列各節說明如何使用背景工作進行註冊更新。
設定使用者存取令牌的自動重新整理
若要確保對聊天服務的不間斷存取,您必須維護有效的使用者存取令牌。 令牌通常會有預設有效期間 24 小時,之後令牌就會到期,且需要更新。 實作自動重新整理機制有助於保證每當啟用聊天應用程式時令牌都有效。
聊天 SDK 藉由在實作自定義存取令牌重新整理器時自動化重新整理程式,以簡化令牌管理。 完成下列步驟來設定聊天應用程式以支援自動權杖重新整理:
若要協助確保您的聊天應用程式維持持續且安全的使用者存取,您必須實作專用於發行令牌的服務層級。 其中一個選項是使用此用途的 Azure Functions。
若要建立 Azure 函式,請參閱 使用 Azure Functions 建置受信任的使用者存取服務一文。 它描述如何設定函式應用程式,並部署發行令牌所需的程序代碼。
設定 Azure 函式之後:
從 Azure 入口網站 取得令牌簽發者 URL。 您的聊天應用程式會使用此 URL 來要求新的令牌。
在聊天應用程式中建立並整合令牌重新整理器。 此元件會要求全新令牌,並初始化聊天用戶端,以便順暢地自動更新令牌。
令牌重新整理工具的範例程序代碼及其與聊天用戶端的整合可在範例應用程式的 GitHub 存放庫中取得。
啟用和排程背景工作
若要在 iOS 應用程式中啟用及排程背景工作,請遵循 Apple 文章 使用背景工作來更新您的應用程式中的步驟。
如需實際實作,請參閱 GitHub 存放 庫以取得範例應用程式。 提供的範例會使用 BGProcessingTask
設定為在未來不超過一分鐘起始,示範如何在背景有效率地擷取數據。
解決方案2:遠端通知
遠端通知是 iOS 應用程式執行背景工作以回應外部觸發程式的機制。 您可以將遠端通知用於重新整理註冊等工作,而不需使用者介入。
若要使用遠端通知來執行背景工作:
實作觸發機制。
例如,您可以使用 Azure 函式應用程式作為觸發機制。 它可讓您執行程式代碼來回應各種觸發程式,包括 HTTP 要求,因此適合用來起始無訊息推播通知。 請記得在您的端實作裝置登錄,讓函式應用程式知道傳遞通知的位置。
設定通知中樞。
Azure 通知中樞服務提供可調整的推播通知基礎結構,可從任何後端(雲端或內部部署)將通知傳送至任何平臺(iOS、Android、Windows 等)。
您可以重複使用用於一般推播通知的相同通知中樞。 如果您想要設定新的通知中樞,請參閱 Azure 通知中樞檔。
設定 Azure 函式應用程式以進行一般通知。
調整函式應用程式,以定期透過通知中樞傳送遠端通知。 這些通知會轉送至 APN,並導向至指定的裝置。 如需更多指示,請參閱 Azure Functions 的通知中樞輸出系結。
處理應用程式中的通知。
在您的 iOS 應用程式中,實 作應用程式實例方法 ,以在收到無訊息通知時觸發註冊的自動重新整理。
如需詳細資訊,請參閱Apple文章 設定遠端通知伺服器。