我的应用有一个成员(member)系统(成员(member)类型包括A、B、C),我使用Firebase FCM
向我的应用推送通知。
如果用户使用 A 登录,我将使用 FirebaseMessaging.getInstance().subscribeToTopic("A");
和 unsubscribeFromTopic("B");
unsubscribeFromTopic("C");
它工作得很好,直到我发现如果设备的 API >=26,我的应用程序通知将不会显示。原因是设置 channel 是最新安卓版本的重要更新。
我已经更改了我的通知代码,就像这样:
// For API >=26
NotificationManager mNotificationManager =
(NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel = new NotificationChannel(
"A",
"A",
NotificationManager.IMPORTANCE_HIGH);
channel.setDescription("description");
channel.enableLights(true);
channel.enableVibration(true);
Notification.Builder builder =
new Notification.Builder(mContext)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle(title)
.setContentText(message)
.setChannelId("A");
mNotificationManager.notify(1, builder.build());
}
现在,如果 FCM
从 A 推送,我可以显示通知。
显然,如果我想从 B 或 C 获取,那么我应该设置 channel B 或 C。
但成员类型 A 应该只能从 A 获取,所以我找到官方文档谈论 Delete a notification channel
:
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// The id of the channel.
String id = "my_channel_01";
mNotificationManager.deleteNotificationChannel(id);
我对此感到困惑,所以我的 FCM
subscribeToTopic("A");
和 unsubscribeFromTopic("B");
是什么意思? code> unsubscribeFromTopic("C");
我是否应该为 API >=26 编写另一个代码 setChannel(id);
和 deleteNotificationChannel(id);
?
如有任何建议,我们将不胜感激。提前致谢。
最佳答案
主题 是群组消息的字符串标识符。当发送关于某个主题的通知时,所有注册到该主题的设备都会收到它。
新闻应用程序的开发人员可能会使用此机制允许用户选择感兴趣的主题以获取有关以下方面的警报:天气、汽车、金融、犯罪等
虽然一些应用程序定义了用户自己可以订阅和取消订阅的多个主题,但一些应用程序使用这种机制向所有用户发送通知,通过定义一个主题,并将所有用户(硬编码)注册到这个主题。
channel 是一组设置,用于定义当通知到达设备时用户将如何得到提醒。
通常开发人员会为每个 channel 定义声音、振动、灯光和更多设置。用户可以随时更改这些设置,甚至可以禁用来自特定 channel 的通知。
新闻应用程序的开发者,可能会为突发新闻定义一个具有振动和高音量的 channel ,同时为促销创建一个低优先级的静音 channel
关于android - 通知设置 channel 和 FCM subscribeToTopic 有什么不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50361563/