Google стремится продвигать расовую справедливость для черных сообществ. Смотри как.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Настройте клиентское приложение Firebase Cloud Messaging с Unity

Чтобы написать кроссплатформенное клиентское приложение Firebase Cloud Messaging с Unity, используйте API Firebase Cloud Messaging . 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 для запуска приложения и выполните следующие задачи:

    • Для 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: Добавьте Firebase Unity SDK

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

    • Вы можете скачать Firebase Unity SDK снова в любое время.

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

  2. В вашем открытом проекте Unity перейдите к Активам > Пакет импорта > Пользовательский пакет .

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

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

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

    • Добавьте пакет Firebase для Google Analytics: FirebaseAnalytics.unitypackage
    • Добавьте пакет для Firebase Cloud Messaging: FirebaseMessaging.unitypackage

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

    Добавьте пакет для Firebase Cloud Messaging: 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, затем выберите вкладку General из области Editor .

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

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

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

  1. Нажмите на проект в XCode, затем выберите вкладку Capabilities из области Editor .

  2. Переключите Push-уведомления на On .

  3. Прокрутите вниз до фона режимов, а затем включите его в On.

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

Инициализация Firebase Cloud Messaging

Библиотека сообщений Firebase Cloud будет инициализирована при добавлении обработчиков для событий 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 . Если вы не используете пользовательскую точку входа, эта замена происходит автоматически, и вам не нужно предпринимать никаких дополнительных действий. Приложения, которые не используют точку входа по умолчанию 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 будет нулевым.

В итоге:

Состояние приложения уведомление Данные Обе
передний план Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived
Задний план Системный трей Firebase.Messaging.FirebaseMessaging.MessageReceived Уведомление: системный трей
Данные: в статистике о намерениях.

Запретить автоматическую инициализацию

FCM генерирует ID экземпляра, который используется в качестве маркера регистрации в FCM. Когда ID экземпляра сгенерирован, библиотека загрузит идентификатор и данные конфигурации в Firebase. Если вы хотите получить явное согласие перед использованием Instance ID, вы можете предотвратить генерацию во время настройки, отключив 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. Чтобы узнать больше, посмотрите пример быстрого запуска, который демонстрирует эту функциональность.

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

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