Cloud function completed successfully but notification does not show android

In the Android application, I use FCM to send notifications, the cloud function was successful, as shown in the firebase console log, but no notifications are displayed on my device, what could be the reason?

Below is the code of my index.js

let functions = require('firebase-functions');
let admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

exports.sendNotification = functions.database.ref('/notifications/messages/{pushId}')
.onWrite(event => {
     console.log('notifying start1');
    const message = event.data.current.val();
    const senderUid = message.from;
    const receiverUid = message.to;
    console.log('SenderId '+senderUid + ' Receiver Id '+receiverUid);
    const promises = [];
 console.log('notifying start2');
    if (senderUid == receiverUid) {
        //if sender is receiver, don't send notification
        promises.push(event.data.current.ref.remove());
        return Promise.all(promises);
    }
      console.log('notifying start3');
    const getInstanceIdPromise = admin.database().ref(`/users/${receiverUid}/accessToken`).once('value');
      console.log('notifying start4');
    const getReceiverUidPromise = admin.auth().getUser(receiverUid);
console.log('notifying start5');
    return Promise.all([getInstanceIdPromise, getReceiverUidPromise]).then(results => {
        const accessToken = results[0].val();
        const receiver = results[1];
        console.log('notifying ' + receiverUid + ' about ' + message.body + ' from ' + senderUid);
        const payload = {
            notification: {
                title: 'Firebase Notification',
                body: message.body,
            }
        };
        admin.messaging().sendToDevice(accessToken, payload)
            .then(function (response) {
                console.log("Successfully sent message:", response);
            })
            .catch(function (error) {
                console.log("Error sending message:", error);
            });   
            });
            });

Kind help! Thanks in advance.

+4
source share
1 answer

Had the same problem and couldn’t understand what was wrong, since the details of the error were not shown. ie {error: [Object]}

Successfully sent message: { results: [ { error: [Object] } ], 
                             canonicalRegistrationTokenCount: 0, 
                             failureCount: 1, 
                             successCount: 0, 
                             multicastId: 5487635521698134000 
                           }

Thus, the log was changed / added to the cloud function code to access error data, i.e. console.log(response.results[0].error);.

( ):

admin.messaging().sendToDevice(registrationToken, payload)
            .then(function(response) {
                console.log("Successfully sent message:", response);
                console.log(response.results[0].error);
            })
            .catch(function(error) {
                console.log("Error sending message:", error);
            });

:

{ Error: The provided registration token is not registered. A previously valid registration token can be unregistered for a variety of reasons. See the error documentation for more details. Remove this registration token and stop using it to send messages.
at FirebaseMessagingError.Error (native)
at FirebaseMessagingError.FirebaseError [as constructor] (/user_code/node_modules/firebase-admin/lib/utils/error.js:25:28)
at new FirebaseMessagingError (/user_code/node_modules/firebase-admin/lib/utils/error.js:130:23)
at Function.FirebaseMessagingError.fromServerError (/user_code/node_modules/firebase-admin/lib/utils/error.js:154:16)
at /user_code/node_modules/firebase-admin/lib/messaging/messaging.js:80:63
at Array.forEach (native)
at mapRawResponseToDevicesResponse (/user_code/node_modules/firebase-admin/lib/messaging/messaging.js:76:26)
at /user_code/node_modules/firebase-admin/lib/messaging/messaging.js:223:24
at process._tickDomainCallback (internal/process/next_tick.js:135:7)

errorInfo: 
   { code: 'messaging/registration-token-not-registered',
     message: 'The provided registration token is not registered. A previously valid registration token can be unregistered for a variety of reasons. See the error documentation for more details. Remove this registration token and stop using it to send messages.' } }

, ...

+2

Source: https://habr.com/ru/post/1680703/


All Articles