如何从客户端应用程序禁用Unity中的Firebase推送通知?
我已经将Firebase集成到Unity项目中,并且一切正常。如果用户想在他的应用程序中禁用推送通知,我想集成禁用推送通知。我还没有在代码中找到解决方案,还有一个问题与我的问题相同,因此我将发布一个新的问题,以防有人提出解决方案。有两种类型的消息可以使用FCM发送:通知消息和数据消息 如果您的应用处于活动状态,通知消息将传递到您的应用程序代码,该代码可以决定如何处理该应用程序。当应用程序未激活时,系统会自动显示通知消息。没有办法抑制这种行为 数据消息总是传递到应用程序代码中,应用程序代码可以决定如何处理它们 因此,如果您希望允许用户抑制消息的显示,您将只希望发送数据消息,然后从应用程序代码中显示它们如何从客户端应用程序禁用Unity中的Firebase推送通知?,firebase,unity3d,firebase-cloud-messaging,Firebase,Unity3d,Firebase Cloud Messaging,我已经将Firebase集成到Unity项目中,并且一切正常。如果用户想在他的应用程序中禁用推送通知,我想集成禁用推送通知。我还没有在代码中找到解决方案,还有一个问题与我的问题相同,因此我将发布一个新的问题,以防有人提出解决方案。有两种类型的消息可以使用FCM发送:通知消息和数据消息 如果您的应用处于活动状态,通知消息将传递到您的应用程序代码,该代码可以决定如何处理该应用程序。当应用程序未激活时,系统会自动显示通知消息。没有办法抑制这种行为 数据消息总是传递到应用程序代码中,应用程序代码可以决定
请注意,您也可以找到一种方法,不向已禁用通知的用户传递消息。具体如何做到这一点取决于您的实现。例如:如果您直接向FCM实例ID发送令牌,则可以跳过已禁用推送通知的用户的令牌。如果您使用主题订阅发送消息,您可以创建一个用户订阅的主题以禁用通知,然后。我通过使用Firebase Messaging topic并调用和来做到这一点 然后在Firebase控制台中创建消息时,将主题作为目标,而不是用户段
您也可以通过使用删除Firebase令牌来禁用整个Firebase,但我还没有对此进行测试,因为使用subscribe和unsubscribe的方法对我有效。这是一个问题,我没有订阅主题,我只是在应用程序启动时初始化Firebase,并且(在应用程序之外)会收到通知。因此,我查看了firebase unity软件包,但没有找到一种方法可以调用以某种方式取消用户订阅。我看到的唯一一件事就是取消订阅一个主题,所以听起来像是在向FCM实例ID令牌发送我提到的通知消息。在这种情况下,当您的应用程序处于非活动状态时,无法抑制系统处理这些问题的方式。您必须发送数据消息才能控制这种情况下发生的情况。感谢您的澄清。我将阅读更多关于数据消息的信息,看看它们是否适合我的目的。基本上,我想发送通知,即使应用程序不活动,但给用户选择关闭它们。好的,明白了。还有一件事,到底什么是数据消息?我一直在查看控制台中的firebase Cloud Messaging选项,但我没有看到任何其他发送远程消息的方式,或者可能我找错了位置?控制台只能发送通知消息。看见
private void Start()
{
if ( notificationsAreOn )
InitFirebaseMessaging();
else
DisableFirebase();
}
private void DisableFirebase()
{
Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith( task =>
{
var dependencyStatus = task.Result;
if ( dependencyStatus == Firebase.DependencyStatus.Available )
{
FirebaseAnalytics.SetAnalyticsCollectionEnabled( false );
Firebase.Messaging.FirebaseMessaging.UnsubscribeAsync("VeryCoolTopic");
Firebase.Messaging.FirebaseMessaging.TokenReceived += null;
Firebase.Messaging.FirebaseMessaging.MessageReceived += null;
}
else
{
UnityEngine.Debug.LogError(
System.String.Format("Could not resolve all Firebase dependencies: {0}", dependencyStatus)
);
}
});
}
private void InitFirebaseMessaging()
{
Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith( task =>
{
var dependencyStatus = task.Result;
if ( dependencyStatus == Firebase.DependencyStatus.Available )
{
FirebaseAnalytics.SetAnalyticsCollectionEnabled( true );
Firebase.Messaging.FirebaseMessaging.SubscribeAsync("VeryCoolTopic");
Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
}
else
{
UnityEngine.Debug.LogError(
System.String.Format("Could not resolve all Firebase dependencies: {0}", dependencyStatus)
);
}
});
}