Android Firebase云端函数多次发送通知

By simon at 2018-02-07 • 0人收藏 • 45人看过

我正在使用Firebase云端函数发送推送通知。我在尝试着 从一个设备发送通知给另一个wh用户进行预订 出现在背景中。用户时我正在调用以下函数 按“书”。我是一个另外写一些孩子数据到一个单独的“预订” 节点来存储预订细节。

private void notifyInstructor() {
    HashMap<String, String> notificationsData = new HashMap<String, String>();
    notificationsData.put("from", sender_user_id);
    notificationsData.put("type", "request");
    notificationReference.child(reciever_user_id).push().setValue(notificationsData).addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {

        }
    });
}
通知似乎大部分时间都在发送,但是当他们发送时 在接收设备上出现3次,在“通知”节点出现3次在 数据库和3次日志。有时他们根本不出现。 [数据库中的通知结构有3个从一个 预订](https://i.stack.imgur.com/Gxg8z.png)
    exports.sendNotifications = functions.database.ref('/Notifications/{reciever_id}/{notification_id}').onWrite(event => {
  const reciever_id = event.params.reciever_id;

  const notification_id = event.params.notification_id;

  console.log('We have a notification to send to : ', reciever_id);

  if(!event.data.val())
  {
      return console.log('A notification has been deleted from the database : ', notification_id);
  }

  const deviceToken = admin.database().ref(`/users/${reciever_id}/device_token`).once('value');

  return deviceToken.then(result =>
  {
      const token_id = result.val();

      const payload = 
      {
          notification:
          {
              title: "Lesson Request",
              body: "You have a new lesson request.",
              icon: "default"
          }
      };

      return admin.messaging().sendToDevice(token_id, payload)
                    .then(response =>
                    {
                            console.log('This was the notification feature.');
                    });
});
我已经检查了firebase控制台和我的日志它看起来好像是 函数也在这里运行3次,所以我不能告诉我的问题是否在 index.js文件或在某处我的Java。 [日志文件](https://i.stack.imgur.com/Av6Wi.png) 真的很感激任何帮助!谢谢

1 个回复 | 最后更新于 2018-02-07
2018-02-07   #1

写入Firebase DB的数据是asynchronous.云 每次有变动时都会触发函数e在节点下的数据 'Notifications/'。由于“Notifications/”下有三个子节点,所以有三个 通知将被触发。你可以尝试改变:

exports.sendNotifications = functions.database.ref('/Notifications/{reciever_id}/{notification_id}')
.onWrite(event => {...}
 exports.sendNotifications = functions.database.ref('/Notifications/{reciever_id}/{notification_id}')
    .onCreate(event =>{...}
这将发送第一次写入通知的路径。

登录后方可回帖

Loading...