Google стремится продвигать расовую справедливость для черных сообществ. Смотри как.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

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

Чтобы написать клиентское приложение Firebase Cloud Messaging для Android, используйте API FirebaseMessaging и 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 или более поздняя compileSdkVersion
  • Настройте физическое устройство или используйте эмулятор для запуска вашего приложения.
    Эмуляторы должны использовать изображение эмулятора с Google Play.

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

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

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

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

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

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

Посетите раздел «Понимание проектов Firebase», чтобы узнать больше о передовых методах и соображениях по добавлению приложений в проект 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 ) добавьте правила, чтобы включить плагин Google Services Gradle. Убедитесь, что у вас есть репозиторий 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 {
        // ...
      }
      

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

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

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

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

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

    dependencies {
      // ...
    // Add the Firebase SDK for Google Analytics implementation 'com.google.firebase:firebase-analytics:17.4.4'
    // 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. Если вы добавили 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

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

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

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

Firebase генерирует ID экземпляра, который FCM использует для создания токена регистрации, а Analytics использует для сбора данных. Когда ID экземпляра сгенерирован, библиотека загрузит идентификатор и данные конфигурации в 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 .