How to specify sound and click_action in firebase cloud function

你离开我真会死。 提交于 2020-03-22 09:06:09

问题


I tried with the following function (node.js v8):

exports.sendComNotification = functions.firestore
  .document('Comunicados/{comID}')
  .onUpdate((snap, context) => {
    console.log('Com triggered');
    const newValue = snap.after.data();
    const msg = newValue.title;
    var message = {
      notification: {
        title: 'Comunicado da Diretoria!',
        body: msg,
        badge: '1',
        sound: 'default',
        click_action: 'FLUTTER_NOTIFICATION_CLICK',
      },
      topic: "Comunicados"
    };
    return admin.messaging().send(message)
      .then((response) => {
        console.log('Successfully sent message:', response);
        return
      })
      .catch((error) => {
        console.log('Error sending message:', error);
        return
      });

  });

But that gives the following error in the fucntions log:

Error sending message: {
    Error: Invalid JSON payload received.Unknown name "badge"
    at 'message.notification': Cannot find field.
    Invalid JSON payload received.Unknown name "sound"
    at 'message.notification': Cannot find field.
    Invalid JSON payload received.Unknown name "click_action"
    at 'message.notification': Cannot find field.
    at FirebaseMessagingError.FirebaseError[as constructor](/srv/node_modules / firebase - admin / lib / utils / error.js: 42: 28)

If I take out "badge", "sound" and "click_action", it works, but then there's no sound upon receival and the actions defined in onResume (flutter app) don't fire either, of course. What would be the correct way of setting the sound and click_action props? Thanks in advance.


回答1:


Ok, I finally managed to gather bits and pieces here and there to make it work. Don't understand why the docs do not have a clear and direct path to such a common requirement.

exports.sendComNotification = functions.firestore
  .document('Comunicados/{comID}')
  .onCreate((snap, context) => {
    const doc = snap.data();
    const msg = doc.title;
    var message = {
      notification: {
        title: 'Comunicado da Diretoria!',
        body: msg
      },
      data: {
        title: 'Comunicado',
        body: msg
      },
      android: {
        notification: {
          sound: 'default',
          click_action: 'FLUTTER_NOTIFICATION_CLICK',
        },
      },
      apns: {
        payload: {
          aps: {
            badge: 1,
            sound: 'default'
          },
        },
      },
      topic: "Comunicados"
    };


    return admin.messaging().send(message)
      .then((response) => {

        console.log('Successfully sent message:', response);
        return
      })
      .catch((error) => {
        console.log('Error sending message:', error);
        return
      });

  });


来源:https://stackoverflow.com/questions/59204040/how-to-specify-sound-and-click-action-in-firebase-cloud-function

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!