Мы используем для создания моего проекта, используя сервис «Unity cloud build» для Android и iOS, используя Firebase в качестве нашего бэкэнда. Недавно мы решили добавить возможность «push-уведомлений» в наш проект, чтобы улучшить взаимодействие с пользователем.
Я начал тестировать вещи, чтобы увидеть, как все это работает, и добавил пакеты Firebase-Messaging и стандартный «официальный» код для получения и сохранения токена. Также я сделал небольшой код «отправителя», используя «функции Firebase» для отправки тестовых уведомлений.
В сборке Android проблем нет, сразу заработало. Он получил токен, и всякий раз, когда я использую этот токен для отправки тестового уведомления, уведомление немедленно появляется без проблем.
Но у нас есть некоторые проблемы с версией iOS! Это не сработало! Это очень расплывчато, где проблема, и я не мог найти подобную проблему, используя Google! Мы потратили много времени на настройку файлов .p12 и файлов обеспечения и файла .p8 (для соединения APN с firebase), все они выглядят хорошо, и мы не уверены, что проблема в этом!
Вот как ведет себя версия iOS:
Журнал показывает, что устройство подключено к FCM и получило токен, но сразу после этой строки всегда появляется строка ошибки: Failed to register for remote notifications
Когда я отправляю сообщение на этот токен, оно не показывает никаких уведомлений, только в журнале я вижу это: FCM: Received message
Кроме того, это мои настройки iOS в Unity для включения удаленных уведомлений:
Изображение
А это мой скрипт после сборки в облачной сборке Unity
using UnityEngine;
using UnityEditor;
using UnityEditor.Callbacks;
using System.Collections;
using UnityEditor.iOS.Xcode;
using System.IO;
public class BuildSettings
{
[PostProcessBuild]
public static void OnPostprocessBuild(BuildTarget buildTarget, string path)
{
if (buildTarget != BuildTarget.iOS)
return;
string projectPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj";
PBXProject project = new PBXProject();
project.ReadFromFile (projectPath);
string targetGuid = project.TargetGuidByName(PBXProject.GetUnityTargetName());
project.AddCapability(targetGuid, PBXCapabilityType.PushNotifications);
project.AddFrameworkToProject(targetGuid, "CoreBluetooth.framework", false);
project.AddFrameworkToProject(targetGuid, "UserNotifications.framework", false);
File.WriteAllText (projectPath, project.WriteToString ());
var plistPath = Path.Combine(path, "Info.plist");
var plist = new PlistDocument();
plist.ReadFromFile(plistPath);
plist.root.SetString("NSBluetoothPeripheralUsageDescription", "Bluetooth connection message!");
plist.WriteToFile(plistPath);
}
}
Большое спасибо.