Catch up on everthing we announced at this year's Firebase Summit. Learn more

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

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

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

Предпосылки

  • Установите Unity 2017.4 или новее. Более ранние версии также могут быть совместимы, но не будут активно поддерживаться. Поддержка Unity 2017.4 считается устаревшей и больше не будет активно поддерживаться после следующего основного выпуска.

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

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

    • Для прошивки - нацелено на IOS - 10 или выше
    • Для Android - уровень целей API 19 (KitKat) или выше

  • Настройте устройство или используйте эмулятор для запуска вашего проекта Unity.

    • Для прошивки - Настройка физического устройства IOS , чтобы запустить приложение и выполнить следующие задачи:

      • Получить Push Notification Apple , Authentication Key для вашего счета компании Apple Developer .
      • Включить Push - уведомления в XCode под App> Возможности.
    • Для Android - эмуляторы должны использовать эмулятор изображение с Google Play.

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

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

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

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

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

  1. Перейти к консоли Firebase .

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

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

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

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

    • Для прошивки - Введите номер проект Unity в IOS ID в расслоении ID IOS поля.

    • Для Android - Введите номер проекта Unity в Android ID в Android имя пакета поле.
      Название условия пакета и идентификатор приложения часто используются как синонимы.

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

  6. Выберите Зарегистрировать приложение.

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

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

    • Для прошивки - Нажмите кнопку Загрузить GoogleService-info.plist.

    • Для Android - Нажмите кнопку Загрузить Google-services.json.

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

  3. Назад в Firebase консоли, в рабочем процессе установки, нажмите кнопку Далее.

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

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

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

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

  2. В открытом проекте Unity, перейдите в Assets> Import Package> Индивидуальный пакет.

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

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

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

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

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

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

  4. В окне Import Unity Package, нажмите кнопку Импорт.

  5. Назад в Firebase консоли, в рабочем процессе установки, нажмите кнопку Далее.

Шаг 5. Подтвердите требования к версии сервисов Google Play

Unity SDK Firebase для Android требует службы Play Google , которые должны быть уточненным до 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. Прокрутите вниз до Linked Каркасы и библиотеки, а затем нажмите кнопку + , чтобы добавить рамки.

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

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

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

  2. Переключатель Push Notifications Вкл.

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

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

Инициализировать Firebase Cloud Messaging

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

В итоге:

Состояние приложения Уведомление Данные Оба
Передний план 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:

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;

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

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

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

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