如何防止 Firebase Cloud Messaging 在 iOS/Unity 上请求推送通知权限

How to prevent Firebase Cloud Messaging ask for push notifications permission on iOS/Unity

我一直在 Unity 中的一个项目中工作,但我遇到了 iOS 的问题。我已经在我的游戏中实现了本地推送通知,它会在游戏后期请求推送通知的权限。在我实施 Firebase Cloud Messaging 之后,这个顺序发生了变化。现在一开始,游戏要求推送通知。有什么办法可以防止在游戏开始时请求许可?我想在游戏后期请求许可。

提前致谢。

初始化 Firebase 不会触发权限对话框。您需要检查您在代码中的哪个位置请求显示通知的授权。

假设 iOS 10 或更高版本,在 UNUserNotificationCenter 上查找 requestAuthorization 调用。这就是触发推送通知请求的原因。

创建一个 PostProcessBuild,您可以在其中编辑 info.plist 生成的 XCode 项目,并将条目设置 FirebaseMessagingAutoInitEnabled 添加到 false。您可以查看 this 以获取有关如何 add/edit plist 的更多信息。

此外,将对 FirebaseMessaging 的任何引用移动到游戏中您想要请求权限的部分。

//If platform is not IOS, immediately set message listeners
#if !UNITY_IOS
SetPushNotificationListeners()
#endif

//Call this in the part of the game where you want the notifications to appear
public void SetPushNotificationListeners()
{
    //You might need FirebaseMessaging.RequestPermissionAsync() for IOS as well

    FirebaseMessaging.TokenReceived -= OnTokenReceived;
    FirebaseMessaging.TokenReceived += OnTokenReceived;

    FirebaseMessaging.MessageReceived -= OnMessageReceived;
    FirebaseMessaging.MessageReceived += OnMessageReceived;
}

我从 documentation 得到了 FirebaseMessagingAutoInitEnabled 但在我之前的测试中,似乎对 FirebaseMessaging 的任何引用仍然会请求权限。另请注意,这会延迟 FirebaseMessaging 的初始化和请求权限,因此您可能必须在实际收到任何推送通知之前重新启动游戏(到目前为止我还没有测试过,所以我不确定)。

每次调用 FirebaseMessaging 引用,如 FirebaseMessaging.TokenReceivedFirebaseMessaging.MessageReceived 都会触发权限对话框。所以你必须尽可能地延迟那个电话。将 FirebaseMessagingAutoInitEnabled 设置为 false 没有帮助