Google is committed to advancing racial equity for Black communities. See how.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Настройка клиентского приложения Firebase Cloud Messaging с помощью Unity

Чтобы написать кроссплатформенное клиентское приложение Firebase Cloud Messaging с Unity, используйте Firebase Cloud Messaging API. Unity SDK работает как для Android, так и для iOS, с некоторыми дополнительными настройками, необходимыми для каждой платформы.

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

Предпосылки

  • Установите Unity 5.3 или новее.

  • (Только для iOS) Установите следующее:

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

    • Для iOS - ориентирована на iOS 8 или новее.
    • Для Android - целевой уровень API 16 (Jelly Bean) или новее.
  • Настройте устройство или используйте эмулятор для запуска проекта Unity.

    • Для iOS - настройте физическое устройство iOS для запуска приложения и выполните следующие задачи:

      • Получите ключ аутентификации Apple Push Notification для своей учетной записи Apple Developer .
      • Включите push-уведомления в XCode в разделе « Приложение» > « Возможности» .
    • Для Android - эмуляторы должны использовать образ эмулятора с Google Play.

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

Шаг 1. Создайте проект Firebase

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

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

Вы можете зарегистрировать одно или несколько приложений или игр для подключения к вашему проекту Firebase.

  1. Зайдите в консоль Firebase .

  2. В центре страницы обзора проекта щелкните значок Unity ( ), чтобы запустить рабочий процесс установки.

    Если вы уже добавили приложение в свой проект Firebase, нажмите « Добавить приложение», чтобы отобразить параметры платформы.

  3. Выберите цель сборки вашего проекта Unity, которую вы хотите зарегистрировать, или вы даже можете выбрать регистрацию обеих целей одновременно.

  4. Введите идентификаторы платформы вашего проекта Unity.

    • Для iOS: введите идентификатор iOS вашего проекта Unity в поле идентификатора пакета iOS .

    • Для Android: введите идентификатор Android вашего проекта Unity в поле имени пакета Android .
      Термины имя пакета и идентификатор приложения часто используются как синонимы.

  5. (Необязательно) Введите псевдонимы для платформы вашего проекта Unity.
    Эти псевдонимы являются внутренними удобными идентификаторами и видны только вам в консоли Firebase.

  6. Щелкните Зарегистрировать приложение .

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

  1. Получите файлы конфигурации Firebase для конкретной платформы в рабочем процессе настройки консоли Firebase.

    • Для iOS - нажмите Загрузить GoogleService-Info.plist .

    • Для Android: нажмите Загрузить google-services.json .

  2. Откройте окно Project вашего проекта Unity, затем переместите файлы конфигурации в папку Assets .

  3. Вернувшись в консоль Firebase, в рабочем процессе настройки нажмите Далее .

Шаг 4. Добавьте SDK Firebase Unity

  1. В консоли Firebase нажмите Загрузить Firebase Unity SDK , затем распакуйте SDK в удобное место.

    • Вы можете снова загрузить Firebase Unity SDK в любое время.

    • SDK Firebase Unity не зависит от платформы.

  2. В открытом проекте Unity перейдите к Assets > Import Package > Custom Package .

  3. В разархивированном SDK выберите поддерживаемые продукты Firebase, которые вы хотите использовать в своем приложении.

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

    Аналитика включена

    • Добавьте пакет Firebase для Google Analytics: FirebaseAnalytics.unitypackage
    • Добавьте пакет для обмена сообщениями Firebase Cloud: FirebaseMessaging.unitypackage

    Аналитика не включена

    Добавьте пакет для обмена сообщениями Firebase Cloud: FirebaseMessaging.unitypackage

  4. В окне « Импорт пакета Unity» нажмите « Импорт» .

  5. Вернувшись в консоль 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. Добавьте структуру уведомлений пользователей

  1. Щелкните проект в Xcode, затем выберите вкладку « Общие » в области редактора .

  2. Прокрутите вниз до связанных платформ и библиотек , затем нажмите кнопку + , чтобы добавить платформу.

  3. В появившемся окне прокрутите до UserNotifications.framework , щелкните эту запись, затем щелкните Добавить .

Шаг 8. Включите push-уведомления

  1. Щелкните проект в Xcode, затем выберите вкладку « Возможности » в области редактора .

  2. Установите для параметра « Push-уведомления» значение « Вкл .».

  3. Прокрутите вниз до Фоновые режимы и установите для него значение Вкл .

  4. Установите флажок Удаленные уведомления в разделе Фоновые режимы .

Инициализировать 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

На 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 генерирует идентификатор экземпляра, который используется в качестве регистрационного токена в 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;

Это значение сохраняется после перезапуска приложения.

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. Чтобы узнать больше, см. Пример быстрого запуска, демонстрирующий эту функцию.

Чтобы добавить в приложение другое, более продвинутое поведение, см. Руководства по отправке сообщений с сервера приложений:

Имейте в виду, что вам понадобится реализация сервера, чтобы использовать эти функции.