Мы используем для создания моего проекта сервис «Облачная сборка Unity» для Android и iOS, используя Firebase в качестве нашего бэкэнда. Недавно мы решили добавить в наш проект возможность «push-уведомлений», чтобы улучшить взаимодействие с пользователем.
Я начал тестировать, чтобы увидеть, как все это работает, и добавил пакеты обмена сообщениями firebase и стандартный «официальный» код для получения и сохранения токена. Также я сделал небольшой код «отправителя», используя «функции 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);
}
}
Спасибо большое.
Дальнейшее расследование показало, что проблема возникла из-за отсутствия права на aps-среду, процесс добавления этого права в вашу сборку iOS отличается, если вы используете Xcode или облачную сборку.
Вы можете найти решение этой проблемы здесь: https://forum.unity.com/threads/how-to-put-ios-entitlements-file-in-a-unity-project.442277/