Чтобы написать клиентское приложение 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 или новее
-
Настройте физическое устройство или используйте эмулятор для запуска приложения.
Обратите внимание, что SDK Firebase, зависящие от сервисов Google Play, требуют, чтобы на устройстве или эмуляторе были установлены сервисы Google Play.Войдите в Firebase, используя свою учетную запись Google.
Если у вас еще нет проекта Android и вы просто хотите опробовать продукт Firebase, вы можете загрузить один из наших образцов быстрого запуска .
Создать проект Firebase
Прежде чем вы сможете добавить Firebase в свое приложение Android, вам необходимо создать проект Firebase для подключения к вашему приложению Android. Посетите Understand Firebase Projects, чтобы узнать больше о проектах Firebase.
Зарегистрируйте свое приложение в Firebase
Чтобы использовать Firebase в своем приложении для Android, вам необходимо зарегистрировать свое приложение в своем проекте Firebase. Регистрация вашего приложения часто называется «добавлением» вашего приложения в проект.
Перейдите в консоль Firebase .
В центре страницы обзора проекта щелкните значок Android (
) или Добавить приложение, чтобы запустить рабочий процесс настройки.Введите имя пакета вашего приложения в поле имени пакета Android .
Имя пакета однозначно идентифицирует ваше приложение на устройстве и в магазине Google Play.
Имя пакета часто называют идентификатором приложения .
Найдите имя пакета вашего приложения в файле Gradle вашего модуля (уровня приложения), обычно
app/build.gradle
(пример имени пакета:com.yourcompany.yourproject
).Имейте в виду, что значение имени пакета чувствительно к регистру, и его нельзя изменить для этого приложения Firebase Android после его регистрации в вашем проекте Firebase.
(Необязательно) Введите другую информацию о приложении: псевдоним приложения и сертификат подписи отладки SHA-1 .
Псевдоним приложения : внутренний удобный идентификатор, который виден только вам в консоли Firebase.
Сертификат подписи отладки SHA-1 : хэш SHA-1 требуется для аутентификации Firebase (при использовании входа в Google или входа по номеру телефона ) и динамических ссылок Firebase .
Щелкните Зарегистрировать приложение .
Добавьте файл конфигурации Firebase
Добавьте в приложение файл конфигурации Firebase Android:
Нажмите Загрузить google-services.json, чтобы получить файл конфигурации Firebase Android (
).google-services.json Переместите файл конфигурации в каталог модуля (уровня приложения) вашего приложения.
Файл конфигурации Firebase содержит уникальные, но не секретные идентификаторы вашего проекта. Чтобы узнать больше об этом файле конфигурации, посетите Understand Firebase Projects .
Вы можете повторно загрузить файл конфигурации Firebase в любое время.
Убедитесь, что к имени файла конфигурации не добавлены дополнительные символы, например
(2)
.
Чтобы включить продукты Firebase в своем приложении, добавьте плагин google-services в свои файлы Gradle.
В файле 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 // ... } }
В файле 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 в свое приложение
С помощью 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.3.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.1' implementation 'com.google.firebase:firebase-analytics:18.0.1' }
Котлин + KTX
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:26.3.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.1' implementation 'com.google.firebase:firebase-analytics-ktx:18.0.1' }
Синхронизируйте свое приложение, чтобы убедиться, что все зависимости имеют необходимые версии.
Отредактируйте манифест приложения
Добавьте в манифест приложения следующее:
- Служба, расширяющая
FirebaseMessagingService
. Это необходимо, если вы хотите выполнять какие-либо операции с сообщениями, помимо получения уведомлений в приложениях в фоновом режиме. Чтобы получать уведомления в приоритетных приложениях, получать полезные данные, отправлять восходящие сообщения и т. Д., Вы должны расширить эту службу.
<service android:name=".java.MyFirebaseMessagingService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
<!-- 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" />
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
срабатывает всякий раз, когда создается новый токен.
Ява
/** * 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()
гарантирует, что если пользователь вернется в работающее приложение с помощью других средств, например, с помощью кнопки «Назад», проверка все равно будет выполняться.
Если на устройстве нет совместимой версии сервисов 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 .