Поделиться через


Руководство. Отправка push-уведомлений в приложения Xamarin.Android с помощью Центров уведомлений

Обзор

Примечание.

Сведения об отмене и миграции Firebase Cloud Messaging см. в статье о миграции Google Firebase Cloud Messaging.

В этом учебнике показано, как использовать Центры уведомлений Azure для отправки push-уведомлений в приложение Xamarin.Android. Вы создадите пустое приложение Xamarin.Android, которое получает push-уведомления с помощью Firebase Cloud Messaging. Вы сможете рассылать через Центр уведомлений push-уведомления на все устройства, где запущено ваше приложение. Готовый код доступен в примере приложения NotificationHubs.

При работе с этим руководством вы выполните следующие задачи:

  • создадите проект Firebase и включите Firebase Cloud Messaging;
  • Создание центра уведомлений
  • создадите приложение Xamarin.Android и подключите его к центру уведомлений;
  • отправите тестовые уведомления с портала Azure.

Необходимые компоненты

создадите проект Firebase и включите Firebase Cloud Messaging;

  1. Войдите в консоль Firebase. Создайте проект Firebase, если его еще нет.

  2. После создания проекта выберите Add Firebase to your Android app (Добавить Firebase в приложение Android).

    Add Firebase to your Android app

  3. Выполните следующие действия на странице Add Firebase to your Android app (Добавление Firebase в приложение Android):

    1. В поле Android package name (Имя пакета Android) введите имя пакета. Например: tutorials.tutoria1.xamarinfcmapp.

      Specify the package name

    2. Выберите Регистрация приложения.

    3. Выберите Download google-services.json (Скачать Download google-services.json). Затем сохраните файл в папку проекта и щелкните Далее. Если вы еще не создали проект Visual Studio, этот шаг можно выполнить после создания проекта.

      Download google-services.json

    4. Выберите Далее.

    5. Выберите Пропустить этот шаг.

      Skip the last step

  4. В консоли Firebase щелкните значок шестеренки возле имени проекта. Выберите пункт Project Settings (Параметры проекта).

    Select Project Settings

  5. Если вы еще не скачали файл google-services.json, вы можете скачать его на этой странице.

    Download google-services.json from the General tab

  6. Переключитесь на вкладку Обмен сообщениями в облаке в верхней части. Скопируйте и сохраните Ключ сервера для последующего использования. Это значение будет использоваться для настройки концентратора уведомлений.

    Copy server key

Создание центра уведомлений

  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. После завершения развертывания выберите "Перейти к ресурсу".

Настройка параметров GCM/FCM для центра уведомлений

  1. Выберите Google (GCM/FCM)/ в разделе Параметры в меню слева.

  2. Введите ключ сервера, записанный c консоли Google Firebase.

  3. На панели инструментов щелкните Сохранить.

    Screenshot of Notification Hub in Azure Portal with Google G C M F C M option highlighted and outlined in red.

Концентратор уведомлений настроен для работы с GCM. Также у вас есть строки подключения, с помощью которых вы можете зарегистрировать приложение для получения уведомлений и отправки push-уведомлений.

Создание приложения Xamarin.Android и его подключение к концентратору уведомлений

Создание проекта Visual Studio и добавление пакетов NuGet

Примечание.

Действия, описанные в этом руководстве, предназначены для Visual Studio 2017.

  1. В Visual Studio откройте меню Файл и выберите Создать, а затем — Проект. В окне Новый проект сделайте следующее.

    1. Разверните Установлено, Visual C#, а затем нажмите кнопку Android.

    2. Из списка выберите приложение Android (Xamarin).

    3. Введите имя проекта.

    4. Выберите расположение для проекта.

    5. Выберите ОК

      New Project dialog

  2. В диалоговом окне нового приложения Android выберите Пустое приложениеи щелкните ОК.

    Screenshot that highlights the Blank App template.

  3. В окне обозревателя решений разверните раздел Свойства и выберите AndroidManifest.xml. Обновите имя пакета в соответствии с именем пакета, которое вы указали при добавлении Firebase Cloud Messaging в проект в консоли Google Firebase.

    Package name in GCM

  4. В качестве целевой версии Android для проекта укажите Android 10.0, выполнив следующие действия:

    1. Щелкните проект правой кнопкой мыши и выберите пункт Свойства.
    2. Для компиляции с помощью версии Android (целевая платформа) выберите Android 10.0.
    3. Выберите Да в окне сообщения, чтобы продолжить изменение целевой платформы.
  5. Добавьте необходимые пакеты NuGet в проект, выполнив следующие действия.

    1. Щелкните проект правой кнопкой мыши и выберите Управление пакетами NuGet.

    2. Перейдите на вкладку Установленные, выберите Xamarin.Android.Support.Design и щелкните Обновить в правой панели, чтобы обновить пакет до последней версии.

    3. Перейдите на вкладку "Обзор ". Найдите Xamarin.GooglePlayServices.Base. Выберите Xamarin.GooglePlayServices.Base в списке результатов. Щелкните Установить.

      Google Play Services NuGet

    4. В окне диспетчера пакетов NuGet выполните поиск пакета Xamarin.Firebase.Messaging. В списке результатов выберите Xamarin.Firebase.Messaging. Щелкните Установить.

    5. Затем найдите пакет Xamarin.Azure.NotificationHubs.Android. В списке результатов выберите Xamarin.Azure.NotificationHubs.Android. Щелкните Установить.

Добавление JSON-файла сервисов Google

  1. Скопируйте файл google-services.json, который вы скачали с консоли Google Firebase в папку проекта.

  2. Добавьте google-services.json в проект.

  3. Выберите google-services.json в окне обозревателя решений.

  4. В области свойств для действия сборки выберите GoogleServicesJson. Если вы не видите GoogleServicesJson, закройте Visual Studio, перезапустите ее, затем повторно откройте проект и повторите попытку.

    GoogleServicesJson build action

Настройка центров уведомлений в проекте

Регистрация в Firebase Cloud Messaging

  1. Если выполняется миграция из Google Cloud Messaging в 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. Создайте класс Constants.cs для вашего проекта Xamarin и определите в классе следующие постоянные значения. Замените значения заполнителей на собственные значения.

    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. Затем в классе MainActivity.cs добавьте следующий код в OnCreate после 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. Добавьте в класс AzureListener следующий код для обработки полученных сообщений.

        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. Этот параметр позволяет отправить на устройство тестовое push-уведомление.

Azure portal - Test Send

Push-уведомления обычно отправляются в серверной службе, например в мобильной службе или ASP.NET, с помощью совместимой библиотеки. Если библиотека недоступна для серверной части, можно также непосредственно использовать REST API для отправки сообщений с уведомлениями.

Следующие шаги

В рамках этого руководства вы отправили широковещательные уведомления на все устройства Android, зарегистрированные в серверной части. Чтобы узнать, как отправлять push-уведомления на конкретные устройства Android, перейдите к следующему руководству: