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

概觀

本教學課程示範如何使用 Azure 通知中樞將推播通知傳送至 Xamarin.Android 應用程式。 您會建立可使用 Firebase 雲端通訊 (FCM) 接收推播通知的空白 Xamarin.Android 應用程式。 您會使用通知中樞,將推播通知廣播到所有執行您的應用程式的裝置。 NotificationHubs 應用程式範例中提供完成的程式碼。

在本教學課程中,您會執行下列步驟:

  • 建立 Firebase 專案並啟用 Firebase 雲端通訊
  • 建立通知中樞
  • 建立 Xamarin.Android 應用程式,並將其連線至通知中樞
  • 從 Azure 入口網站傳送測試通知

必要條件

建立 Firebase 專案並啟用 Firebase 雲端通訊

  1. 登入 Firebase 主控台。 建立新的 Firebase 專案 (如果您還沒有 Firebase 專案的話)。

  2. 建立專案之後,請選取 [將 Firebase 新增至 Android 應用程式]。

    將 Firebase 新增至 Android 應用程式

  3. 在 [ 將 Firebase 新增至 Android 應用程式 ] 頁面上,採取下列步驟:

    1. 針對 [Android 套件名稱],請輸入套件的名稱。 例如: tutorials.tutoria1.xamarinfcmapp

      指定套件名稱

    2. 選取 [註冊應用程式]。

    3. 選取 [下載 google-services.json]。 然後將檔案儲存到專案的資料夾,再選取 [下一步]。 如果您尚未建立 Visual Studio 專案,則可以在建立專案之後執行此步驟。

      下載 google-services.json

    4. 選取 [下一步] 。

    5. 選取 [略過此步驟]。

      略過最後一個步驟

  4. 在 Firebase 主控台中,選取您專案的齒輪圖示。 然後選取 [專案設定]。

    選取專案設定

  5. 如果尚未下載 google-services.json 檔案,您可以在此頁面下載。

    從 [一般] 索引標籤下載 google-services.json

  6. 切換到頂端的 [雲端通訊] 索引標籤。 複製並儲存 伺服器金鑰 以供稍後使用。 您可使用此值來設定通知中樞。

    複製伺服器金鑰

建立通知中樞

  1. 登入 Azure 入口網站

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

    Azure 入口網站 - 選取通知中樞

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

    通知中樞 - 新增工具列按鈕

  4. 在 [通知中樞] 頁面上,執行下列步驟:

    1. 在 [通知中樞] 中輸入名稱。

    2. 在 [建立新的命名空間] 中輸入名稱。 命名空間包含一或多個中樞。

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

    4. 在 [資源群組] 中選取現有的資源群組,或建立一個新群組。

    5. 選取 [建立] 。

      Azure 入口網站 - 設定通知中樞屬性

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

    Azure 入口網站 - 前往資源

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

    重要

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

    Azure 入口網站 - 通知中樞連接字串

設定通知中樞的 GCM/FCM 設定

  1. 選取左側功能表上的 [設定] 區段中的 [Google (GCM/FCM)]。

  2. 輸入您從 Google Firebase 主控台記下的 伺服器金鑰

  3. 在工具列上選取 [儲存]。

    Azure 入口網站中的通知中樞螢幕擷取畫面,並以紅色框線醒目提示 Google G C M F C M 選項。

您的通知中樞已設定成使用 FCM,而且您已擁有可用來註冊應用程式以接收通知和傳送推播通知的連接字串。

建立 Xamarin.Android 應用程式,並將其連線至通知中樞

建立 Visual Studio 專案並新增 NuGet 套件

注意

本教學課程所述的步驟適用於 Visual Studio 2017。

  1. 在 Visual Studio 中,開啟 [檔案] 功能表,選取 [新增],然後選取 [專案]。 在 [新增專案] 視窗中,執行下列步驟:

    1. 依序展開 [已安裝] 和 [Visual C#],然後按一下 [Android]。

    2. 從清單中選取 [Android 應用程式 (Xamarin)]。

    3. 輸入專案的 [名稱] 。

    4. 選取專案的 [位置] 。

    5. 選取 [確定]

      [新增專案] 對話方塊

  2. 在 [新的 Android 應用程式] 對話方塊中,選取 [空白應用程式],然後選取 [確定]。

    醒目提示空白應用程式範本的螢幕擷取畫面。

  3. 在 [方案總管] 視窗中展開 [屬性],然後按一下 AndroidManifest.xml。 更新套件名稱,使其符合您在 Google Firebase 主控台中將 Firebase 雲端通訊新增至專案時輸入的套件名稱。

    GCM 中的套件名稱

  4. 依照下列步驟,將專案的目標 Android 版本設定為 android 10.0

    1. 以滑鼠右鍵按一下專案,然後選取 [屬性]。
    2. 針對 [ 使用 Android 版本編譯: (目標 framework) ] 欄位,選取 [ Android 10.0]。
    3. 在訊息方塊上選取 [是],繼續變更目標 Framework。
  5. 遵循下列步驟將必要的 NuGet 套件新增至專案:

    1. 以滑鼠右鍵按一下專案,然後選取 [管理 NuGet 套件...]。

    2. 切換至 [已安裝] 索引標籤,選取 [Xamarin.Android.Support.Design],然後選取右窗格中的 [更新] 將套件更新為最新版本。

    3. 切換至 [瀏覽] 索引標籤。搜尋 Xamarin.GooglePlayServices.Base。 在結果清單中選取 Xamarin.GooglePlayServices.Base。 然後,選取 [安裝]。

      Google Play 服務 NuGet

    4. 在 [NuGet 套件管理員] 視窗中,搜尋 Xamarin.Firebase.Messaging。 在結果清單中選取 Xamarin.Firebase.Messaging。 然後,選取 [安裝]。

    5. 現在,請搜尋 Xamarin.Azure.NotificationHubs.Android。 在結果清單中選取 Xamarin.Azure.NotificationHubs.Android。 然後,選取 [安裝]。

新增 Google Services JSON 檔案

  1. 將您從 Google Firebase 主控台下載的 google-services.json 複製到專案資料夾。

  2. google-services.json 新增至專案。

  3. 在 [方案總管] 視窗中選取 google-services.json

  4. 在 [屬性] 窗格中,將 [建置動作] 設定為 GoogleServicesJson。 如果您未看到 GoogleServicesJson,請關閉 Visual Studio 再加以重新啟動,並重新開啟專案,然後重試。

    GoogleServicesJson 建置動作

在專案中設定通知中樞

向 Firebase 雲端傳訊進行註冊

  1. 如果您要從 Google 雲端通訊遷移至 Firebase,您的專案檔案 AndroidManifest.xml 可能會包含過期的 GCM 設定,這可能會導致通知重複。 編輯檔案,並移除區段內的下列幾行 <application> (如果有的話):

    <receiver
        android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver"
        android:exported="false" />
    <receiver
        android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
        android:exported="true"
        android:permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
            <category android:name="${applicationId}" />
        </intent-filter>
    </receiver>
    
  2. 應用程式元素前面 新增下列陳述式。

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
    
  3. 收集您的 Android 應用程式和通知中樞的下列資訊:

    • 接聽連接字串:在 Azure 入口網站的儀表板上,選擇 [檢視連接字串]。 複製此值得 DefaultListenSharedAccessSignature 連接字串。
    • 中樞名稱:您的中樞在 Azure 入口網站中的名稱。 例如, mynotificationhub2
  4. 在 [方案總管] 視窗中,以滑鼠右鍵按一下您的 專案,選取 [新增],然後選取 [類別]。

  5. 為您的 Xamarin 專案建立 Constants.cs 類別,並定義類別中的下列常數值。 以您的值取代預留位置。

    public static class Constants
    {
        public const string ListenConnectionString = "<Listen connection string>";
        public const string NotificationHubName = "<hub name>";
    }
    
  6. 將下列 using 陳述式新增至 MainActivity.cs

    using WindowsAzure.Messaging.NotificationHubs;
    
  7. 將下列屬性新增至 >mainactivity 類別:

    internal static readonly string CHANNEL_ID = "my_notification_channel";
    
    
  8. In MainActivity.cs, add the following code to OnCreate after base.OnCreate(savedInstanceState):

    // Listen for push notifications
    NotificationHub.SetListener(new AzureListener());
    
    // Start the SDK
    NotificationHub.Start(this.Application, HubName, ConnectionString);
    
  9. 將名為 AzureListener 的類別新增至專案。

  10. 將下列 using 陳述式新增至 AzureListener.cs

    using Android.Content;
    using WindowsAzure.Messaging.NotificationHubs;
    
  11. 在您的類別宣告上方新增下列內容,並讓您的類別繼承自 Java.Lang.Object 並執行 INotificationListener

    public class AzureListener : Java.Lang.Object, INotificationListener
    
  12. 將下列程式碼新增至 MyFirebaseMessagingService 類別內,以處理所接收的訊息。

        public void OnPushNotificationReceived(Context context, INotificationMessage message)
        {
            var intent = new Intent(this, typeof(MainActivity));
            intent.AddFlags(ActivityFlags.ClearTop);
            var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.OneShot);
    
            var notificationBuilder = new NotificationCompat.Builder(this, MainActivity.CHANNEL_ID);
    
            notificationBuilder.SetContentTitle(message.Title)
                        .SetSmallIcon(Resource.Drawable.ic_launcher)
                        .SetContentText(message.Body)
                        .SetAutoCancel(true)
                        .SetShowWhen(false)
                        .SetContentIntent(pendingIntent);
    
            var notificationManager = NotificationManager.FromContext(this);
    
            notificationManager.Notify(0, notificationBuilder.Build());
        }
    
  13. 建置 您的專案。

  14. 在裝置或載入的模擬器上 執行 您的應用程式

從 Azure 入口網站傳送測試通知

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

Azure 入口網站 - 測試傳送

推播通知通常會在後端服務 (例如行動服務) 中或透過相容程式庫的 ASP.NET 傳送。 如果您的後端無法使用程式庫,您也可以直接使用 REST API 來傳送通知訊息。

後續步驟

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