Cloud Function已成功执行但通知未显示android

时间:2017-07-04 09:34:19

标签: android firebase firebase-cloud-messaging google-cloud-functions

在Android应用程序中,我使用FCM发送通知,云功能已成功执行,如firebase控制台日志所示,但在我的设备中它没有显示任何通知,可能是什么原因?

以下是我的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);
            });   
            });
            });

请帮忙!提前谢谢。

1 个答案:

答案 0 :(得分:8)

出现同样的问题并且无法理解错误,因为未显示错误详细信息,即{error:[Object]}

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

因此更改/添加了云功能代码中的日志以访问错误详细信息,即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.' } }

不确定您是否有同样的错误...