【问题标题】:What's different with notification set channel and FCM subscribeToTopic?通知集通道和 FCM subscribeToTopic 有什么不同?
【发布时间】: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 from FCM`,我的应用日志会显示No channel found

标签: android firebase firebase-cloud-messaging android-notifications


【解决方案1】:

Topic 是组消息的字符串标识符。当发送有关某个主题的通知时,注册到该主题的所有设备都会收到它。

新闻应用程序的开发人员可能会使用此机制来允许用户选择感兴趣的主题以获取警报,例如:天气、汽车、金融、犯罪等

虽然有些应用程序定义了用户自己可以订阅和取消订阅的多个主题,但有些应用程序使用这种机制通过定义一个主题向所有用户发送通知,并将所有用户(硬编码)注册到该主题。

频道是一组设置,定义了当通知到达设备时用户将如何得到提醒。

通常开发人员会为每个通道定义声音、振动、灯光和更多设置。用户可以随时更改这些设置,甚至禁用来自特定频道的通知。

新闻应用程序的开发人员可能会为突发新闻定义一个具有振动和高声音的频道,同时为促销创建一个低优先级的静音频道

【讨论】:

    【解决方案2】:

    这两者是不同的,

    主题订阅: 主题订阅与 FCM 相关,或者当任何人使用主题发送通知时,我们可以说 Firebase 消息传递,他们决定我们需要在哪里提交消息或需要在哪个设备上发送消息。

    香奈儿订阅: 这与与任何类型的服务器或云消息无关的特定通知系统或设备有关。当您定义频道时,这意味着您在显示时定义通知组。
    如果您将主题定义为新闻,那么您将获得仅针对新闻主题广播的唯一通知,但您可以使用通知频道或新闻子类别将新闻划分为不同的组。

    【讨论】:

    • 感谢您的回复。您的意思是为通知设置频道只是一种分类,对吗?但我还是不明白这一点。为什么我的通知.setChannelId("B"); 比从 Firebase(哪个频道是 A)发送消息,我的通知不会显示出来?我必须.setChannelId("A");
    猜你喜欢
    • 2021-02-22
    • 2019-09-08
    • 2016-10-23
    • 1970-01-01
    • 2021-08-30
    • 2021-06-17
    • 1970-01-01
    • 2020-08-26
    • 1970-01-01
    相关资源
    最近更新 更多