android - 在 Firebase Cloud Messaging 中,消息 ID 是什么以及我们在哪里使用 addData()

标签 android firebase firebase-cloud-messaging

Firebase 提供的例子是:

Your Android app can send an upstream message using FirebaseMessaging.send:

FirebaseMessaging fm = FirebaseMessaging.getInstance();
fm.send(new RemoteMessage.Builder(SENDER_ID + "@gcm.googleapis.com")
  .setMessageId(Integer.toString(msgId.incrementAndGet()))
  .addData("my_message", "Hello World")
  .addData("my_action","SAY_HELLO")
  .build());

1:

他们已经解释了消息 ID 是什么:

A message ID that should be unique for each sender ID.

但是,我没有准确地理解它们的意思。所以,每次我发送消息时,这个数字都会增加?是什么原因?我在哪里存储这个值?


2:

他们还有 addData() 方法,但我不完全理解它的作用。将接受对此方法的完整、详细的解释。

最佳答案

1:

消息 ID(顾名思义)是您从设备发送的消息的标识符,用于区分每条消息。他们还刚刚提到,每封邮件对于每个发件人 ID 都应该是唯一的

例如,您有 2 个发件人 ID,每个发件人 ID 都可以有一个值为 1 的消息 ID,但该消息 ID 不应在同一个发件人 ID 中重复。

从技术上讲,您的实现是在发送消息之前递增消息 ID 的值。它在简单上游消息的示例代码中不可见,但用于 msgId 变量的数据类型是 AtomicInteger,如 Sending upstream messages to device groups 的文档中所示。 :

FirebaseMessaging fm = FirebaseMessaging.getInstance();
String to = aUniqueKey; // the notification key
AtomicInteger msgId = new AtomicInteger();
fm.send(new RemoteMessage.Builder(to)
  .setMessageId(msgId)
  .addData("hello", "world")
  .build());

incrementAndGet() 确保 AtomicInteger 的值在使用前递增,使其在每次调用时都不同(唯一)。 (有关使用 AtomicInteger 的更多想法,请参见 post)

我不完全确定将它存储在哪里。在我看来,由于消息是要发送到您的应用服务器的,因此您应该在收到消息后将其存储在那里。


2:

addData() 是您包含要发送的消息的键值对的地方。详细信息、内容或您打算发送到应用服务器的任何内容。

将其视为下游消息传递的 data 有效负载。

关于android - 在 Firebase Cloud Messaging 中,消息 ID 是什么以及我们在哪里使用 addData(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40550600/

相关文章:

android - 为什么我得到 getDatabaseLocked?

javascript - Firestore 网络无法到达 Firestore 后端

java - 等待并继续?

java - 菜单按钮不起作用

android - 在 Android 中从 Picasso 下载多张图片

node.js - 部署错误 Node.js 8 ...函数部署出现以下函数错误 : dialogflowFirebaseFulfillment

ios - 我正在尝试创建自定义 firebase 数据库类,但不断出现错误

javascript - 如何在 javascript 中更新 firebase-messaging-sw.js

android - 使用 AWS SNS 的 Firebase 云消息传递

amazon-web-services - 如何通过 AWS SNS 发送高优先级推送通知