Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从客户端应用程序禁用Unity中的Firebase推送通知?_Firebase_Unity3d_Firebase Cloud Messaging - Fatal编程技术网

如何从客户端应用程序禁用Unity中的Firebase推送通知?

如何从客户端应用程序禁用Unity中的Firebase推送通知?,firebase,unity3d,firebase-cloud-messaging,Firebase,Unity3d,Firebase Cloud Messaging,我已经将Firebase集成到Unity项目中,并且一切正常。如果用户想在他的应用程序中禁用推送通知,我想集成禁用推送通知。我还没有在代码中找到解决方案,还有一个问题与我的问题相同,因此我将发布一个新的问题,以防有人提出解决方案。有两种类型的消息可以使用FCM发送:通知消息和数据消息 如果您的应用处于活动状态,通知消息将传递到您的应用程序代码,该代码可以决定如何处理该应用程序。当应用程序未激活时,系统会自动显示通知消息。没有办法抑制这种行为 数据消息总是传递到应用程序代码中,应用程序代码可以决定

我已经将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)
                );
            }
        });
    }