APP Bird
APP Bird

Reputation: 1381

Firebase Cloud Functions get updated document Details

I'm trying to write a cloud function where if my app changed some string in user's firestore DB. A cloud function need to send a push notification. Database architecture is Messages => {UID} => UpdatedMessages . The problem is I cannot figure How to retrive which updateMessage under which UID has been updated.

  const functions = require('firebase-functions');
const admin = require('firebase-admin')
admin.initializeApp()
const toUpperCase = (string)=> string.toUpperCase()
var registrationToken = 'dfJY6hYzJyE:APdfsdfsdddfdfGt9HMfTXmei4QFtO0u1ePVpNYaOqZ1rnDpB8xfSjx7-G6tFY-vWQY3vDPEwn_iZVK2PrsGUVB0q9L_QoRYpLJ3_6l1SVHd_0gQxJb_Kq-IBlavyJCkgkIZ';
exports.sendNotification  = functions.firestore
    .document('messages/{userId}/{updatedMessage}')
    .onUpdate((change, context) => {

var message = {
  data: {
    title: 'Update',
    body: 'New Update'
  },
  token: registrationToken
};

// Send a message to the device corresponding to the provided
// registration token.
admin.messaging().send(message)
  .then((response) => {
    // Response is a message ID string.
    console.log('Successfully sent messagesssss:', response);
  })
  .catch((error) => {
    console.log('Error sending message:', error);
  });
    });

Simply I need to rerive "var registrationToken" from UID .

Upvotes: 1

Views: 388

Answers (1)

Renaud Tarnec
Renaud Tarnec

Reputation: 83163

You have to use the params property of the context object as follows

exports.sendNotification  = functions.firestore
    .document('messages/{userId}/{updatedMessage}')
    .onUpdate((change, context) => {


    const userId = context.params.userId;
    const updatedMessage = context.params.updatedMessage;

    var message = {
       data: {
          title: 'Update',
          body: updatedMessage //For example, use the value of updatedMessage here
       },
       //...
    };

    //IMPORTANT: don't forget to return the promise returned by the asynchronous send() method
    return admin.messaging().send(message)
    .then((response) => {
        // Response is a message ID string.
        console.log('Successfully sent messagesssss:', response);
        return null;
      })
      .catch((error) => {
        console.log('Error sending message:', error);
        return null;
      });


});

See https://firebase.google.com/docs/functions/firestore-events#wildcards-parameters and https://firebase.google.com/docs/reference/functions/functions.EventContext#params for more info.


About the remark in the above code noted as "IMPORTANT", you may watch the official Firebase video series here: https://firebase.google.com/docs/functions/video-series/. In particular watch the three videos titled "Learn JavaScript Promises" (Parts 2 & 3 especially focus on background triggered Cloud Functions, but it really worth watching Part 1 before).

Upvotes: 1

Related Questions