Руководство по отправке push-уведомлений на устройства Android с помощью Firebase SDK версии 0.6

В этом руководстве показано, как использовать Центры уведомлений Azure и Firebase Cloud Messaging (FCM) SDK версии 0.6 для отправки push-уведомлений в приложение на платформе Android. Следуя инструкциям этого руководства, вы создадите пустое приложение Android, которое получает push-уведомления с помощью Firebase Cloud Messaging.

Полный код для этого руководства можно скачать на сайте GitHub.

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

  • Создание проекта Android Studio.
  • Создание проекта Firebase с поддержкой Firebase Cloud Messaging.
  • Создание концентратора.
  • Подключение своего приложения к концентратору.
  • Тестирование приложения.

Предварительные требования

Для работы с этим учебником необходима активная учетная запись Azure. Если ее нет, можно создать бесплатную пробную учетную запись всего за несколько минут. Дополнительные сведения см. в разделе Бесплатная пробная версия Azure.

Вам также понадобятся следующее.

  • Последняя версия Android Studio.
  • Android версии 2.3 или более поздней.
  • Репозиторий Google версии 27 или более поздней.
  • Службы Google Play версии 9.0.2 или более поздней.

Завершение изучения этого учебника является необходимым условием для работы со всеми другими учебниками, посвященными Центрам уведомлений для приложений Android.

Создание проекта Android Studio

  1. Запустите Android Studio.
  2. В меню выберите File (Файл), New (Создать), а затем — New Project (Создать проект).
  3. На странице Choose your project (Выбор проекта) выберите Empty Activity (Пустое действие) и щелкните Далее.
  4. На странице Configure your project (Настройка проекта) выполните следующие действия.
    1. Введите имя приложения.

    2. Укажите расположение для сохранения файлов проекта.

    3. Нажмите кнопку Готово.

      Настройка проекта

Создание проекта Firebase с поддержкой FCM

  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 скопируйте свое значение applicationId в файл приложения build.gradle. В нашем примере он выглядит следующим образом: com.fabrikam.fcmtutorial1app.

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

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

  4. Выберите Download google-services.json (Загрузить google-services.json), сохраните файл в папку приложения проекта, а затем выберите Далее.

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

  5. Внесите следующие изменения конфигурации в проект в Android Studio.

    1. В файл build.gradle уровня проекта (<project>/build.gradle) добавьте следующий текст в раздел зависимости.

      classpath 'com.google.gms:google-services:4.0.1'
      
    2. В файле build.gradle уровня приложения (<project>/<app-module>/build.gradle) в раздел зависимостей добавьте следующий текст.

      implementation 'com.google.firebase:firebase-core:16.0.8'
      implementation 'com.google.firebase:firebase-messaging:17.3.4'
      
    3. Добавьте следующую строку в конец файла build.gradle уровня приложения после раздела с зависимостями.

      apply plugin: 'com.google.gms.google-services'
      
    4. На панели инструментов щелкните Синхронизировать сейчас.

      Изменения конфигурации build.gradle.

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

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

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

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

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

  9. Если вы еще не скачали файл google-services.json в папку app проекта Android Studio, это можно сделать на этой странице.

  10. Переключитесь на вкладку Обмен сообщениями в облаке в верхней части.

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

  12. Если ключ сервера не отображается на вкладке Firebase Cloud Messaging, выполните следующие дополнительные действия.

    1. Щелкните меню с тремя точками заголовка "Api обмена сообщениями (устаревшая версия) 🚫 "
    2. Перейдите по предлагаемой ссылке на "Управление API в Google Cloud Console".
    3. В google cloud console нажмите кнопку, чтобы включить API googlecloudmessaging.
    4. Подождите несколько минут.
    5. Назад на вкладку проекта консоли firebase Cloud Messaging и обновите страницу.
    6. Обратитесь к тому, что заголовок API cloud Messaging изменен на "Api обмена сообщениями (устаревшая версия) ✅ включен" и теперь отображает ключ сервера.

    Снимок экрана: вкладка Enable Cloud Messaging API (Legacy) (Включить API обмена сообщениями в облаке (устаревшая версия).

Настройка концентратора

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

  2. Выберите Все службы в меню слева и щелкните Центры уведомлений в разделе Мобильный. Щелкните значок звездочки рядом с именем службы, чтобы добавить ее в раздел Избранное в меню слева. После добавления Центров уведомлений в Избранное выберите их в меню слева.

    Портал Azure. Выбор Центров уведомлений

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

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

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

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

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

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

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

    5. Нажмите кнопку Создать.

      Портал Azure: настройка свойств концентратора уведомлений

  5. Последовательно выберите Уведомления (значок колокольчика) и Перейти к ресурсу. Вы также можете обновить список на странице Центры уведомлений и выбрать свой центр.

    Портал Azure: кнопка

  6. Выберите Политики доступа в списке. Обратите внимание, что станут доступны две строки подключения. Они потребуются позже для обработки push-уведомлений.

    Важно!

    Не используйте в приложении политику DefaultFullSharedAccessSignature. Этот параметр можно использовать только в серверной части.

    Портал Azure: строки подключения к концентратору уведомлений

Настройка параметров Firebase Cloud Messaging для центра

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

  2. Введите ключ сервера для проекта FCM, сохраненного ранее.

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

    Центры уведомлений Azure в Google (FCM)

  4. Портал Azure отображает предупреждения о том, что концентратор был успешно обновлен. Кнопка Сохранить отключена.

Теперь ваша служба настроена для работы с Firebase Cloud Messaging. У вас также есть строки подключения, которые необходимы для отправки уведомлений на устройство и регистрации приложения для получения уведомлений.

Подключение приложения к центру уведомлений

Добавление служб Google Play в проект

  1. В Android Studio в меню выберите Средства, а затем — Диспетчер пакетов SDK.

  2. Выберите целевую версию пакета SDK для Android, который используется в проекте. Затем выберите Show Package Details (Показать сведения о пакете).

    Диспетчер пакетов SDK Android: выбор целевой версии

  3. Выберите Google APIs (API-интерфейсы Google), если они еще не установлены.

    Диспетчер пакетов SDK для Android с выбранными API-интерфейсами Google

  4. Переключитесь на вкладку SDK Tools. Если сервисы Google Play еще не установлены, щелкните Сервисы Google Play, как показано на рисунке ниже. Затем выберите Применить для установки. Запишите путь к пакету SDK. Он вам потребуется в дальнейшем.

    Диспетчер пакетов SDK для Android с выбранными Сервисами Google Play

  5. Если вы видите диалоговое окно Подтвердить изменение, выберите ОК. Установщик компонентов устанавливает запрошенные компоненты. После установки компонентов выберите Готово.

  6. Выберите ОК, чтобы закрыть диалоговое окно Settings for New Projects (Параметры для новых проектов).

  7. Откройте файл AndroidManifest.xml, а затем добавьте следующий тег для тега приложения.

    <meta-data android:name="com.google.android.gms.version"
         android:value="@integer/google_play_services_version" />
    

Затем добавьте библиотеки Центров уведомлений Azure.

  1. В файле Build.Gradle для приложений добавьте следующие строки в раздел dependencies.

    implementation 'com.microsoft.azure:notification-hubs-android-sdk:0.6@aar'
    
  2. После раздела dependencies добавьте следующий репозиторий.

    repositories {
        maven {
            url "https://dl.bintray.com/microsoftazuremobile/SDK"
        }
    }
    

Добавление поддержки Google Firebase

  1. В файле Build.Gradle для приложения добавьте следующие строки в раздел dependencies, если они еще не существуют.

    implementation 'com.google.firebase:firebase-core:16.0.8'
    implementation 'com.google.firebase:firebase-messaging:17.3.4'
    implementation 'com.google.firebase:firebase-iid:21.1.0'
    
  2. Добавьте следующий подключаемый модуль в конце файла, если он еще не выбран.

    apply plugin: 'com.google.gms.google-services'
    
  3. На панели инструментов щелкните Синхронизировать сейчас.

Обновите файл AndroidManifest.xml

  1. После получения маркера регистрации в FCM используйте его для регистрации в Центрах уведомлений Azure. Регистрация в фоновом режиме выполняется с помощью службы IntentService с именем RegistrationIntentService. Эта служба также обновит ваш маркер регистрации FCM. Также создается класс с именем FirebaseService в качестве подкласса FirebaseMessagingService и переопределяется метод onMessageReceived для получения и обработки уведомлений.

    Добавьте приведенное ниже определение службы внутри тега <application> в файле AndroidManifest.xml.

    <service
        android:name=".RegistrationIntentService"
        android:exported="false">
    </service>
    <service
        android:name=".FirebaseService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    
  2. Добавьте следующие разрешения, связанные с FCM, под тегом </application>.

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    

Добавление кода

  1. В представлении проекта разверните узел app>src>main>java. Щелкните правой кнопкой мыши папку своего пакета в разделе java, выберите New (Создать), а затем выберите класс Java. Укажите NotificationSettings для имени, а затем нажмите кнопку ОК.

    Обязательно обновите эти два заполнителя в следующем коде для класса NotificationSettings:

    • HubListenConnectionString — укажите для центра строку подключения DefaultListenAccessSignature. Чтобы скопировать эту строку подключения, щелкните пункт Политики доступа в своем центре на Портал Azure.

    • HubName: Используйте имя своего концентратора, которое отображается на странице концентратора на Портал Azure.

      NotificationSettings :

      public class NotificationSettings {
          public static String HubName = "<Your HubName>";
          public static String HubListenConnectionString = "<Enter your DefaultListenSharedAccessSignature connection string>";
      }
      

      Важно!

      Прежде чем продолжить, введите имя и DefaultListenSharedAccessSignature вашего концентратора.

  2. Добавьте еще один новый класс в проект RegistrationIntentService. Этот класс реализует интерфейс IntentService. Он также выполняет обновление маркера FCM и регистрацию в центре уведомлений.

    Используйте для этого класса следующий код:

    import android.app.IntentService;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.preference.PreferenceManager;
    import android.util.Log;
    import com.google.android.gms.tasks.OnSuccessListener;
    import com.google.firebase.iid.FirebaseInstanceId;
    import com.google.firebase.iid.InstanceIdResult;
    import com.microsoft.windowsazure.messaging.NotificationHub;
    import java.util.concurrent.TimeUnit;
    
    public class RegistrationIntentService extends IntentService {
    
        private static final String TAG = "RegIntentService";
        String FCM_token = null;
    
        private NotificationHub hub;
    
        public RegistrationIntentService() {
            super(TAG);
        }
    
        @Override
        protected void onHandleIntent(Intent intent) {
    
            SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
            String resultString = null;
            String regID = null;
            String storedToken = null;
    
            try {
                FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(new OnSuccessListener<InstanceIdResult>() { 
                    @Override 
                    public void onSuccess(InstanceIdResult instanceIdResult) { 
                        FCM_token = instanceIdResult.getToken(); 
                        Log.d(TAG, "FCM Registration Token: " + FCM_token); 
                    } 
                }); 
                TimeUnit.SECONDS.sleep(1);
    
                // Storing the registration ID that indicates whether the generated token has been
                // sent to your server. If it is not stored, send the token to your server.
                // Otherwise, your server should have already received the token.
                if (((regID=sharedPreferences.getString("registrationID", null)) == null)){
    
                    NotificationHub hub = new NotificationHub(NotificationSettings.HubName,
                            NotificationSettings.HubListenConnectionString, this);
                    Log.d(TAG, "Attempting a new registration with NH using FCM token : " + FCM_token);
                    regID = hub.register(FCM_token).getRegistrationId();
    
                    // If you want to use tags...
                    // Refer to : https://azure.microsoft.com/documentation/articles/notification-hubs-routing-tag-expressions/
                    // regID = hub.register(token, "tag1,tag2").getRegistrationId();
    
                    resultString = "New NH Registration Successfully - RegId : " + regID;
                    Log.d(TAG, resultString);
    
                    sharedPreferences.edit().putString("registrationID", regID ).apply();
                    sharedPreferences.edit().putString("FCMtoken", FCM_token ).apply();
                }
    
                // Check to see if the token has been compromised and needs refreshing.
               else if (!(storedToken = sharedPreferences.getString("FCMtoken", "")).equals(FCM_token)) {
    
                    NotificationHub hub = new NotificationHub(NotificationSettings.HubName,
                            NotificationSettings.HubListenConnectionString, this);
                    Log.d(TAG, "NH Registration refreshing with token : " + FCM_token);
                    regID = hub.register(FCM_token).getRegistrationId();
    
                    // If you want to use tags...
                    // Refer to : https://azure.microsoft.com/documentation/articles/notification-hubs-routing-tag-expressions/
                    // regID = hub.register(token, "tag1,tag2").getRegistrationId();
    
                    resultString = "New NH Registration Successfully - RegId : " + regID;
                    Log.d(TAG, resultString);
    
                    sharedPreferences.edit().putString("registrationID", regID ).apply();
                    sharedPreferences.edit().putString("FCMtoken", FCM_token ).apply();
                }
    
                else {
                    resultString = "Previously Registered Successfully - RegId : " + regID;
                }
            } catch (Exception e) {
                Log.e(TAG, resultString="Failed to complete registration", e);
                // If an exception happens while fetching the new token or updating registration data
                // on a third-party server, this ensures that we'll attempt the update at a later time.
            }
    
            // Notify UI that registration has completed.
            if (MainActivity.isVisible) {
                MainActivity.mainActivity.ToastNotify(resultString);
            }
        }
    }
    
  3. В классе MainActivity добавьте следующие операторы import выше объявления класса.

    import com.google.android.gms.common.ConnectionResult;
    import com.google.android.gms.common.GoogleApiAvailability;
    import android.content.Intent;
    import android.util.Log;
    import android.widget.TextView;
    import android.widget.Toast;
    
  4. Добавьте следующие элементы в верхней части класса. Используйте эти поля для проверки доступности служб Google Play в соответствии с рекомендациями Google.

    public static MainActivity mainActivity;
    public static Boolean isVisible = false;
    private static final String TAG = "MainActivity";
    private static final int PLAY_SERVICES_RESOLUTION_REQUEST = 9000;
    
  5. В классе MainActivity добавьте следующий метод проверки доступности сервисов Google Play.

    /**
    * Check the device to make sure it has the Google Play Services APK. If
    * it doesn't, display a dialog box that enables  users to download the APK from
    * the Google Play Store or enable it in the device's system settings.
    */
    
    private boolean checkPlayServices() {
        GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance();
        int resultCode = apiAvailability.isGooglePlayServicesAvailable(this);
        if (resultCode != ConnectionResult.SUCCESS) {
            if (apiAvailability.isUserResolvableError(resultCode)) {
                apiAvailability.getErrorDialog(this, resultCode, PLAY_SERVICES_RESOLUTION_REQUEST)
                        .show();
            } else {
                Log.i(TAG, "This device is not supported by Google Play Services.");
                ToastNotify("This device is not supported by Google Play Services.");
                finish();
            }
            return false;
        }
        return true;
    }
    
  6. В классе MainActivity добавьте следующий код, который проверяет сервисы Google Play, прежде чем вызывать IntentService. Таким образом вы получите маркер регистрации в FCM и выполните регистрацию в своем центре.

    public void registerWithNotificationHubs()
    {
        if (checkPlayServices()) {
            // Start IntentService to register this application with FCM.
            Intent intent = new Intent(this, RegistrationIntentService.class);
            startService(intent);
        }
    }
    
  7. В методе OnCreate класса MainActivity добавьте следующий код, чтобы начать регистрацию при создании действия.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        mainActivity = this;
        registerWithNotificationHubs();
        FirebaseService.createChannelAndHandleNotifications(getApplicationContext());
    }
    
  8. Добавьте эти дополнительные методы в класс MainActivity, чтобы проверять состояние приложения и отображать в нем полученные данные.

    @Override
    protected void onStart() {
        super.onStart();
        isVisible = true;
    }
    
    @Override
    protected void onPause() {
        super.onPause();
        isVisible = false;
    }
    
    @Override
    protected void onResume() {
        super.onResume();
        isVisible = true;
    }
    
    @Override
    protected void onStop() {
        super.onStop();
        isVisible = false;
    }
    
    public void ToastNotify(final String notificationMessage) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(MainActivity.this, notificationMessage, Toast.LENGTH_LONG).show();
                TextView helloText = (TextView) findViewById(R.id.text_hello);
                helloText.setText(notificationMessage);
            }
        });
    }
    
  9. Метод ToastNotify использует элемент управления TextViewHello World, чтобы постоянно передавать в приложение сведения о состоянии и уведомления. В файле макета res>layout>activity_main.xml добавьте следующий идентификатор для этого элемента управления.

    android:id="@+id/text_hello"
    

    Снимок экрана: идентификатор android:id=

  10. Затем добавьте подкласс для получателя, определенного в AndroidManifest.xml. Добавьте еще один новый класс в проект FirebaseService.

  11. Добавьте в начало файла FirebaseService.java следующие операторы импорта:

    import com.google.firebase.messaging.FirebaseMessagingService;
    import com.google.firebase.messaging.RemoteMessage;
    import android.util.Log;
    import android.app.NotificationChannel;
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.content.Context;
    import android.content.Intent;
    import android.media.RingtoneManager;
    import android.net.Uri;
    import android.os.Build;
    import android.os.Bundle;
    import androidx.core.app.NotificationCompat;
    
  12. Добавьте в класс FirebaseService следующий код, чтобы сделать его подклассом класса FirebaseMessagingService.

    Этот код переопределяет метод onMessageReceived и сообщает о полученных уведомлениях. Кроме того, он отправляет push-уведомление в диспетчер уведомлений Android с помощью метода sendNotification(). Вызовите метод sendNotification(), если получено уведомление, а приложение не запущено.

    public class FirebaseService extends FirebaseMessagingService
    {
        private String TAG = "FirebaseService";
    
        public static final String NOTIFICATION_CHANNEL_ID = "nh-demo-channel-id";
        public static final String NOTIFICATION_CHANNEL_NAME = "Notification Hubs Demo Channel";
        public static final String NOTIFICATION_CHANNEL_DESCRIPTION = "Notification Hubs Demo Channel";
    
        public static final int NOTIFICATION_ID = 1;
        private NotificationManager mNotificationManager;
        NotificationCompat.Builder builder;
        static Context ctx;
    
        @Override
        public void onMessageReceived(RemoteMessage remoteMessage) {
            // ...
    
            // TODO(developer): Handle FCM messages here.
            // Not getting messages here? See why this may be: https://goo.gl/39bRNJ
            Log.d(TAG, "From: " + remoteMessage.getFrom());
    
            String nhMessage;
            // Check if message contains a notification payload.
            if (remoteMessage.getNotification() != null) {
                Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
    
                nhMessage = remoteMessage.getNotification().getBody();
            }
            else {
                nhMessage = remoteMessage.getData().values().iterator().next();
            }
    
            // Also if you intend on generating your own notifications as a result of a received FCM
            // message, here is where that should be initiated. See sendNotification method below.
            if (MainActivity.isVisible) {
                MainActivity.mainActivity.ToastNotify(nhMessage);
            }
            sendNotification(nhMessage);
        }
    
        private void sendNotification(String msg) {
    
            Intent intent = new Intent(ctx, MainActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    
            mNotificationManager = (NotificationManager)
                    ctx.getSystemService(Context.NOTIFICATION_SERVICE);
    
            PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0,
                    intent, PendingIntent.FLAG_ONE_SHOT);
    
            Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
            NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(
                    ctx,
                    NOTIFICATION_CHANNEL_ID)
                    .setContentText(msg)
                    .setPriority(NotificationCompat.PRIORITY_HIGH)
                    .setSmallIcon(android.R.drawable.ic_popup_reminder)
                    .setBadgeIconType(NotificationCompat.BADGE_ICON_SMALL);
    
            notificationBuilder.setContentIntent(contentIntent);
            mNotificationManager.notify(NOTIFICATION_ID, notificationBuilder.build());
        }
    
        public static void createChannelAndHandleNotifications(Context context) {
            ctx = context;
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                NotificationChannel channel = new NotificationChannel(
                        NOTIFICATION_CHANNEL_ID,
                        NOTIFICATION_CHANNEL_NAME,
                        NotificationManager.IMPORTANCE_HIGH);
                channel.setDescription(NOTIFICATION_CHANNEL_DESCRIPTION);
                channel.setShowBadge(true);
    
                NotificationManager notificationManager = context.getSystemService(NotificationManager.class);
                notificationManager.createNotificationChannel(channel);
             }
        }
    }
    
  13. В Android Studio в строке меню выберите Build>Rebuild Project (Сборка > Пересобрать проект) чтобы убедиться, что в вашем коде нет ошибок. Если появляется сообщение об ошибке о значке ic_launcher, удалите следующую инструкцию из файла AndroidManifest.xml.

        android:icon="@mipmap/ic_launcher"
    
  14. Убедитесь, что у вас есть виртуальное устройство для запуска приложения. Если его нет, добавьте его следующим образом:

    1. Запуск диспетчера устройств
    2. Создание виртуального устройства
  15. Запустите приложение на выбранном устройстве и убедитесь, что оно успешно зарегистрировано в концентраторе.

    Примечание

    Во время первоначального запуска регистрация может завершиться неудачно, пока не будет вызван метод onTokenRefresh() службы ИД экземпляра. Чтобы заново начать регистрацию в центре уведомлений, обновите страницу.

    Устройство успешно зарегистрировано

Проверка отправки уведомления из центра уведомлений

Push-уведомления с Портал Azure можно отправить, выполнив следующие действия.

  1. На портале Azure на странице "Цента уведомлений" для своего центра выберите Тестовая отправка в разделе Устранение неполадок.

  2. В качестве платформы выберите Android.

  3. Нажмите кнопку Отправить. Вы пока не увидите уведомление на устройстве Android, потому что на нем еще не запущено мобильное приложение. После запуска мобильного приложения нажмите еще раз кнопку Send (Отправить), чтобы просмотреть уведомление.

  4. Результат операции можно увидеть в списке внизу.

    Центры уведомлений Azure — тестовая отправка

  5. Вы увидите сообщение уведомления на своем устройстве.

    Сообщение уведомления на устройстве

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

Ниже приведен список других учебников, касающихся отправки уведомлений:

Запуск мобильного приложения в эмуляторе

Перед проверкой отправки push-уведомлений в эмуляторе, убедитесь, что образ эмулятора поддерживает уровень API Google, выбранный для приложения. Если образ не поддерживает собственные API-интерфейсы Google, создается исключение SERVICE_NOT_AVAILABLE.

Кроме того, добавьте учетную запись Google в запущенный эмулятор. Для этого щелкните Settings (Параметры)>Accounts (Учетные записи). В противном случае попытки регистрации в FCM могут привести к исключению AUTHENTICATION_FAILED.

Дальнейшие действия

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