Этот код с onCreate указан в Настройка пользовательской точки входа Activity . Это необходимо только в том случае, если вы следовали инструкциям для Расширение UnityPlayerActivity от самого Unity (вы обычно должны знать, когда вы это делаете, хотя иногда плагины (как этот) должны делать это сами функционировать.
Для обработки глубоких ссылок вам необходимо изменить фильтр намерений для вашего ApplicationManifest.xml. У вас должен быть AndroidManifest.xml в папке Assets / Plugins / AndroidManifest.xml после импорта подключаемого модуля Firebase Messaging. Начиная с 6.1.1 это выглядит так:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.google.firebase.unity.database.testapp.patrick" android:versionCode="1" android:versionName="1.0">
<application android:label="@string/app_name" android:icon="@drawable/app_icon">
<!-- The MessagingUnityPlayerActivity is a class that extends
UnityPlayerActivity to work around a known issue when receiving
notification data payloads in the background. -->
<activity android:name="com.google.firebase.MessagingUnityPlayerActivity" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>
<service android:name="com.google.firebase.messaging.MessageForwardingService" android:exported="false" />
</application>
</manifest>
Просто добавьте свои фильтры намерений, например, если ваш домен - example.com:
.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.google.firebase.unity.database.testapp.patrick" android:versionCode="1" android:versionName="1.0">
<application android:label="@string/app_name" android:icon="@drawable/app_icon">
<!-- The MessagingUnityPlayerActivity is a class that extends
UnityPlayerActivity to work around a known issue when receiving
notification data payloads in the background. -->
<activity android:name="com.google.firebase.MessagingUnityPlayerActivity" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<!-- stuff for deep links -->
<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>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>
<service android:name="com.google.firebase.messaging.MessageForwardingService" android:exported="false" />
</application>
</manifest>
Вам не нужна пара ключ-значение. Чтобы узнать, как получать сообщения, помимо документации, которую вы уже нашли, вам нужно проверить пример приложения .
Важные моменты, на которые следует обратить внимание, это то, что он проверяет зависимости firebase, прежде чем делать что-либо:
Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task => {
dependencyStatus = task.Result;
if (dependencyStatus == Firebase.DependencyStatus.Available) {
InitializeFirebase();
} else {
Debug.LogError(
"Could not resolve all Firebase dependencies: " + dependencyStatus);
}
});
В функции инициализации обработчики регистрируются для входящих сообщений:
Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
(в этом случае образец подписывается на тему, если вы это делаете)
и запрашиваются разрешения на получение уведомлений:
Firebase.Messaging.FirebaseMessaging.RequestPermissionAsync().ContinueWithOnMainThread(
task => {
LogTaskCompletion(task, "RequestPermissionAsync");
}
);
Образец OnMessageReceived
является супер общим. Вы можете увидеть, как получить сообщение только с заголовком / телом:
if (notification != null) {
DebugLog("title: " + notification.Title);
DebugLog("body: " + notification.Body);
var android = notification.Android;
if (android != null) {
DebugLog("android channel_id: " + android.ChannelId);
}
}
или, необязательно, массив ключей / значений, о котором вы спрашивали:
if (e.Message.Data.Count > 0) {
DebugLog("data:");
foreach (System.Collections.Generic.KeyValuePair<string, string> iter in
e.Message.Data) {
DebugLog(" " + iter.Key + ": " + iter.Value);
}
}
В iOS вам просто нужно настроить APN: https://firebase.google.com/docs/cloud-messaging/ios/certs
Дайте мне знать, если это вас не расклеит!