Catch up on everthing we announced at this year's Firebase Summit. Learn more

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

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

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

Настроить SDK

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

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

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

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

    • Цели API уровня 19 (KitKat) или выше
    • Использует Android 4.4 или выше.
    • Использует Jetpack (AndroidX) , которая включает в себя выполнение этих требований версии:
      • com.android.tools.build:gradle v3.2.1 или более поздняя версия
      • compileSdkVersion 28 или более поздней версии
  • Настройка физического устройства или использовать эмулятор для запуска приложения.
    Обратите внимание , что Firebase SDKs с зависимостью от услуг в Google Play требуется устройство или эмулятор , чтобы службы Google Play установлена.

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

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

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

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

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

Чтобы использовать Firebase в своем приложении для Android, вам необходимо зарегистрировать свое приложение в проекте Firebase. Регистрация вашего приложения часто называется «добавлением» вашего приложения в проект.

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

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

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

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

  5. Выберите Зарегистрировать приложение.

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

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

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

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

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

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

      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.10'  // 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. Использование Firebase Android Банка Москвы , объявить зависимость для библиотеки Firebase Cloud Messaging Android в вашем модуле (приложение уровня) Gradle файл (обычно app/build.gradle ).

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

    Джава

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:29.0.1')
    
        // 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 Банка Москвы , ваше приложение будет всегда использовать совместимые версии библиотек Firebase Android.

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

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

    Обратите внимание , что если вы используете несколько библиотеки Firebase в вашем приложении, мы настоятельно рекомендуем использовать спецификации для управления версиями библиотеки, что гарантирует , что все версии совместимы.

    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:23.0.0'
        implementation 'com.google.firebase:firebase-analytics:20.0.0'
    }
    

    Котлин + KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:29.0.1')
    
        // 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 Банка Москвы , ваше приложение будет всегда использовать совместимые версии библиотек Firebase Android.

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

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

    Обратите внимание , что если вы используете несколько библиотеки Firebase в вашем приложении, мы настоятельно рекомендуем использовать спецификации для управления версиями библиотеки, что гарантирует , что все версии совместимы.

    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:23.0.0'
        implementation 'com.google.firebase:firebase-analytics-ktx:20.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 на идентификатор вашего объекта канала уведомления , как показано; 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 срабатывает обратный вызов , когда генерируется новый маркер.

Джава

/**
 * There are two scenarios when onNewToken is called:
 * 1) When a new token is generated on initial app startup
 * 2) Whenever an existing token is changed
 * Under #2, there are three scenarios when the existing token is changed:
 * A) App is restored to a new device
 * B) User uninstalls/reinstalls the app
 * C) User clears app data
 */
@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() гарантирует , что если пользователь возвращается к запущенному приложению через некоторые другие средства, например, с помощью кнопки возврата, проверка по - прежнему выполняется.

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

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

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

Firebase.messaging.isAutoInitEnabled = true

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

setAnalyticsCollectionEnabled(true);

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

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

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

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

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