简体   繁体   中英

tokens must be a non-empty array at FirebaseMessagingError.FirebaseError

I can't figure out the issue why my tokens list remains empty! I have a collection of users with a field of role to each document. I am iterating over those documents, to check which document field role is equal to shipper in order to retrieve token. So that I could sendMulticast notifications to each shipper device. My order snapshot also contains the shipper tokens as well I am iterating over users collections to grab token for pushing into the list but both of them aren't pushing data into list. Here's my cloud function code:

exports.notifyShipper= functions.firestore.document('/orders/{documentId}')
.onCreate(async (snap,context) => {
    functions.logger.log('Sending Notifications to the shippers');

    var shipperTokens=[];

    await admin.firestore().collection("users").get().then(snapshot => {

    snapshot.forEach(doc => {
       if(doc.role =='shipper'){
         shipperTokens.push(doc.token);
         functions.logger.log(doc.token);
       }
    });

  });
  Array.prototype.push.apply(shipperTokens, snap.shipperTokens);
  functions.logger.log(snap.shipperTokens.toString());

  //   const tokensOfShippers = [
  //   'd7M5eixYQYCmXgDx1rOmKc:APA91bHUELrCtEIHHcoQnQ9p5SqqpeZbKpUe60OyGPlZ4GZ9cm5wosfTZFoHV7NcDm2-5Sowpck2YCIkpzZ7ku3u6LSk9tODHA54OrawxNvOQqlK-x7W6VE4wsAS5KCtK4JPtg2nRfCg',
  //  'cBPUl8FzTJaQx8Mg_CkPbv:APA91bG0bZu7lD8EAxExTqcnJfZjpl71YdtfjdugwREGo-sO8URbjJILRc_DHY61wKJlnYGWCjbKdieKpvPJd5rtaPYa6rBHo1JQqiToVGs4WGd-2D3Y-bMVIzzU8TIzR772oTAUiyR7',
  //  'cuJAUqqCRKq77UsbBS6kZD:APA91bEDWjSR4z9yUSfFg-FpOPMA3VXsyjJ613Etv5MhpV31nsSP5hhgumWmsoLKGh1_TbP3yd9KDU7vO4DYqW5mJpSjPKzllBuw7I-lEAY6UYasJKQXv9DZt82agPyr7oac-JBC_XMr',
  //  'erYeroRkRM-s9y70l8cFqd:APA91bGzT_nT-kWUBXTBX-aDtN8Ew5ypDpbDFWcQw6O5zo4jFQFnMy2_E4Lt5GYVJXcaudK8u7LhkoQadjlfmxtG9jhIhCCch2o850UJcCqrCiNz7muBwKcp0E-y3MrHz9iAAJZ_4uJ3'
  //   ];
    await admin.messaging().sendMulticast({
         tokens : shipperTokens,
          notification: {
              title: "Hi TELLOO Shipper",
             body: "We recieved an order, please have a look on the dashboard!",
               imageUrl: "https://en.pimg.jp/040/171/400/1/40171400.jpg",
        }
   });
});

This is the complete error that I'm facing in logs:

Error: tokens must be a non-empty array
    at FirebaseMessagingError.FirebaseError [as constructor] (/workspace/node_modules/firebase-admin/lib/utils/error.js:44:28)
    at FirebaseMessagingError.PrefixedFirebaseError [as constructor] (/workspace/node_modules/firebase-admin/lib/utils/error.js:90:28)
    at new FirebaseMessagingError (/workspace/node_modules/firebase-admin/lib/utils/error.js:279:16)
    at Messaging.sendMulticast (/workspace/node_modules/firebase-admin/lib/messaging/messaging.js:301:19)
    at /workspace/index.js:391:53
    at processTicksAndRejections (internal/process/task_queues.js:95:5) 

If you look at the Firebase documentation on reading multiple documents , you'll see that it uses the data() function on each DocumentSnapshot to get at the fields of that document.

So your doc.role and doc.token should instead of doc.data().role and doc.data().token .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM