Чтобы написать кроссплатформенное клиентское приложение Firebase Cloud Messaging с Unity, используйте Firebase Cloud Messaging API. Unity SDK работает как для Android, так и для iOS, с некоторыми дополнительными настройками, необходимыми для каждой платформы.
Прежде чем вы начнете
Предпосылки
Установите Unity 5.3 или новее.
(Только для iOS) Установите следующее:
- Xcode 9.4.1 или новее
- CocoaPods 1.9.0 или новее
Убедитесь, что ваш проект Unity соответствует этим требованиям:
- Для iOS - ориентирована на iOS 10 или новее.
- Для Android - целевой уровень API 16 (Jelly Bean) или новее.
Настройте устройство или используйте эмулятор для запуска вашего проекта Unity.
Для iOS - настройте физическое устройство iOS для запуска приложения и выполните следующие задачи:
- Получите ключ аутентификации Apple Push Notification для своей учетной записи Apple Developer .
- Включите 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
(например, идентификатор:com.yourcompany.yourproject
).(Необязательно) Введите псевдонимы для платформы вашего проекта Unity.
Эти псевдонимы являются внутренними, удобными идентификаторами и видны только вам в консоли Firebase.Щелкните Зарегистрировать приложение .
Шаг 3. Добавьте файлы конфигурации Firebase
Получите файлы конфигурации Firebase для конкретной платформы в рабочем процессе настройки консоли Firebase.
Для iOS - нажмите Загрузить GoogleService-Info.plist .
Для Android: нажмите Загрузить google-services.json .
Файл конфигурации Firebase содержит уникальные, но не секретные идентификаторы вашего проекта. Чтобы узнать больше об этом файле конфигурации, посетите Understand Firebase Projects .
Вы можете повторно загрузить файл конфигурации Firebase в любое время.
Убедитесь, что к имени файла конфигурации не добавлены дополнительные символы, например
(2)
.
Откройте окно Project вашего проекта Unity, затем переместите файлы конфигурации в папку
Assets
.Вернувшись в консоль Firebase, в рабочем процессе настройки нажмите Далее .
Шаг 4. Добавьте SDK Firebase Unity
В консоли Firebase нажмите Загрузить Firebase Unity SDK , затем распакуйте SDK в удобное место.
Вы можете снова загрузить Firebase Unity SDK в любое время.
SDK Firebase Unity не зависит от платформы.
В открытом проекте Unity перейдите к Assets > Import Package > Custom Package .
В разархивированном SDK выберите поддерживаемые продукты Firebase, которые вы хотите использовать в своем приложении.
Для оптимальной работы с Firebase Cloud Messaging мы рекомендуем включить Google Analytics в вашем проекте. Кроме того, в рамках настройки Google Analytics вам необходимо добавить в приложение пакет Firebase для Analytics.
Аналитика включена
- Добавьте пакет Firebase для Google Analytics:
FirebaseAnalytics.unitypackage
- Добавьте пакет для обмена сообщениями Firebase Cloud:
FirebaseMessaging.unitypackage
Аналитика не включена
Добавьте пакет для обмена сообщениями Firebase Cloud:
FirebaseMessaging.unitypackage
- Добавьте пакет Firebase для Google Analytics:
В окне " Импорт пакета Unity" нажмите " Импорт" .
Вернувшись в консоль Firebase, в рабочем процессе настройки нажмите Далее .
Шаг 5. Подтвердите требования к версии сервисов Google Play
Для Firebase Unity SDK для Android требуются сервисы Google Play , которые должны быть обновлены до того, как SDK можно будет использовать.
Добавьте следующий код в начало вашего приложения. Вы можете проверить и при желании обновить сервисы Google Play до версии, которая требуется для Firebase Unity SDK, перед вызовом любых других методов в SDK.
Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(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.
Шаг 7. Добавьте структуру уведомлений пользователей
Щелкните проект в Xcode, затем выберите вкладку « Общие » в области редактора .
Прокрутите вниз до связанных платформ и библиотек , затем нажмите кнопку + , чтобы добавить платформу.
В появившемся окне прокрутите до UserNotifications.framework , щелкните эту запись, затем щелкните Добавить .
Шаг 8. Включите push-уведомления
Щелкните проект в Xcode, затем выберите вкладку « Возможности » в области редактора .
Установите для параметра « Push-уведомления» значение « Вкл .».
Прокрутите вниз до Фоновые режимы и установите для него значение Вкл .
Установите флажок Удаленные уведомления в разделе Фоновые режимы .
Инициализировать обмен сообщениями Firebase Cloud
Библиотека 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
На Android Firebase Cloud Messaging поставляется в комплекте с настраиваемой UnityPlayerActivity
точки входа, которая заменяет стандартную 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
по умолчанию не обрабатывает onRestart
жизненного цикла действий 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()); startService(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); }
Примечание о доставке сообщений на 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
) на iOS или в AndroidManifest.xml
на Android:
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>
iOS
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. Чтобы узнать больше, см. Пример быстрого запуска, демонстрирующий эту функцию.
Чтобы добавить в приложение другое, более продвинутое поведение, см. Руководства по отправке сообщений с сервера приложений:
Имейте в виду, что вам понадобится реализация сервера, чтобы использовать эти функции.