【发布时间】:2018-05-16 02:17:47
【问题描述】:
我的应用有一个会员系统(会员类型包括A、B、C),我使用Firebase FCM向我的应用推送通知。
如果用户使用 A 登录,我将使用 FirebaseMessaging.getInstance().subscribeToTopic("A"); 和 unsubscribeFromTopic("B"); unsubscribeFromTopic("C");
它运行良好,直到我发现如果设备的 API >=26 我的应用通知将不会显示。原因是设置频道是最新安卓版本的重要更新。
我已经更改了我的通知代码,就像这样:
// 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 获取,那么我应该设置通道 B 或 C。
但是成员类型 A 应该只能从 A 获得,所以我找到了官方 doc talk aout 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"); unsubscribeFromTopic("C"); 是什么意思
我应该为 API >=26 编写另一个代码 setChannel(id); 和 deleteNotificationChannel(id); 吗?
任何建议将不胜感激。提前致谢。
【问题讨论】:
-
您是否尝试过保持频道 ID 不变并只是玩主题订阅/取消订阅?
-
AFAIU 主题与兴趣相关,而频道只是获取特定类型/类别通知的媒介,与兴趣无关。如有错误请指正
-
感谢您的回复,您的
Channel ID表示FCM注册ID,对吗? -
没有。它只是一个 INT val,例如1、2 或 ..
-
不,我之前没试过。你的意思是
setChannelId("A");?但应该是字符串参数,我还是试试setChannelId("1");' When send notification fromFCM`,我的应用日志会显示No channel found。
标签: android firebase firebase-cloud-messaging android-notifications