首页 > 解决方案 > 如何从客户端应用程序禁用 Unity 中的 Firebase 推送通知?

问题描述

我已将 Firebase 集成到 Unity 项目中,并且一切正常。如果用户想在他的应用程序中禁用推送通知,我想集成禁用推送通知。我还没有在代码中找到解决方案,还有一个与我相同的未解决问题,所以我发布新问题以防万一有人为此提供解决方案。

标签: firebaseunity3dfirebase-cloud-messaging

解决方案


我设法通过使用Firebase 消息传递主题并调用SubscribeAsync()UnsubscribeAsync()来做到这一点。

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)
                );
            }
        });
    }

然后在Firebase 控制台中创建消息时,使用 Topic 作为目标而不是 User Segment。

您也可以通过使用DeleteTokenAsync()删除 Firebase 令牌来禁用整个 Firebase,但我没有对此进行测试,因为使用订阅和取消订阅的方法对我有用。


推荐阅读