Чтобы написать кроссплатформенное клиентское приложение Firebase Cloud Messaging с Unity, используйте Firebase Cloud Messaging API. Unity SDK работает как для 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 для подключения к вашему проекту Unity. Посетите Understand Firebase Projects , чтобы узнать больше о проектах 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 содержит уникальные, но не секретные идентификаторы для вашего проекта. Чтобы узнать больше об этом файле конфигурации, посетите Understand Firebase Projects .
Вы можете повторно загрузить файл конфигурации 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.
Загрузите свой ключ аутентификации APNs для поддержки Apple
Загрузите свой ключ аутентификации APNs в Firebase. Если у вас еще нет ключа аутентификации APNs, обязательно создайте его в Apple Developer Member Center .
Внутри вашего проекта в консоли Firebase выберите значок шестеренки, выберите Параметры проекта , а затем выберите вкладку Облачные сообщения .
В разделе «Ключ аутентификации APNs» в разделе «Конфигурация приложения iOS» нажмите кнопку «Загрузить» .
Перейдите к месту, где вы сохранили свой ключ, выберите его и нажмите «Открыть» . Добавьте идентификатор ключа (доступен в Apple Developer Member Center ) и нажмите «Загрузить» .
Включить push-уведомления на платформах Apple
Шаг 1: Добавьте структуру уведомлений пользователей
Щелкните по проекту в Xcode, затем выберите вкладку «Общие» в области «Редактор» .
Прокрутите страницу вниз до раздела Связанные фреймворки и библиотеки , затем нажмите кнопку + , чтобы добавить фреймворк.
В появившемся окне прокрутите до UserNotifications.framework , щелкните эту запись, затем щелкните Добавить .
Шаг 2: Включите push-уведомления
Щелкните по проекту в 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 Activity
На Android Firebase Cloud Messaging поставляется в комплекте с пользовательской точкой входа activity, которая заменяет UnityPlayerActivity
по умолчанию. Если вы не используете пользовательскую точку входа, эта замена происходит автоматически, и вам не нужно предпринимать никаких дополнительных действий. Приложения, которые не используют точку входа Activity по умолчанию или которые предоставляют свои собственные Assets/Plugins/AndroidManifest.xml
потребуют дополнительной настройки.
Плагин 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 (пример того, как это сделать, показан ниже). Если ваша пользовательская активность расширяет UnityPlayerActivity
вы можете вместо этого расширить com.google.firebase.MessagingUnityPlayerActivity
, который реализует все необходимые методы.
Если вы используете пользовательское действие и не расширяете com.google.firebase.MessagingUnityPlayerActivity
, вам следует включить в свое действие следующие фрагменты.
/** * 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 older 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 ensures 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
Когда приложение вообще не запущено, а пользователь нажимает на уведомление, сообщение по умолчанию не направляется через встроенные обратные вызовы FCM . В этом случае полезные данные сообщения принимаются через Intent
используемый для запуска приложения.
Сообщения, полученные, когда приложение находится в фоновом режиме, содержат содержимое поля уведомления, используемое для заполнения уведомления в системном трее, но содержимое этого уведомления не будет передано в FCM . То есть FirebaseMessage.Notification
будет иметь значение null.
В итоге:
Состояние приложения | Уведомление | Данные | Оба |
---|---|---|---|
Передний план | Firebase.Messaging.FirebaseMessaging.MessageReceived | Firebase.Messaging.FirebaseMessaging.MessageReceived | Firebase.Messaging.FirebaseMessaging.MessageReceived |
Фон | Системный лоток | Firebase.Messaging.FirebaseMessaging.MessageReceived | Уведомление: системный трей Данные: в дополнениях к намерению. |
Запретить автоматическую инициализацию
FCM генерирует регистрационный токен для таргетинга устройств. Когда токен генерируется, библиотека загружает идентификатор и данные конфигурации в Firebase. Если вы хотите получить явное согласие перед использованием токена, вы можете предотвратить генерацию во время настройки, отключив FCM (а на Android — Analytics). Для этого добавьте значение метаданных в ваш Info.plist
(не GoogleService-Info.plist
) на Apple или в ваш AndroidManifest.xml
на 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
Чтобы повторно включить FCM, вы можете выполнить вызов во время выполнения:
Firebase.Messaging.FirebaseMessaging.TokenRegistrationOnInitEnabled = true;
После установки это значение сохраняется при перезапуске приложения.
Обработка сообщений с помощью глубоких ссылок на Android
FCM позволяет отправлять сообщения, содержащие глубокую ссылку в ваше приложение. Чтобы получать сообщения, содержащие глубокую ссылку, необходимо добавить новый фильтр намерений в действие, которое обрабатывает глубокие ссылки для вашего приложения. Фильтр намерений должен улавливать глубокие ссылки вашего домена. Если ваши сообщения не содержат глубокую ссылку, эта конфигурация не нужна. В 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>
Также можно указать подстановочный знак, чтобы сделать фильтр намерений более гибким. Например:
<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>
Когда пользователи нажимают на уведомление, содержащее ссылку на указанную вами схему и хост, ваше приложение начинает действие с этим фильтром намерений для обработки ссылки.
Следующие шаги
После настройки клиентского приложения вы готовы отправлять нисходящие и тематические сообщения с помощью Firebase. Чтобы узнать больше, см. пример быстрого старта , демонстрирующий эту функциональность.
Чтобы добавить в свое приложение другие, более сложные функции, ознакомьтесь с руководствами по отправке сообщений с сервера приложений:
Помните, что для использования этих функций вам понадобится реализация сервера .