如何防止 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.TokenReceived
或 FirebaseMessaging.MessageReceived
都会触发权限对话框。所以你必须尽可能地延迟那个电话。将 FirebaseMessagingAutoInitEnabled
设置为 false 没有帮助
我一直在 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.TokenReceived
或 FirebaseMessaging.MessageReceived
都会触发权限对话框。所以你必须尽可能地延迟那个电话。将 FirebaseMessagingAutoInitEnabled
设置为 false 没有帮助