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


Руководство. Отправка 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).

    Добавление Firebase в приложение Android

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

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

      Указание имени пакета.

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

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

      Загрузка файла google-services.json.

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

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

      Пропуск последнего шага.

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

    Выбор параметров проекта

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

    Скачайте файл google-services.json на вкладке

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

    Копирование ключа сервера

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

  1. Войдите на портал Azure.

  2. В меню слева выберите Все службы. Снимок экрана: выбор всех служб для существующего пространства имен.

  3. Введите центры уведомлений в текстовом поле " Службы фильтрации". Щелкните значок звездочки рядом с именем службы, чтобы добавить ее в раздел Избранное в меню слева. Выберите Центры уведомлений.

    Снимок экрана: фильтрация по центрам уведомлений.

  4. На странице Центры уведомлений выберите Добавить на панели инструментов.

    Снимок экрана: создание нового концентратора уведомлений.

  5. На вкладке Основные сведения на странице Центр уведомлений выполните следующие действия:

    1. В поле Подписка выберите имя подписки Azure, которую вы хотите использовать, а затем выберите существующую группу ресурсов или создайте новую.

    2. Введите уникальное имя нового пространства имен в разделе Сведения о пространстве имен.

    3. Пространство имен содержит один или несколько концентраторов уведомлений, поэтому укажите имя концентратора в разделе Сведения о Центре уведомлений.

    4. Выберите значение в раскрывающемся списке Расположение. Это значение определяет расположение, в котором создается центр.

      Снимок экрана: сведения о центре уведомлений.

    5. Просмотрите параметр Зоны доступности. Если вы выбрали регион с зонами доступности, установите флажок по умолчанию. Зоны доступности является платной функцией, поэтому дополнительная плата добавляется на ваш уровень.

    6. Выберите вариант аварийного восстановления: Нет, парный регион восстановления или гибкий регион восстановления. При выборе парного региона восстановления отображается регион отработки отказа. Если выбрать гибкий регион восстановления, используйте раскрывающийся список регионов восстановления.

      Снимок экрана: сведения о зоне доступности.

    7. Нажмите кнопку создания.

  6. После завершения развертывания выберите "Перейти к ресурсу".

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

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

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

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

    Снимок экрана: концентратор уведомлений на портале Azure с выделенным и обведенным красным параметром Google (GCM/FCM)

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

Создание приложения 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. Обновите имя пакета в соответствии с именем пакета, которое вы указали при добавлении Firebase Cloud Messaging в проект в консоли Google Firebase.

    Имя пакета в 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 в списке результатов. Щелкните Установить.

      Пакет NuGet для сервисов Google Play

    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

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

Регистрация в 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 — тестовая отправка

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

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

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