我的应用有一个会员系统(会员类型包括A,B,C),我使用Firebase JSONObject chartss = objData.getJSONObject("charts");
for(int i = 0; i < chartss.length(); i++) {
//what goes here??
}
将通知推送到我的应用。
如果用户使用A登录,我将使用import shelve
d = shelve.open(filename) # open -- file may get suffix added by low-level
# library
d[key] = data # store data at key (overwrites old data if
# using an existing key)
data = d[key] # retrieve a COPY of data at key (raise KeyError
# if no such key)
del d[key] # delete data stored at key (raises KeyError
# if no such key)
flag = key in d # true if the key exists
klist = list(d.keys()) # a list of all existing keys (slow!)
# as d was opened WITHOUT writeback=True, beware:
d['xx'] = [0, 1, 2] # this works as expected, but...
d['xx'].append(3) # *this doesn't!* -- d['xx'] is STILL [0, 1, 2]!
# having opened d without writeback=True, you need to code carefully:
temp = d['xx'] # extracts the copy
temp.append(5) # mutates the copy
d['xx'] = temp # stores the copy right back, to persist it
# or, d=shelve.open(filename,writeback=True) would let you just code
# d['xx'].append(5) and have it work as expected, BUT it would also
# consume more memory and make the d.close() operation slower.
d.close() # close it
和FCM
FirebaseMessaging.getInstance().subscribeToTopic("A");
它非常有效,直到我发现如果设备的API&gt; = 26,我的应用通知就不会显示出来。原因是设置频道是最新Android版本的重要更新。
我已更改了我的通知代码,就像这样:
unsubscribeFromTopic("B");
现在我可以在A {<1}}推送时显示通知。
显然,如果我想从B或C获得,那么我应该设置频道B或C.
但是成员类型A应该只能从A获得,所以我找到官方文档谈话aout unsubscribeFromTopic("C");
:
// 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
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
我应该只为API&gt; = 26编写另一个代码subscribeToTopic("A");
和unsubscribeFromTopic("B");
吗?
任何建议都将不胜感激。提前谢谢。
答案 0 :(得分:1)
这两件事都不一样,
主题订阅: 主题订阅与FCM相关,或者当任何人使用主题发送通知时我们可以说Firebase消息传递,他们决定我们需要提交消息的位置或需要发送的设备。
香奈儿订阅: 这与特定通知系统或与任何类型的服务器或云消息无关的设备有关。定义通道时,表示您在显示时定义通知组 如果您将主题定义为新闻,那么您将获得仅针对新闻主题广播的唯一通知,但您可以使用通知渠道或新闻子类别在不同的组中划分新闻。
答案 1 :(得分:0)
主题是群组消息的字符串标识符。发送有关某个主题的通知时,所有注册到该主题的设备都可以获取该主题。
新闻应用程序的开发人员可以使用此机制来允许用户选择感兴趣的主题以获取有关警报的信息,例如:天气,汽车,金融,犯罪等
虽然某些应用程序定义了用户自己可以订阅和退订的多个主题,但是某些应用程序使用此机制通过定义主题来向所有用户发送通知,并为该主题注册所有用户(硬编码)。
频道是一组设置,用于定义当通知到达设备时用户将如何收到警报。
通常,开发人员将为每个通道定义声音,振动,光线和更多设置。用户可以随时更改这些设置,甚至可以禁用来自特定频道的通知。
新闻应用程序的开发人员可能会定义一个具有振动和高声音的频道来发布新闻,同时创建一个低优先级的静音频道来促销