Google 致力于为黑人社区推动种族平等。查看具体举措
Эта страница была переведа с помощью 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, вам необходимо зарегистрировать свое приложение в своем проекте Firebase. Регистрация вашего приложения часто называется «добавлением» вашего приложения в проект.

  1. Перейдите в консоль Firebase .

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

  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.4'  // 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 ) примените плагин Gradle служб Google:

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

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

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

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

    Ява

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:26.1.0')
    
        // Declare the dependencies for the Firebase Cloud Messaging and Analytics libraries
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-messaging'
        implementation 'com.google.firebase:firebase-analytics'
    }
    

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

    (Альтернатива) Объявить зависимости библиотеки Firebase без использования BoM

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

    Обратите внимание: если вы используете несколько библиотек Firebase в своем приложении, мы настоятельно рекомендуем использовать BoM для управления версиями библиотек, что гарантирует совместимость всех версий.

    dependencies {
        // Declare the dependencies for the Firebase Cloud Messaging and Analytics libraries
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-messaging:21.0.0'
        implementation 'com.google.firebase:firebase-analytics:18.0.0'
    }
    

    Котлин + KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:26.1.0')
    
        // Declare the dependencies for the Firebase Cloud Messaging and Analytics libraries
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-messaging-ktx'
        implementation 'com.google.firebase:firebase-analytics-ktx'
    }
    

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

    (Альтернатива) Объявить зависимости библиотеки Firebase без использования BoM

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

    Обратите внимание: если вы используете несколько библиотек Firebase в своем приложении, мы настоятельно рекомендуем использовать BoM для управления версиями библиотек, что гарантирует совместимость всех версий.

    dependencies {
        // Declare the dependencies for the Firebase Cloud Messaging and Analytics libraries
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-messaging-ktx:21.0.0'
        implementation 'com.google.firebase:firebase-analytics-ktx:18.0.0'
    }
    

  2. Синхронизируйте свое приложение, чтобы убедиться, что все зависимости имеют необходимые версии.

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

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

  • Служба, расширяющая 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 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 .

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

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

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

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

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

Ява

FirebaseMessaging.getInstance().getToken()
    .addOnCompleteListener(new OnCompleteListener<String>() {
        @Override
        public void onComplete(@NonNull Task<String> task) {
          if (!task.isSuccessful()) {
            Log.w(TAG, "Fetching FCM registration token failed", task.getException());
            return;
          }

          // Get new FCM registration token
          String token = task.getResult();

          // 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

FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
    if (!task.isSuccessful) {
        Log.w(TAG, "Fetching FCM registration token failed", task.exception)
        return@OnCompleteListener
    }

    // Get new FCM registration token
    val token = task.result

    // 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 FCM registration token is updated. This may occur if the security of
 * the previous token had been compromised. Note that this is called when the
 * FCM registration 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
    // FCM registration token to your app server.
    sendRegistrationToServer(token);
}

Котлин + KTX

/**
 * Called if the FCM registration token is updated. This may occur if the security of
 * the previous token had been compromised. Note that this is called when the
 * FCM registration 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
    // FCM registration token to your app server.
    sendRegistrationToServer(token)
}

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

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

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

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

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

Когда генерируется регистрационный токен FCM, библиотека загружает идентификатор и данные конфигурации в Firebase. Если вы предпочитаете предотвратить автогенерацию токенов, отключите сбор аналитики и автоматическую инициализацию FCM (необходимо отключить оба), добавив следующие значения метаданных в свой 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

Firebase.messaging.isAutoInitEnabled = true

Чтобы снова включить сбор данных Analytics, вызовите метод setAnalyticsCollectionEnabled() класса FirebaseAnalytics . Например:

setAnalyticsCollectionEnabled(true);

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

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

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

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

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