适用于Firebase和FCM的云功能

时间:2017-04-13 08:29:12

标签: javascript firebase firebase-realtime-database firebase-cloud-messaging google-cloud-functions

我最近开发了一个学校的应用程序,其中一个功能是校长的更新。为此,我正在使用Firebase数据库(在Android studio和Xcode上)。我听说有一个新的Firebase功能可以调用云功能,我听说我可以集成数据库和FCM。现在,我在index.js中有这个代码:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
// // Create and Deploy Your First Cloud Functions
// // https://firebase.google.com/docs/functions/write-firebase-functions
//
// exports.helloWorld = functions.https.onRequest((request, response) => {
//  response.send("Hello from Firebase!");
// });
exports.sendNotifications = functions.database.ref('/messageS/{id}').onWrite(event => {
  const snapshot = event.data;
  // Only send a notification when a message has been created.
  if (snapshot.previous.val()) {
    return;
  }

  // Notification details.
  const text = snapshot.val().text;
  const payload = {
    notification: {
      title: 'new message recived',
      body: text ? (text.length <= 100 ? text : text.substring(0, 97) + '...') : '',
      icon: '/app/src/main/res/drawable/logo_he_digita_homepage.png'
    }
  };

  // Get the list of device tokens.
  return admin.database().ref('fcmTokens').once('value').then(allTokens => {
    if (allTokens.val()) {
      // Listing all tokens.
      const tokens = Object.keys(allTokens.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(allTokens.ref.child(tokens[index]).remove());
            }
          }
        });
        return Promise.all(tokensToRemove);
      });
    }
  });
});

我收到登录Firebase控制台的日志,但是我没有在数据库中看到fcmTokens,并且设备没有收到通知。我该怎么办? 谢谢你的帮助。

0 个答案:

没有答案