Unity3d 如何解决';无法注册远程通知';,在由';统一云构建&x27;

Unity3d 如何解决';无法注册远程通知';,在由';统一云构建&x27;,unity3d,firebase-cloud-messaging,apple-push-notifications,unity3d-cloud-build,Unity3d,Firebase Cloud Messaging,Apple Push Notifications,Unity3d Cloud Build,我们使用“Unity cloud build”服务为Android和iOS构建我的项目,使用Firebase作为后端。最近,我们决定将“推送通知”功能添加到我们的项目中,以增强用户体验 我开始测试,看看整个过程是如何工作的,我添加了firebase消息包和标准的“官方”代码来接收和保存令牌。我还使用“Firebase函数”编写了一个小的“发送者”代码来发送测试通知 安卓系统的构建没有问题,它马上就可以工作了。它收到了令牌,每当我使用该令牌发送测试通知时,通知会立即弹出,没有问题 但是我们的iOS

我们使用“Unity cloud build”服务为Android和iOS构建我的项目,使用Firebase作为后端。最近,我们决定将“推送通知”功能添加到我们的项目中,以增强用户体验

我开始测试,看看整个过程是如何工作的,我添加了firebase消息包和标准的“官方”代码来接收和保存令牌。我还使用“Firebase函数”编写了一个小的“发送者”代码来发送测试通知

安卓系统的构建没有问题,它马上就可以工作了。它收到了令牌,每当我使用该令牌发送测试通知时,通知会立即弹出,没有问题

但是我们的iOS版本有一些问题!它不起作用!这是非常模糊的问题所在,我无法找到任何类似的问题使用谷歌!!我们花了大量时间调整.p12和配置文件以及.p8文件(用于与firebase的APN连接),它们看起来都很好,我们不确定问题是否存在

这是iOS版本的行为方式:

  • 日志显示设备连接到FCM并接收到令牌,但就在该行之后,始终有一条错误行:
    注册远程通知失败

  • 当我向该令牌发送消息时,它不会显示任何通知,仅在日志中,我可以看到:
    FCM:Received message

  • 此外,这是我在Unity上启用远程通知的iOS设置:

    这是我在Unity cloud build上的后期构建脚本

    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环境授权的情况下,如果使用Xcode或cloud build,则将此授权添加到iOS版本的过程会有所不同

    您可以在此处找到解决方案: