В этом кратком руководстве описывается, как настроить Firebase Cloud Messaging в мобильных и веб-клиентских приложениях для надежной отправки сообщений. Сведения о серверных средах см. в разделе «Ваша серверная среда» и FCM .
Настройка клиентского приложения Firebase Cloud Messaging с помощью Unity
Чтобы создать кроссплатформенное клиентское приложение Firebase Cloud Messaging на Unity, используйте API Firebase Cloud Messaging . SDK Unity работает как на Android, так и на Apple, но для каждой платформы требуется дополнительная настройка.
Прежде чем начать
Предпосылки
Установите Unity 2021 LTS или более позднюю версию. Поддержка Unity 2020 считается устаревшей и не будет активно поддерживаться после следующего основного релиза. Более ранние версии также могут быть совместимы, но не будут активно поддерживаться.
(Только для платформ Apple) Установите следующее:
- Xcode 13.3.1 или выше
- CocoaPods 1.12.0 или выше
Убедитесь, что ваш проект Unity соответствует следующим требованиям:
- Для iOS — предназначено для iOS 13 и выше.
- Для tvOS — предназначено для tvOS 13 и выше
- Для Android — ориентирован на API уровня 21 (Lollipop) или выше
Настройте устройство или используйте эмулятор для запуска вашего проекта Unity.
Для iOS или tvOS — настройте физическое устройство для запуска приложения и выполните следующие задачи:
- Получите ключ аутентификации push-уведомлений Apple для своей учетной записи разработчика Apple .
- Включите Push-уведомления в XCode в разделе Приложение > Возможности .
Для Android — эмуляторы должны использовать образ эмулятора с Google Play.
- Войдите в Firebase, используя свою учетную запись Google.
Если у вас еще нет проекта Unity и вы просто хотите опробовать продукт Firebase, вы можете загрузить один из наших примеров быстрого старта .
Шаг 1: Создайте проект Firebase
Прежде чем добавить Firebase в свой проект Unity, необходимо создать проект Firebase для подключения к нему. Подробнее о проектах Firebase можно узнать в разделе «Понимание проектов Firebase».
Шаг 2: Зарегистрируйте свое приложение в Firebase
Вы можете зарегистрировать одно или несколько приложений или игр для подключения к вашему проекту Firebase.
Перейдите в консоль Firebase .
В центре страницы обзора проекта щелкните значок Unity (
), чтобы запустить рабочий процесс настройки.Если вы уже добавили приложение в свой проект Firebase, нажмите «Добавить приложение» , чтобы отобразить параметры платформы.
Выберите, какую цель сборки вашего проекта Unity вы хотите зарегистрировать, или вы даже можете зарегистрировать обе цели одновременно.
Введите идентификатор(ы) платформы вашего проекта Unity.
Для iOS — введите идентификатор iOS вашего проекта Unity в поле идентификатора пакета iOS .
Для Android — введите идентификатор Android вашего проекта Unity в поле имени пакета Android .
Термины «имя пакета» и «идентификатор приложения» часто используются как взаимозаменяемые.
Откройте проект Unity в среде Unity IDE, затем перейдите в раздел настроек для каждой платформы:
Для iOS — перейдите в Настройки сборки > iOS .
Для Android — перейдите в Android > Настройки проигрывателя > Другие настройки .
Идентификатор вашего проекта Unity — это значение идентификатора пакета (пример идентификатора:
com.yourcompany.yourproject
).(Необязательно) Введите псевдонимы, специфичные для платформы вашего проекта Unity.
Эти псевдонимы являются внутренними, удобными идентификаторами и видны только вам в консоли Firebase .Нажмите «Зарегистрировать приложение» .
Шаг 3: Добавьте файлы конфигурации Firebase
Получите файлы конфигурации Firebase для вашей платформы в рабочем процессе настройки консоли Firebase .
Для iOS — нажмите «Загрузить GoogleService-Info.plist» .
Для Android — нажмите «Загрузить google-services.json» .
Файл конфигурации Firebase содержит уникальные, но не секретные идентификаторы вашего проекта и приложения. Подробнее об этом файле конфигурации см. в статье «Подробнее о проектах Firebase» .
Вы можете снова загрузить файл конфигурации Firebase в любое время.
Убедитесь, что к имени файла конфигурации не добавлены дополнительные символы, например
(2)
.
Откройте окно проекта Unity, затем переместите файл(ы) конфигурации в папку
Assets
.Вернитесь в консоль Firebase , в рабочем процессе настройки нажмите кнопку Далее .
Шаг 4: Добавьте Firebase Unity SDK
В консоли Firebase нажмите «Загрузить Firebase Unity SDK» , затем распакуйте SDK в удобное место.
Вы можете снова загрузить Firebase Unity SDK в любое время.
Firebase Unity SDK не привязан к какой-либо платформе.
В открытом проекте Unity перейдите в раздел Assets > Import Package > Custom Package .
В распакованном SDK выберите поддерживаемые продукты Firebase , которые вы хотите использовать в своем приложении.
Для оптимальной работы с Firebase Cloud Messaging рекомендуем включить Google Analytics в вашем проекте. Кроме того, в рамках настройки Analytics необходимо добавить пакет Firebase для Analytics в ваше приложение.
Analytics включена
- Добавьте пакет Firebase для Google Analytics :
FirebaseAnalytics.unitypackage
- Добавьте пакет для Firebase Cloud Messaging :
FirebaseMessaging.unitypackage
Analytics не включена
Добавьте пакет для Firebase Cloud Messaging :
FirebaseMessaging.unitypackage
- Добавьте пакет Firebase для Google Analytics :
В окне Импорт пакета Unity нажмите Импорт .
Вернитесь в консоль Firebase , в рабочем процессе настройки нажмите кнопку Далее .
Шаг 5: Подтвердите требования к версии сервисов Google Play
Для некоторых продуктов в Firebase Unity SDK для Android требуются Google Play services . Узнайте , какие продукты имеют эту зависимость . Для использования этих продуктов Google Play services должны быть обновлены.
Добавьте следующий оператор using
и код инициализации в начало приложения. Вы можете проверить наличие Google Play services и при необходимости обновить их до необходимой версии, прежде чем вызывать любые другие методы в SDK.
using Firebase.Extensions;
Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task => {
var dependencyStatus = task.Result;
if (dependencyStatus == Firebase.DependencyStatus.Available) {
// Create and hold a reference to your FirebaseApp,
// where app is a Firebase.FirebaseApp property of your application class.
app = Firebase.FirebaseApp.DefaultInstance;
// Set a flag here to indicate whether Firebase is ready to use by your app.
} else {
UnityEngine.Debug.LogError(System.String.Format(
"Could not resolve all Firebase dependencies: {0}", dependencyStatus));
// Firebase Unity SDK is not safe to use here.
}
});
Ваш проект Unity зарегистрирован и настроен для использования Firebase.
Настройте платформу Apple
Используйте следующие инструкции для настройки FCM на платформах Unity и Apple.
Загрузите свой ключ аутентификации APNs
Загрузите свой ключ аутентификации APNs в Firebase. Если у вас ещё нет ключа аутентификации APNs, обязательно создайте его в Центре разработчиков Apple .
Внутри вашего проекта в консоли Firebase выберите значок шестеренки, выберите Настройки проекта , а затем выберите вкладку Облачные сообщения .
В разделе «Ключ аутентификации APNs» в разделе «Конфигурация приложения iOS» нажмите кнопку «Загрузить» , чтобы загрузить ключ аутентификации разработки, ключ аутентификации производства или оба. Требуется как минимум один.
Перейдите к месту сохранения ключа, выберите его и нажмите «Открыть» . Добавьте идентификатор ключа (доступен в Центре разработчиков Apple ) и нажмите «Загрузить» .
Включить push-уведомления на платформах Apple
- Щелкните свой проект в Xcode, затем выберите вкладку «Общие» в области «Редактор» .
- Прокрутите страницу до раздела Связанные фреймворки и библиотеки , затем нажмите кнопку + , чтобы добавить фреймворк.
- В появившемся окне прокрутите до UserNotifications.framework , щелкните эту запись, затем щелкните Добавить .
- Щелкните свой проект в Xcode, затем выберите вкладку Возможности в области Редактора .
- Включите функцию Push-уведомлений .
- Прокрутите до пункта Фоновые режимы , затем переключите его в положение Вкл .
- Установите флажок Удаленные уведомления в разделе Фоновые режимы .
Инициализация Firebase Cloud Messaging
Библиотека Firebase Cloud Message будет инициализирована при добавлении обработчиков событий TokenReceived
или MessageReceived
.
При инициализации для экземпляра клиентского приложения запрашивается регистрационный токен. Приложение получит токен вместе с событием OnTokenReceived
, которое следует кэшировать для дальнейшего использования. Этот токен понадобится вам, если вы хотите отправлять сообщения именно на это устройство.
Кроме того, вам необходимо зарегистрироваться на событие OnMessageReceived
, если вы хотите иметь возможность получать входящие сообщения.
Настройка будет выглядеть так:
public void Start() { Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived; Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived; } public void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs token) { UnityEngine.Debug.Log("Received Registration Token: " + token.Token); } public void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e) { UnityEngine.Debug.Log("Received a new message from: " + e.Message.From); }
Настройте платформу Android
Используйте следующие инструкции для настройки FCM на платформах Unity и Android.
Настройка точки входа Android Activity
Firebase Cloud Messaging поставляется с пользовательской точкой входа, которая заменяет стандартную UnityPlayerActivity
. Если вы не используете пользовательскую точку входа, эта замена происходит автоматически, и вам не нужно предпринимать никаких дополнительных действий.
Плагин Firebase Cloud Messaging Unity для Android поставляется с двумя дополнительными файлами:
-
Assets/Plugins/Android/libmessaging_unity_player_activity.jar
содержит активностьMessagingUnityPlayerActivity
, которая заменяет стандартнуюUnityPlayerActivity
. -
Assets/Plugins/Android/AndroidManifest.xml
указывает приложению использоватьMessagingUnityPlayerActivity
в качестве точки входа в приложение.
Эти файлы предоставлены, поскольку UnityPlayerActivity
по умолчанию не обрабатывает переходы жизненного цикла активности onStop
и onRestart
и не реализует onNewIntent
, что необходимо для правильной обработки входящих сообщений Firebase Cloud Messaging .
Настройте пользовательскую точку входа Activity
Если ваше приложение не использует стандартную UnityPlayerActivity
вам потребуется удалить прилагаемый файл AndroidManifest.xml
и убедиться, что ваша пользовательская функция корректно обрабатывает все переходы жизненного цикла Android Activity (пример того, как это сделать, показан ниже). Если ваша пользовательская функция расширяет UnityPlayerActivity
вы можете расширить com.google.firebase.MessagingUnityPlayerActivity
, который реализует все необходимые методы.
Если вы используете пользовательскую Activity и не расширяете com.google.firebase.MessagingUnityPlayerActivity
, вам следует включить следующие фрагменты в вашу Activity.
/** * Workaround for when a message is sent containing both a Data and Notification payload. * * When the app is in the background, if a message with both a data and notification payload is * received the data payload is stored on the Intent passed to onNewIntent. By default, that * intent does not get set as the Intent that started the app, so when the app comes back online * it doesn't see a new FCM message to respond to. As a workaround, we override onNewIntent so * that it sends the intent to the MessageForwardingService which forwards the message to the * FirebaseMessagingService which in turn sends the message to the application. */ @Override protected void onNewIntent(Intent intent) { Intent message = new Intent(this, MessageForwardingService.class); message.setAction(MessageForwardingService.ACTION_REMOTE_INTENT); message.putExtras(intent); message.setData(intent.getData()); // For earlier versions of Firebase C++ SDK (< 7.1.0), use `startService`. // startService(message); MessageForwardingService.enqueueWork(this, message); } /** * Dispose of the mUnityPlayer when restarting the app. * * This makes sure that when the app starts up again it does not start with stale data. */ @Override protected void onCreate(Bundle savedInstanceState) { if (mUnityPlayer != null) { mUnityPlayer.quit(); mUnityPlayer = null; } super.onCreate(savedInstanceState); }
Новые версии Firebase C++ SDK (начиная с 7.1.0) используют JobIntentService
, что требует дополнительных изменений в файле AndroidManifest.xml
.
<service android:name="com.google.firebase.messaging.MessageForwardingService" android:permission="android.permission.BIND_JOB_SERVICE" android:exported="false" > </service>
Доставка сообщений на Android
When the app is not running at all and a user taps on a notification, the message is not, by default, routed through FCM 's built in callbacks. In this case, message payloads are received through an Intent
used to start the application.
Messages received while the app is in the background have the content of their notification field used to populate the system tray notification, but that notification content won't be communicated to FCM . This means that FirebaseMessage.Notification
will be a null.
В итоге:
App state | Уведомление | Данные | Оба |
---|---|---|---|
Передний план | Firebase.Messaging.FirebaseMessaging.MessageReceived | Firebase.Messaging.FirebaseMessaging.MessageReceived | Firebase.Messaging.FirebaseMessaging.MessageReceived |
Фон | Системный лоток | Firebase.Messaging.FirebaseMessaging.MessageReceived | Notification: system tray Data: in extras of the intent. |
Handling messages with deep links on Android
FCM allows messages to be sent containing a deep link into your app. To receive messages that contain a deep link, you must add a new intent filter to the activity that handles deep links for your app. The intent filter should catch deep links of your domain. In AndroidManifest.xml:
<intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:host="CHANGE_THIS_DOMAIN.example.com" android:scheme="http"/> <data android:host="CHANGE_THIS_DOMAIN.example.com" android:scheme="https"/> </intent-filter>
It is also possible to specify a wildcard to make the intent filter more flexible. For example:
<intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:host="*.example.com" android:scheme="http"/> <data android:host="*.example.com" android:scheme="https"/> </intent-filter>
When users tap a notification containing a link to the scheme and host you specify, your app will start the activity with this intent filter to handle the link.
Prevent auto initialization
FCM generates a registration token for device targeting. When a token is generated, the library uploads the identifier and configuration data to Firebase. If you want to get an explicit opt-in before using the token, you can prevent generation at configure time by disabling FCM (and on Android, Analytics). You can add a metadata value to your Info.plist
(not your GoogleService-Info.plist
) on Apple, or your AndroidManifest.xml
on Android:
Андроид
<?xml version="1.0" encoding="utf-8"?> <application> <meta-data android:name="firebase_messaging_auto_init_enabled" android:value="false" /> <meta-data android:name="firebase_analytics_collection_enabled" android:value="false" /> </application>
Быстрый
FirebaseMessagingAutoInitEnabled = NO
To re-enable FCM, you can make a runtime call:
Firebase.Messaging.FirebaseMessaging.TokenRegistrationOnInitEnabled = true;
This value persists across app restarts once set.
Следующие шаги
After you have completed the setup steps, here are a few options for moving forward with FCM for Unity: