【问题标题】:Cloud Function No Logging云功能无日志记录
【发布时间】:2021-08-24 20:56:23
【问题描述】:

当我的 Firebase 实时数据库发生变化时,我正在尝试创建 FCM。云函数代码粘贴在下面。到目前为止没有显示任何通知,所以我正在尝试查看云功能是否正确。但是,我在 Firebase 控制台上也没有看到日志,因此调试很困难。任何人都可以提供为什么日志没有显示的见解吗?部署完成,没有问题。

const functions = require("firebase-functions");
const admin = require('firebase-admin');

admin.initializeApp(functions.config.firebase);


exports.notificationFCM = functions.database.ref('/chats/{userId}').onCreate(async (snapshot, context) => { 
  const userId = context.params.userId;
      const payload = {
        notifiction: {
          title: `New message`,
          body: `Click to check your message!`,
          badge: `1`,
          sound: `default`
        }
        };
     
     const token = await admin.database()
    .ref(`tokens/${userId}`)
    .once('value');
  if (token.val().deviceToken != null) {
    console.log(userId);
    console.log('Sucess');
    return admin.messaging().sendToDevice(token.val().deviceToken, payload);

  }
  else {
    console.log('No token avaliable');
    console.log(userId);
  }
});

package.json

{
  "name": "functions",
  "description": "Cloud Functions for Firebase",
  "scripts": {
    "serve": "firebase emulators:start --only functions",
    "shell": "firebase functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "engines": {
    "node": "14"
  },
  "main": "index.js",
  "dependencies": {
    "firebase-admin": "^9.8.0",
    "firebase-functions": "^3.14.1"
  },
  "devDependencies": {
    "firebase-functions-test": "^0.2.0"
  },
  "private": true
}

【问题讨论】:

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


    【解决方案1】:

    您的代码中有两个问题可能会阻止云函数正常工作:

    1. 您声明有效负载的方式有误:const payload = {notifiction:... 应为 const payload = {notification:... 并带有 a

    2. 自 Firebase SDK for Cloud Functions v 1.0 起,您在初始化时无法再传入 functions.config().firebase。请参阅doc


    此外,您应该在else 集团中返回一些内容,例如:

      if (token.val().deviceToken != null) {
        //...
      }
      else {
        console.log('No token avaliable');
        console.log(userId);
        return null;
      }
    

    您应该添加一个try/catch 块以便能够调试您的代码:

    exports.notificationFCM = functions.database.ref('/chats/{userId}').onCreate(async (snapshot, context) => {
    
        try {
            // Your code
        } catch (error) {
            console.log(error);
            return null;
        }
        
    });
    

    【讨论】:

    • 感谢 Renaud,我已经进行了这些更改。控制台日志显示:TypeError: token.val is not a function。由于我使用的是 Firebase RTDB,token.val() 应该是一个正确的调用,你知道这里可能出了什么问题吗?
    • Mmmhhh...确实token.val() 是正确的语法,它应该可以工作...您确定您已更新到 Firebase SDK for Cloud Functions > 1.0 的版本吗?你在package.jsonfile 中看到了什么?
    • 我用 package.json 文件更新了原帖
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    • 2011-04-01
    相关资源
    最近更新 更多