教學課程:使用 Azure 通知中樞將推播通知傳送至 Xamarin.iOS 應用程式

概觀

本教學課程說明如何使用 Azure 通知中樞將推播通知傳送至 iOS 應用程式。 您會建立空白的 Xamarin.iOS 應用程式,以使用 Apple Push Notification Service (APNs) 接收推播通知。

完成時,您可以使用通知中樞,將推播通知廣播到執行應用程式的所有裝置。 已完成的程式代碼可在 NotificationHubs 應用程式範例中使用

在本教學課程中,您會建立/更新程式代碼以執行下列工作:

  • 產生憑證簽署要求檔案
  • 註冊應用程式以便使用推播通知
  • 建立應用程式的布建配置檔
  • 設定 iOS 推播通知的通知中樞
  • 傳送測試推播通知

必要條件

  • Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,請在開始前建立免費 Azure 帳戶

  • 最新版的 Xcode

  • iOS 10(或更新版本)相容裝置

  • Apple Developer Program 成員資格。

  • Visual Studio for Mac

    注意

    由於 iOS 推播通知的設定需求,您必須在實體 iOS 裝置 (i 電話 或 iPad) 上部署和測試範例應用程式,而不是在模擬器中。

完成本教學課程是 Xamarin.iOS 應用程式所有其他通知中樞教學課程的必要條件。

產生憑證簽署要求檔案

Apple 推播通知服務 (APNs) 會使用憑證來驗證您的推播通知。 請遵循這些指示來建立必要的推播憑證來傳送和接收通知。 如需這些概念的詳細資訊,請參閱 官方Apple推播通知服務 檔。

產生憑證簽署要求 (CSR) 檔案,Apple 用來產生已簽署的推播憑證。

  1. 在您的 Mac 上,執行 Keychain 存取工具。 您可以從 [公用程式] 資料夾或 Launchpad 上的 [其他] 資料夾開啟它。

  2. 選取 [金鑰鏈存取],展開 [憑證助理],然後選取 [向證書頒發機構單位要求憑證]。

    Use Keychain Access to request a new certificate

    注意

    根據預設,Keychain Access 會選取清單中的第一個專案。 如果您位於 [憑證] 類別,Apple Worldwide Developer Relations 證書頒發機構單位不是清單中的第一個專案,則這可能會是個問題。 在產生 CSR(憑證簽署要求)之前,請確定您有非密鑰專案,或 已選取 Apple 全球開發人員關係證書頒發機構單位 金鑰。

  3. 選取您的 [使用者電子郵件位址],輸入您的 [一般名稱] 值,確定您指定 [ 儲存到磁碟],然後選取 [ 繼續]。 將 CA 電子郵件位址保留空白,因為不需要。

    Required certificate information

  4. 在 [另存新檔] 中輸入 CSR 檔案的名稱,選取 [位置] 中的位置,然後選取 [儲存]。

    Choose a file name for the certificate

    此動作會將 CSR 檔案儲存在選取的位置。 默認位置為 Desktop。 請記住為檔案選擇的位置。

接下來,向Apple註冊您的應用程式、啟用推播通知,並上傳導出的 CSR 以建立推播憑證。

註冊應用程式以便使用推播通知

若要將推播通知傳送至 iOS 應用程式,請向 Apple 註冊您的應用程式,並註冊推播通知。

  1. 如果您尚未註冊應用程式,請流覽至 Apple 開發人員中心的 iOS 佈建入口網站 。 使用您的 Apple ID 登入入口網站,然後選取 [ 標識符]。 然後選取 + 以註冊新的應用程式。

    iOS Provisioning Portal App IDs page

  2. 在 [ 註冊新的標識符 ] 畫面上,選取 [ 應用程式標識符 ] 單選按鈕。 然後選取 [繼續]

    iOS Provisioning Portal register new ID page

  3. 更新新應用程式的下列三個值,然後選取 [ 繼續]:

    • 描述:輸入應用程式的描述性名稱。

    • 套件組合標識碼:輸入組織標識符.產品名稱套件組合標識碼,如應用程式散發指南中所述。 [組織標識符] 和 [產品名稱] 值必須符合您在建立 Xcode 專案時所使用的組織識別碼和產品名稱。 在下列螢幕快照中 ,NotificationHubs 值會當做組織標識碼使用,而 GetStarted 值會當做產品名稱使用。 請確定套件 組合識別碼 值符合 Xcode 專案中的值,讓 Xcode 使用正確的發佈配置檔。

      iOS Provisioning Portal register app ID page

    • 推播通知:檢查 [功能] 區段中的 [推播通知] 選項。

      Form to register a new App ID

      此動作會產生您的應用程式識別碼和您確認資訊的要求。 選取 [ 繼續],然後選取 [ 註冊 ] 以確認新的應用程式標識符。

      Confirm new App ID

      選取 [ 註冊] 之後,您會在 [憑證、標識符和配置檔 ] 頁面中看到新的應用程式識別碼作為明細專案。

  4. 在 [憑證]、[標識符和配置檔] 頁面的 [標識符] 下,找出您剛才建立的應用程式標識碼明細專案,然後選取其數據列以顯示 [編輯您的應用程式標識符組態] 畫面。

建立通知中樞的憑證

需要憑證,才能讓通知中樞使用 APNS。 完成此步驟的方式有兩種:

  1. 建立 可直接上傳至通知中樞的 .p12
  2. 建立可用於令牌型驗證的 .p8較新的方法)。

較新的方法有一些優點(相較於使用憑證),如APNS令牌型 (HTTP/2) 驗證中所述。 不過,已針對這兩種方法提供步驟。

選項 1:建立可直接上傳至通知中樞的 .p12 推播憑證

  1. 向下卷動至核取的 [推播通知 ] 選項,然後選取 [ 設定 ] 以建立憑證。

    Edit App ID page

  2. [ Apple 推播通知服務 SSL 憑證 ] 視窗隨即出現。 選取 [開發 SSL 憑證] 區段底下的 [建立憑證] 按鈕。

    Create certificate for App ID button

    [ 建立新的憑證 ] 畫面隨即顯示。

    注意

    本教學課程會使用開發憑證,您的應用程式會使用此憑證來產生唯一的裝置令牌。 註冊生產憑證時會使用相同的程式。 只要確定您在傳送通知時使用相同的憑證類型。

  3. 選取 [ 選擇檔案],流覽至您從第一個工作儲存 CSR 檔案的位置,然後按兩下憑證名稱以載入它。 然後選取 [繼續]

  4. 在入口網站建立憑證之後,選取 [ 下載] 按鈕。 儲存憑證,並記住儲存憑證的位置。

    Generated certificate download page

    憑證會下載並儲存到 [下載] 資料夾中的電腦

    Locate certificate file in the Downloads folder

    注意

    根據預設,下載的開發憑證會命名 為 aps_development.cer

  5. 按兩下下載的推播憑證 aps_development.cer。 此動作會在 Keychain 中安裝新的憑證,如下圖所示:

    Keychain access certificates list showing new certificate

    注意

    雖然憑證中的名稱可能不同,但名稱前面會加上 Apple Development iOS Push Services

  6. 在 [金鑰鏈存取] 中,以滑鼠右鍵按下您在 [憑證] 類別中建立的新推播憑證。 依序選取 [匯出]、命名檔案、選取 .p12 格式,然後選取 [ 儲存]。

    Export certificate as p12 format

    您可以選擇使用密碼保護憑證,但這是選擇性的。 如果您想要略過密碼建立,請按兩下 [ 確定 ]。 記下匯出之 .p12 憑證的檔名和位置。 它們可用來啟用與 APN 的驗證。

    注意

    您的 .p12 檔名和位置可能與本教學課程中所描繪的內容不同。

選項 2:建立可用於令牌型驗證的 .p8 憑證

  1. 記下下列詳細資料:

    • 應用程式識別碼前置詞 (這是 小組識別碼
    • 套件組合標識碼
  2. 回到 [ 憑證]、[標識符和配置檔] 中,按兩下 [ 金鑰]。

    注意

    如果您已經有針對APNS設定的金鑰,則可以在建立 .p8 憑證之後重新使用您下載的 .p8 憑證。 如果是,您可以忽略步驟 35

  3. 按兩下按鈕(或[+建立金鑰] 按鈕來建立新的金鑰。

  4. 提供適當的 [金鑰名稱] 值,然後核取 [Apple 推播通知服務 (APNs)] 選項,然後按兩下 [繼續],然後在下一個畫面上按兩下 [註冊]。

  5. 按兩下 [下載],然後將 .p8 檔案 (前面加上 AuthKey_) 移至安全的本機目錄,然後按兩下 [完成]。

    注意

    請務必將 .p8 檔案保留在安全的地方(並儲存備份)。 下載金鑰之後,就無法在移除伺服器複本時重新下載金鑰。

  6. 在 [金鑰] 上,按下您剛才建立的金鑰(或如果您選擇改用現有的金鑰)。

  7. 記下 [ 金鑰識別碼 ] 值。

  8. 在您選擇的適當應用程式中開啟 .p8 憑證,例如 Visual Studio Code ,然後記下密鑰值。 這是 -----BEGIN PRIVATE KEY----- 和 -----END PRIVATE KEY 之間的值-----

    -----BEGIN PRIVATE KEY-----
    <key_value>
    -----END PRIVATE KEY-----
    

    注意

    這是稍後將用來設定通知中樞的令牌值

在這些步驟結束時,您應該有下列資訊,以供稍後在使用APNs資訊設定通知中樞中使用:

  • 小組識別碼 (請參閱步驟 1)
  • 套件組合識別碼 (請參閱步驟 1)
  • 金鑰識別碼 (請參閱步驟 7)
  • 令牌值 ,也就是 .p8 索引鍵值(請參閱步驟 8)

建立應用程式的布建配置檔

  1. 返回 iOS 佈建入口網站,選取 [憑證]、[標識符和配置檔],從左側功能表中選取 [配置檔],然後選取+以建立新的配置檔。 [ 註冊新的布建配置檔 ] 畫面隨即出現。

  2. 選取 [開發] 下的 [iOS 應用程式開發] 作為布建配置檔類型,然後選取 [繼續]。

    Provisioning profile list

  3. 接下來,從 [應用程式 標識符] 下拉式清單中選取您建立的應用程式識別碼,然後選取 [ 繼續]。

    Select the App ID

  4. 在 [ 選取憑證] 視窗中,選取用於程式代碼簽署的開發憑證,然後選取 [ 繼續]。 此憑證不是您所建立的推送憑證。 如果不存在,您必須建立它。 如果憑證存在,請跳至下一個步驟。 如果開發憑證不存在,若要建立開發憑證:

    1. 如果您看到 [沒有可用的憑證],請選取 [ 建立憑證]。
    2. 在 [軟體] 區段中,選取 [Apple Development]。 然後選取 [繼續]
    3. 在 [ 建立新的憑證 ] 畫面中,選取 [ 選擇檔案]。
    4. 流覽至您稍早建立的 憑證簽署要求 憑證,加以選取,然後選取 [ 開啟]。
    5. 選取繼續
    6. 下載開發憑證,並記住其儲存位置。
  5. 返回 [憑證]、[標識符和配置檔] 頁面,從左側功能表中選取 [配置檔],然後選取+以建立新的配置檔。 [ 註冊新的布建配置檔 ] 畫面隨即出現。

  6. 在 [ 選取憑證] 視窗中,選取您剛才建立的開發憑證。 然後選取 [繼續]

  7. 接下來,選取要用於測試的裝置,然後選取 [ 繼續]。

  8. 最後,在 [布建配置檔名稱] 中選擇設定檔的名稱,然後選取 [產生]。

    Choose a provisioning profile name

  9. 建立新的布建配置檔時,選取 [ 下載]。 請記住其儲存位置。

  10. 流覽至布建配置檔的位置,然後按兩下它,將它安裝在 Xcode 開發電腦上。

建立通知中樞

在本節中,您會使用 .p12 推播憑證或令牌型驗證來建立通知中樞,並使用 APN 設定驗證。 如果您想要使用已建立的通知中樞,您可以跳至步驟 5。

  1. 登入 Azure 入口網站

  2. 選取 左側功能表上的 [所有服務 ]。 A screenshot showing select All Services for an existing namespace.

  3. 在 [篩選服務] 文本框中輸入通知中樞 選取服務名稱旁的星號圖示,將服務新增至左側功能表上的 [我的最愛] 區段。 選取 [ 通知中樞]。

    A screenshot showing how to filter for notification hubs.

  4. 在 [通知中 樞] 頁面上,選取 工具欄上的 [建立 ]。

    A screenshot showing how to create a new notification hub.

  5. 在 [通知中樞] 頁面上的 [基本] 索引標籤中,執行下列步驟:

    1. [訂用帳戶] 中,選取您想要使用的 Azure 訂用帳戶名稱,然後選取現有的資源群組,或建立新的資源群組。

    2. 在命名空間詳細數據中輸入新命名空間的唯一名稱。

    3. 命名空間包含一或多個通知中樞,因此請在通知中樞詳細數據中輸入中樞的名稱。

    4. 從 [ 位置 ] 下拉式清單框中選取值。 這個值會指定您要在其中建立中樞的位置。

      Screenshot showing notification hub details.

    5. 檢閱 [可用性區域] 選項。 如果您選擇具有可用性區域的區域,預設會選取複選框。 可用性區域 是付費功能,因此會將額外的費用新增至您的階層。

    6. 選擇災害復原選項:配對的復原區域彈性復原區域。 如果您選擇 [配對復原區域],則會顯示故障轉移區域。 如果您選取 [ 彈性復原區域],請使用下拉式清單從復原區域清單中選擇。

      Screenshot showing availability zone details.

    7. 選取 建立

  6. 部署完成時,請選取 [移至資源]。

使用APNs資訊設定通知中樞

在 [通知服務] 底下,選取 [Apple][APNS],然後根據您先前在 [建立通知中樞憑證] 區段中所選擇的方法,遵循適當的步驟。

注意

如果您使用 App Store 或臨機操作散發設定檔建置應用程式,請使用生產環境進行應用程式模式。 這可讓您的裝置將推播通知傳送給從市集購買您的應用程式的使用者。

選項 1:使用 .p12 推播憑證

  1. 選取 [ 憑證]。

  2. 選取檔案圖示。

  3. 選取您稍早導出的 .p12 檔案,然後選取 [ 開啟]。

  4. 如有需要,請指定正確的密碼。

  5. 選取 [ 沙盒 模式]。

    Configure APNs certification in Azure portal

  6. 選取 [儲存]。

選項 2:使用令牌型驗證

  1. 選取 [令牌]。

  2. 輸入您稍早取得的下列值:

    • 金鑰識別碼
    • 套件組合標識碼
    • 小組標識碼
    • 權杖
  3. 選擇 沙箱

  4. 選取 [儲存]。

您現在已使用APN設定通知中樞。 您也有 連接字串 來註冊您的應用程式並傳送推播通知。

將您的應用程式 連線 至通知中樞

建立新專案

  1. 在 Visual Studio 中,建立新的 iOS 專案並選取 [單一檢視應用程式 ] 範本,然後按 [下一步]

    Visual Studio - Select Application Type

  2. 輸入您的應用程式名稱和組織標識符,然後按 [下一步],然後按擊 [ 建立]

  3. 在 [方案] 檢視中,按兩下 [Info.plist],然後在 [身分識別] 底下,確定您的套件組合標識符符合建立布建配置檔時所使用的標識碼。 在 [簽署] 底下,確定已選取 [小組] 底下的 [自動管理簽署],並自動選取您的簽署憑證和布建配置檔。

    Visual Studio- iOS App Config

  4. 在 [方案] 檢視中,按兩下 Entitlements.plist ,並確定 已核取 [啟用推播通知 ]。

    Visual Studio- iOS Entitlements Config

  5. 新增 Azure 傳訊套件。 在 [方案] 檢視中,以滑鼠右鍵按兩下專案,然後選取 [新增>NuGet 套件]。 搜尋 Xamarin.Azure.NotificationHubs.iOS ,並將套件新增至您的專案。

  6. 將新檔案新增至類別、將它命名為 , Constants.cs 並新增下列變數,並將字串常值佔位元取代為 hubnameDefaultListenSharedAccessSignature 先前記下的 。

    // Azure app-specific connection string and hub path
    public const string ListenConnectionString = "<Azure DefaultListenSharedAccess Connection String>";
    public const string NotificationHubName = "<Azure Notification Hub Name>";
    
  7. 在 中 AppDelegate.cs,新增下列 using 語句:

    using WindowsAzure.Messaging.NotificationHubs;
    using UserNotifications
    
  8. 在 中AppDelegate.cs建立 的實作MSNotificationHubDelegate

    public class AzureNotificationHubListener : MSNotificationHubDelegate
    {
        public override void DidReceivePushNotification(MSNotificationHub notificationHub, MSNotificationHubMessage message)
        {
    
        }
    }
    
  9. 在 中 AppDelegate.cs,更新 FinishedLaunching() 以符合下列程序代碼:

    public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
    {
        // Set the Message listener
        MSNotificationHub.SetDelegate(new AzureNotificationHubListener());
    
        // Start the SDK
        MSNotificationHub.Start(ListenConnectionString, NotificationHubName);
    
        return true;
    }
    
  10. 在 中AppDelegate.csDidReceivePushNotification,實作 類別的 AzureNotificationHubListener 方法:

    public override void DidReceivePushNotification(MSNotificationHub notificationHub, MSNotificationHubMessage message)
    {
        // This sample assumes { aps: { alert: { title: "Hello", body: "World" } } }
        var alertTitle = message.Title ?? "Notification";
        var alertBody = message.Body;
    
        var myAlert = UIAlertController.Create(alertTitle, alertBody, UIAlertControllerStyle.Alert);
        myAlert.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null));
        UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(myAlert, true, null);
    }
    
  11. 在您的裝置上執行應用程式。

傳送測試推播通知

您可以使用 Azure 入口網站 中的 [測試傳送] 選項,在應用程式中測試接收通知。 它會將測試推播通知傳送至您的裝置。

Azure portal - Test Send

推播通知通常會在後端服務中傳送,例如Mobile Apps或使用相容的連結庫 ASP.NET。 如果後端無法使用連結庫,您也可以直接使用 REST API 來傳送通知訊息。

下一步

在本教學課程中,您已將廣播通知傳送至向後端註冊的所有 iOS 裝置。 若要瞭解如何將通知推送至特定 iOS 裝置,請繼續進行下列教學課程: