如何通过getUser()访问firebase中的用户配置文件信息

时间:2017-11-11 19:35:07

标签: javascript node.js firebase-cloud-messaging

我正在使用云功能作为向我的应用发送用户推送通知的方法。我正在关注Google Here设置的模板。我遇到的问题是我不太了解Javascript并且我的用户配置文件数据存储在配置文件节点中。当我调用 getUser()函数时,我无法访问配置文件节点中的用户信息。如何访问用户配置文件节点中的数据,以便我可以显示他们的用户名"和" profileImage"在推送通知中。

数据结构

users / uid / profile / Dictionary(此处为数据的键/值对)。

Google数据结构

用户/ UID /显示名

云功能:

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

exports.sendPushNotificationRep = functions.database.ref('/recieved-friend-requests/{userId}/{friendId}').onWrite(event => {

const userID = event.params.userId;
const friendID = event.params.friendId;


if (!event.data.val()) {
    return;
}

const getDeviceTokensPromise = admin.database().ref(`/users/${userID}/fcmToken`).once('value');


// Get the follower profile.
const getRepProfilePromise = admin.auth().getUser(friendID);


return Promise.all([getDeviceTokensPromise, getRepProfilePromise]).then(results => {
    const tokensSnapshot = results[0];
    const friend = results[1];

    if (!tokensSnapshot.hasChildren()) {
        return console.log('There are no notification tokens to send to.');
    }

    const payload = {
        notification: {
            title: 'Rep Request!',
            body: `${friend.username} sent you a request`,
            badge: '1',
            sound: 'default',
            icon: 'logo3'
        }
    };

    const tokens = Object.keys(tokensSnapshot.val());

    // Send notifications to all tokens.
    return admin.messaging().sendToDevice(tokens, payload).then(response => {
        // For each message check if there was an error.
            const tokensToRemove = [];
            response.results.forEach((result, index) => {
            const error = result.error;
             if (error) {
                 console.error('Failure sending notification to', tokens[index], error);
            // Cleanup the tokens who are not registered anymore.
            if (error.code === 'messaging/invalid-registration-token' ||
                error.code === 'messaging/registration-token-not-registered') {
                tokensToRemove.push(tokensSnapshot.ref.child(tokens[index]).remove());
                 }
             }
        });
        return Promise.all(tokensToRemove);
    });
});

});

0 个答案:

没有答案