Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Настройка клиентского приложения Firebase Cloud Messaging на Android

Чтобы написать клиентское приложение Firebase Cloud Messaging для Android, используйте FirebaseMessaging API и Android Studio 1.4 или выше с Gradle. В инструкциях на этой странице предполагается, что вы выполнили шаги по добавлению Firebase в свой проект Android .

Для клиентов FCM требуются устройства под управлением Android 4.1 или выше, на которых также установлено приложение Google Play Store, или эмулятор под управлением Android 4.1 с API Google. Обратите внимание, что вы не ограничены развертыванием приложений Android через Google Play Store.

Настроить SDK

В этом разделе описаны задачи, которые вы, возможно, выполнили, если вы уже включили другие функции Firebase для своего приложения.

Прежде чем вы начнете

  • Установите или обновите Android Studio до последней версии.

  • Убедитесь, что ваш проект соответствует этим требованиям:

    • Целевой уровень API 16 (Jelly Bean) или более поздний
    • Использует Gradle 4.1 или новее
    • Использует Jetpack (AndroidX) , который включает следующие требования к версии:
      • com.android.tools.build:gradle v3.2.1 или новее
      • compileSdkVersion 28 или новее
  • Настройте физическое устройство или используйте эмулятор для запуска приложения.
    Эмуляторы должны использовать образ эмулятора с Google Play.

  • Войдите в Firebase, используя свою учетную запись Google.

Если у вас еще нет проекта Android и вы просто хотите опробовать продукт Firebase, вы можете загрузить один из наших примеров быстрого запуска .

Создать проект Firebase

Прежде чем вы сможете добавить Firebase в свое приложение Android, вам необходимо создать проект Firebase для подключения к вашему приложению Android. Посетите Understand Firebase Projects, чтобы узнать больше о проектах Firebase.

Зарегистрируйте свое приложение в Firebase

Создав проект Firebase, вы можете добавить в него свое приложение для Android.

Посетите Understand Firebase Projects, чтобы узнать больше о передовых методах и рекомендациях по добавлению приложений в проект Firebase, в том числе о том, как обрабатывать несколько вариантов сборки.

  1. Зайдите в консоль Firebase .

  2. В центре страницы обзора проекта щелкните значок Android ( ), чтобы запустить рабочий процесс установки.

    Если вы уже добавили приложение в свой проект Firebase, нажмите « Добавить приложение», чтобы отобразить параметры платформы.

  3. Введите имя пакета вашего приложения в поле имени пакета Android .

  4. (Необязательно) Введите другую информацию о приложении: псевдоним приложения и сертификат подписи отладки SHA-1 .

  5. Щелкните Зарегистрировать приложение .

Добавьте файл конфигурации Firebase

  1. Добавьте в приложение файл конфигурации Firebase Android:

    1. Нажмите Загрузить google-services.json, чтобы получить файл конфигурации Firebase Android ( google-services.json ).

    2. Переместите файл конфигурации в каталог модуля (уровня приложения) вашего приложения.

  2. Чтобы включить продукты Firebase в своем приложении, добавьте плагин google-services в свои файлы Gradle.

    1. В файле Gradle корневого уровня (уровня проекта) ( build.gradle ) добавьте правила для включения подключаемого модуля Gradle служб Google. Убедитесь, что у вас есть репозиторий Google Maven.

      buildscript {
      
        repositories {
          // Check that you have the following line (if not, add it):
          google()  // Google's Maven repository
        }
      
        dependencies {
          // ...
      
          // Add the following line:
          classpath 'com.google.gms:google-services:4.3.3'  // Google Services plugin
        }
      }
      
      allprojects {
        // ...
      
        repositories {
          // Check that you have the following line (if not, add it):
          google()  // Google's Maven repository
          // ...
        }
      }
      
    2. В вашем модуле (уровне приложения) файле Gradle (обычно app/build.gradle ) примените плагин Google Services Gradle:

      apply plugin: 'com.android.application'
      // Add the following line:
      apply plugin: 'com.google.gms.google-services'  // Google Services plugin
      
      android {
        // ...
      }
      

Добавьте SDK Firebase в свое приложение

  1. В файл Gradle вашего модуля (уровня приложения) (обычно app/build.gradle ) добавьте зависимости для продуктов Firebase, которые вы хотите использовать в своем приложении.

    Вы можете добавить в свое приложение Android любой из поддерживаемых продуктов Firebase .

    Для оптимальной работы с Firebase Cloud Messaging мы рекомендуем включить Google Analytics в вашем проекте. Кроме того, в рамках настройки Google Analytics вам необходимо добавить в приложение Firebase SDK для Analytics.

    Аналитика включена

    dependencies {
      // ...
    // Add the Firebase SDK for Google Analytics implementation 'com.google.firebase:firebase-analytics:17.5.0'
    // Add the SDK for Firebase Cloud Messaging implementation 'com.google.firebase:firebase-messaging:20.2.4'
    // Getting a "Could not find" error? Make sure that you've added // Google's Maven repository to your root-level build.gradle file }

    Аналитика не включена

    dependencies {
      // ...
    // Add the SDK for Firebase Cloud Messaging implementation 'com.google.firebase:firebase-messaging:20.2.4'
    // Getting a "Could not find" error? Make sure that you've added // Google's Maven repository to your root-level build.gradle file }
  2. Синхронизируйте свое приложение, чтобы убедиться, что все зависимости имеют необходимые версии.

  3. Если вы добавили Google Analytics, запустите приложение, чтобы отправить в Firebase подтверждение того, что вы успешно интегрировали Firebase. В противном случае вы можете пропустить этап проверки.

    В журналах вашего устройства будет отображаться подтверждение Firebase, что инициализация завершена. Если вы запустили свое приложение на эмуляторе, имеющем доступ к сети, консоль Firebase уведомит вас о том, что подключение вашего приложения завершено.

Отредактируйте манифест приложения

Добавьте в манифест приложения следующее:

  • Служба, расширяющая FirebaseMessagingService . Это необходимо, если вы хотите выполнять какие-либо операции с сообщениями, помимо получения уведомлений в приложениях в фоновом режиме. Чтобы получать уведомления в приоритетных приложениях, получать полезные данные, отправлять восходящие сообщения и т. Д., Вы должны расширить эту службу.
  • <service
        android:name=".java.MyFirebaseMessagingService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
  • (Необязательно) Внутри компонента приложения элементы метаданных для установки значка и цвета уведомления по умолчанию. Android использует эти значения всякий раз, когда для входящих сообщений явно не указывается значок или цвет.
  • <!-- Set custom default icon. This is used when no icon is set for incoming notification messages.
         See README(https://goo.gl/l4GJaQ) for more. -->
    <meta-data
        android:name="com.google.firebase.messaging.default_notification_icon"
        android:resource="@drawable/ic_stat_ic_notification" />
    <!-- Set color used with incoming notification messages. This is used when no color is set for the incoming
         notification message. See README(https://goo.gl/6BKBk7) for more. -->
    <meta-data
        android:name="com.google.firebase.messaging.default_notification_color"
        android:resource="@color/colorAccent" />
  • (Необязательно) Начиная с Android 8.0 (уровень API 26) и выше, каналы уведомлений поддерживаются и рекомендуются. FCM предоставляет канал уведомлений по умолчанию с базовыми настройками. Если вы предпочитаете создать и использовать свой собственный канал по умолчанию, установите default_notification_channel_id идентификатору объекта вашего канала уведомлений, как показано; FCM будет использовать это значение всякий раз, когда входящие сообщения явно не устанавливают канал уведомления. Чтобы узнать больше, см. Управление каналами уведомлений .
  • <meta-data
        android:name="com.google.firebase.messaging.default_notification_channel_id"
        android:value="@string/default_notification_channel_id" />

Доступ к токену регистрации устройства

При первоначальном запуске вашего приложения FCM SDK генерирует регистрационный токен для экземпляра клиентского приложения. Если вы хотите настроить таргетинг на отдельные устройства или создать группы устройств, вам потребуется получить доступ к этому токену, расширив FirebaseMessagingService и переопределив onNewToken .

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

Токен регистрации может измениться, когда:

  • Приложение удаляет идентификатор экземпляра
  • Приложение восстановлено на новом устройстве
  • Пользователь удаляет / переустанавливает приложение
  • Пользователь очищает данные приложения.

Получить текущий регистрационный токен

Когда вам нужно получить текущий токен, вызовите FirebaseInstanceId.getInstance().getInstanceId() :

Ява

FirebaseInstanceId.getInstance().getInstanceId()
        .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
            @Override
            public void onComplete(@NonNull Task<InstanceIdResult> task) {
                if (!task.isSuccessful()) {
                    Log.w(TAG, "getInstanceId failed", task.getException());
                    return;
                }

                // Get new Instance ID token
                String token = task.getResult().getToken();

                // Log and toast
                String msg = getString(R.string.msg_token_fmt, token);
                Log.d(TAG, msg);
                Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
            }
        });

Котлин + KTX

FirebaseInstanceId.getInstance().instanceId
        .addOnCompleteListener(OnCompleteListener { task ->
            if (!task.isSuccessful) {
                Log.w(TAG, "getInstanceId failed", task.exception)
                return@OnCompleteListener
            }

            // Get new Instance ID token
            val token = task.result?.token

            // Log and toast
            val msg = getString(R.string.msg_token_fmt, token)
            Log.d(TAG, msg)
            Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
        })

Мониторинг генерации токенов

onNewToken вызов onNewToken срабатывает всякий раз, когда создается новый токен.

Ява

/**
 * Called if InstanceID token is updated. This may occur if the security of
 * the previous token had been compromised. Note that this is called when the InstanceID token
 * is initially generated so this is where you would retrieve the token.
 */
@Override
public void onNewToken(String token) {
    Log.d(TAG, "Refreshed token: " + token);

    // If you want to send messages to this application instance or
    // manage this apps subscriptions on the server side, send the
    // Instance ID token to your app server.
    sendRegistrationToServer(token);
}

Котлин + KTX

/**
 * Called if InstanceID token is updated. This may occur if the security of
 * the previous token had been compromised. Note that this is called when the InstanceID token
 * is initially generated so this is where you would retrieve the token.
 */
override fun onNewToken(token: String) {
    Log.d(TAG, "Refreshed token: $token")

    // If you want to send messages to this application instance or
    // manage this apps subscriptions on the server side, send the
    // Instance ID token to your app server.
    sendRegistrationToServer(token)
}

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

Проверить сервисы Google Play

Приложения, которые полагаются на SDK Play Services, должны всегда проверять устройство на наличие совместимого APK-файла служб Google Play перед доступом к функциям служб Google Play. Рекомендуется делать это в двух местах: в onCreate() основного действия и в его onResume() . Проверка onCreate() гарантирует, что приложение не может быть использовано без успешной проверки. Проверка в onResume() гарантирует, что если пользователь вернется в работающее приложение с помощью других средств, например, с помощью кнопки «Назад», проверка все равно будет выполняться.

Если на устройстве нет совместимой версии сервисов Google Play, ваше приложение может вызвать GoogleApiAvailability.makeGooglePlayServicesAvailable() чтобы пользователи могли загружать сервисы Google Play из Play Store.

Запретить автоматическую инициализацию

Firebase генерирует идентификатор экземпляра, который FCM использует для создания токена регистрации, а Google Analytics - для сбора данных. Когда создается идентификатор экземпляра, библиотека загружает идентификатор и данные конфигурации в Firebase. Если вы предпочитаете запретить автогенерацию идентификатора экземпляра, отключите автоматическую инициализацию для FCM и Analytics (вы должны отключить оба), добавив эти значения метаданных в свой AndroidManifest.xml :

<meta-data
    android:name="firebase_messaging_auto_init_enabled"
    android:value="false" />
<meta-data
    android:name="firebase_analytics_collection_enabled"
    android:value="false" />

Чтобы снова включить FCM, выполните вызов времени выполнения:

Ява

FirebaseMessaging.getInstance().setAutoInitEnabled(true);

Котлин + KTX

FirebaseMessaging.getInstance().isAutoInitEnabled = true

Это значение сохраняется после перезапуска приложения.

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

После того, как клиентское приложение настроено, вы готовы начать отправку нисходящих сообщений с помощью композитора уведомлений . Эта функциональность продемонстрирована в образце быстрого запуска, который вы можете загрузить, запустить и просмотреть.

Чтобы добавить в приложение другое, более продвинутое поведение, вы можете объявить фильтр намерений и реализовать действие для ответа на входящие сообщения. Подробнее см. В руководствах по отправке сообщений с сервера приложений:

Имейте в виду, что для того, чтобы воспользоваться этими функциями, вам потребуется реализация сервера и протоколы сервера (HTTP или XMPP) или реализация Admin SDK .