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

时间:2019-05-17 13:22:49

标签: firebase unity3d firebase-cloud-messaging

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

2 个答案:

答案 0 :(得分:0)

您可以使用FCM发送两种消息:通知消息和数据消息。

如果您的应用程序处于活动状态,则通知消息会传递到您的应用程序代码,该代码可以决定如何处理。当应用程序未激活时,系统会自动显示通知消息。没有办法抑制这种行为。

数据消息始终传递到您的应用程序代码,应用程序代码可以决定如何处理它们。

因此,如果要允许用户禁止显示消息,则只希望发送数据消息,然后从应用程序代码中显示它们。

请注意,或者,您可以找到一种不向已禁用通知的用户传递消息的方法。具体如何执行取决于您的实现。例如:如果您直接发送到FCM实例ID令牌,则可以跳过已禁用推送通知的用户的令牌。而且,如果您使用主题订阅发送消息,则可以创建用户订阅的主题以禁用通知,然后创建create conditions to exclude delivery to that topic

答案 1 :(得分:0)

我通过使用 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 控制台中创建消息时,使用主题作为目标而不是用户细分。

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