【发布时间】:2019-10-04 20:11:02
【问题描述】:
我已将 Firebase 集成到 Unity 项目中,并且一切正常。如果用户想在他的应用程序中禁用推送通知,我想集成禁用推送通知。我还没有在代码中找到解决方案,还有一个与我相同的未解决问题,所以我发布新问题以防万一有人提出解决方案。
【问题讨论】:
标签: firebase unity3d firebase-cloud-messaging
我已将 Firebase 集成到 Unity 项目中,并且一切正常。如果用户想在他的应用程序中禁用推送通知,我想集成禁用推送通知。我还没有在代码中找到解决方案,还有一个与我相同的未解决问题,所以我发布新问题以防万一有人提出解决方案。
【问题讨论】:
标签: firebase unity3d firebase-cloud-messaging
您可以使用 FCM 发送两种类型的消息:通知消息和数据消息。
如果您的应用程序处于活动状态,通知消息将传递到您的应用程序代码,该代码可以决定如何处理它。当应用程序未激活时,系统会自动显示通知消息。没有办法抑制这种行为。
数据消息总是传递到您的应用程序代码,它可以决定如何处理它们。
因此,如果您想允许用户禁止显示消息,您只需要发送数据消息,然后在您的应用程序代码中显示它们。
请注意,或者,您可以找到一种不向禁用通知的用户发送消息的方法。究竟如何做到这一点取决于您的实施。例如:如果您直接发送到 FCM 实例 ID 令牌,您可以跳过禁用推送通知的用户的令牌。如果您使用主题订阅来发送消息,您可以创建一个用户订阅的主题以禁用通知,然后create conditions to exclude delivery to that topic。
【讨论】:
我通过使用 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,但我尚未对此进行测试,因为使用订阅和取消订阅的方法对我有用。
【讨论】: