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

概觀

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

完成之後,您將可使用通知中樞,將推播通知廣播到所有執行您的應用程式的裝置。 NotificationHubs 應用程式範例中提供完成的程式碼。

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

  • 產生憑證簽署要求檔案
  • 針對推播通知註冊應用程式
  • 建立應用程式的佈建設定檔
  • 針對 iOS 推播通知設定您的通知中樞
  • 傳送測試推播通知

必要條件

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

  • 最新版的 Xcode

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

  • Apple Developer Program 成員資格。

  • Visual Studio for Mac

    注意

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

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

產生憑證簽署要求檔案

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

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

  1. 在您的 Mac 上,執行「鑰匙圈存取」工具。 此工具可從啟動控制板上的 [公用程式] 資料夾或 [其他] 資料夾開啟。

  2. 選取 [金鑰鏈存取] ,並展開 [憑證助理] ,然後選取 [從憑證授權單位要求憑證] 。

    Use Keychain Access to request a new certificate

    注意

    依預設,Keychain 存取會選取清單中的第一個項目。 如果您位於 [憑證] 類別中,而 Apple Worldwide Developer Relations 憑證授權單位不是清單中的第一個項目,則可能因此而產生問題。 在產生 CSR (憑證簽署要求) 之前,請確定您擁有非金鑰項目,或已選取 Apple Worldwide Developer Relations 憑證授權單位金鑰。

  3. 選取您的使用者電子郵件地址,輸入一般名稱值,並確定您已指定 [儲存至磁碟] ,然後選取 [繼續] 。 請將 [CA 電子郵件地址] 留空,因為這不是必要資訊。

    Required certificate information

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

    Choose a file name for the certificate

    此動作會在選取的位置儲存 CSR 檔案。 預設位置是桌面。 請記住為檔案選擇的位置。

接著,向 Apple 註冊您的應用程式,並啟用推播通知,然後上傳這個匯出的 CSR 建立推播憑證。

針對推播通知註冊應用程式

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

  1. 如果您尚未註冊應用程式,請瀏覽至 Apple Developer Center 上的 iOS 佈建入口網站。 使用您的 Apple ID 登入入口網站,然後選取 [識別碼] 。 然後選取 [+] 以註冊新的應用程式。

    iOS Provisioning Portal App IDs page

  2. 在 [註冊新識別碼] 畫面上,選取 [應用程式識別碼] 選項按鈕。 然後選取 [繼續] 。

    iOS Provisioning Portal register new ID page

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

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

    • 套件組合識別碼:以應用程式分發指南 \(英文\) 中所提的 Organization Identifier.Product Name 形式輸入套件組合識別碼。 [組織識別碼] 和 [產品名稱] 值必須符合當您建立 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 access certificates list showing new certificate

    注意

    雖然憑證中的名稱可能會不同,不過名稱會加上 Apple Development iOS Push Services 前置詞。

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

    Export certificate as p12 format

    您可以選擇使用密碼來保護憑證,但這是選擇性的。 如果您想要略過密碼建立,請按一下 [確定] 。 記下匯出的 .p12 憑證的檔案名稱和位置。 其可用來啟用 APNs 驗證功能。

    注意

    您的 .p12 檔案名稱和位置可能與本教學課程中所顯示的不同。

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

  1. 記下下列詳細資料:

    • 應用程式識別碼首碼 (這是小組識別碼)
    • 套件組合識別碼
  2. 返回 [ 憑證]、[識別碼 設定檔],然後按一下 [ 金鑰]。

    注意

    如果您已為 APNS 設定金鑰,則可重複使用在建立之後所下載的 .p8 憑證。 若是如此,您可以忽略 35 的步驟。

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

  4. 提供適當的金鑰名稱值,然後勾選 [Apple Push Notifications service (APN)] 選項,接著在下一個畫面上,依序按一下 [繼續] 、[註冊] 。

  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-----
    

    注意

    這是稍後將用來設定通知中樞權杖值

在這些步驟的最後,您應該具有下列資訊,以便稍後在使用 APN 資訊設定通知中樞中使用:

  • 小組識別碼 (請參閱步驟 1)
  • 套件組合識別碼 (請參閱步驟 1)
  • 金鑰識別碼 (請參閱步驟 7)
  • 權杖值 例如,.p8 金鑰值 (請參閱步驟8)

建立應用程式的佈建設定檔

  1. 返回 IOS 布建 入口網站,選取 [ 憑證]、[識別碼 設定檔],從左側功能表中選取 [ 設定檔 ],然後選取 以建立新的設定檔。 [註冊新佈建設定檔] 的畫面會隨即出現。

  2. 在 [開發] 下,選取 [iOS 應用程式開發] 作為佈建設定檔類型,然後選取 [繼續] 。

    Provisioning profile list

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

    Select the App ID

  4. 在 [選取憑證] 視窗中,選取用於程式碼簽署的開發憑證,然後選取 [繼續] 。 此憑證不是您建立的推播憑證。 如果沒有憑證存在,您必須加以建立。 如果憑證存在,請跳到下一個步驟。 若要建立開發憑證 (憑證不存在的話):

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

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

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

  8. 最後,在 [佈建設定檔名稱] 中為設定檔選擇名稱,然後選取 [產生] 。

    Choose a provisioning profile name

  9. 建立新的佈建設定檔後,請選取 [下載] 。 記住其儲存位置。

  10. 瀏覽至佈建設定檔的位置,然後按兩下來將其安裝在您的 Xcode 開發機器上。

建立通知中樞

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

  1. 登入 Azure 入口網站

  2. 選取左功能表上的 [所有服務],然後選取 [行動] 區段中的 [通知中樞]。 選取服務名稱旁邊的星號圖示,將服務加到左功能表上的 [我的最愛] 區段。 將 [通知中樞] 新增至 [我的最愛] 之後,在左功能表上予以選取。

    Azure portal - select Notification Hubs

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

    Notification Hubs - Add toolbar button

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

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

    2. 在 [ 命名空間詳細資料] 中,輸入新命名空間的唯一名稱。

    3. 命名空間包含一或多個通知中樞,因此請在 通知中樞的詳細資料中輸入中樞的名稱。 或者,從下拉式清單中選取現有的命名空間。

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

    5. 選取 [建立]。

      Azure portal - set notification hub properties

  5. 選取 [通知] \(鈴鐺圖示),然後選取 [前往資源] 。 您也可以重新整理 [通知中樞] 頁面中的清單,然後選取您的中樞。

    Azure portal - go to resource

  6. 從清單中選取 [存取原則] 。 請記下您可使用的兩個連接字串。 您稍後需要用到這些連接字串來處理推播通知。

    重要

    「請勿」 在應用程式中使用 DefaultFullSharedAccessSignature 原則。 這只能在後端使用。

    Azure portal - notification hub connection strings

使用 APNs 資訊設定您的通知中樞

在 [Notification Services] 下,選取 [Apple (APNS)] ,然後遵循先前在<建立通知中樞的憑證>一節中選擇的方法進行適當的步驟。

注意

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

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

  1. 選取 [憑證] 。

  2. 選取 [檔案] 圖示。

  3. 選取您先前匯出的 .p12 檔案,然後選取 [開啟] 。

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

  5. 選取 [沙箱] 模式。

    Configure APNs certification in Azure portal

  6. 選取 [儲存]。

選項 2:使用權杖型驗證

  1. 選取權杖

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

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

  4. 選取 [儲存] 。

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

將您的應用程式連接到通知中樞

建立新專案

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

    Visual Studio - Select Application Type

  2. 輸入應用程式名稱和組織識別碼,然後按 [下一步] 和 [建立]

  3. 在 [方案] 檢視中,按兩下 Into.plist,並確定 [身分識別] 下方的套件組合識別碼符合您在建立佈建設定檔時所使用的套件組合識別碼。 在 [簽署] 下方,確定您已於 [小組] 下方選取您的開發人員帳戶,已選取 [自動管理簽署],並已自動選取您的簽署憑證和佈建設定檔。

    Visual Studio- iOS App Config

  4. 在 [解決方案] 檢視中按兩下 Entitlements.plist,並確定已核取 [啟用推播通知]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. 在中建立的實作為 MSNotificationHubDelegateAppDelegate.cs

    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.cs ,執行 DidReceivePushNotification 類別的方法 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 裝置,請繼續進行下列教學課程: