【问题标题】:How to prevent Firebase Cloud Messaging ask for push notifications permission on iOS/Unity如何防止 Firebase Cloud Messaging 在 iOS/Unity 上请求推送通知权限
【发布时间】:2020-03-31 13:29:05
【问题描述】:
我一直在 Unity 的一个项目中工作,但我遇到了 iOS 问题。我已经在我的游戏中实现了本地推送通知,它会在游戏后期请求推送通知的权限。在我实施 Firebase Cloud Messaging 之后,这个顺序发生了变化。现在一开始,游戏就要求推送通知。有什么办法可以防止在游戏开始时要求许可?我想在游戏后期请求许可。
提前致谢。
【问题讨论】:
标签:
ios
firebase
unity3d
push-notification
firebase-cloud-messaging
【解决方案1】:
初始化 Firebase 不会触发权限对话框。您需要检查代码中您请求授权以显示通知的位置。
假设 iOS 10 或更高版本,请在 UNUserNotificationCenter 上查找 requestAuthorization 调用。这就是触发推送通知请求的原因。
【解决方案2】:
创建一个PostProcessBuild,您可以在其中编辑info.plist 生成的XCode 项目并将条目设置FirebaseMessagingAutoInitEnabled 添加到false。您可以查看this 了解有关如何添加/编辑 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 的初始化和请求权限,因此您可能必须在实际收到任何推送通知之前重新启动游戏(我尚未对其进行测试,所以我不确定)。
【解决方案3】:
每个带有 FirebaseMessaging 引用的调用,例如 FirebaseMessaging.TokenReceived 或 FirebaseMessaging.MessageReceived 都会触发权限对话框。因此,您必须尽可能长时间地延迟该呼叫。将FirebaseMessagingAutoInitEnabled 设置为 false 无济于事