【问题标题】:Cannot receive push notification using onCreate event in firebase reail time database无法在 Firebase 实时数据库中使用 onCreate 事件接收推送通知
【发布时间】:2019-11-08 04:40:06
【问题描述】:

我正在尝试实现下一个功能: 当我在我的 firebase 实时数据库中添加一条记录时,我想向我的设备发送推送通知。

我在 firebase 注册了我的设备,我已经通过 Firebase 控制台发送了一个测试推送通知 - 我在我的设备上收到了推送通知。

但是现在,当我部署 firebase 的下一个功能并尝试在 /user-chat 路径下添加记录时 - 我没有收到任何推送通知。为什么?如何调试/测试这个?

代码如下:

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';

admin.initializeApp(functions.config().firebase);

exports.sendPushNotification = functions.database
  .ref('/user-chat')
  .onCreate((event: any) => {

    const payload = {
        notification: {
            title: 'Title',
            body: 'come check it',
            badge: '0',
            sound: 'default',
        }
    };

    const token = 'myTestedVerifiedToken';

    return admin
      .messaging()
      .sendToDevice(token, payload)
      .then((response: any) => {
          // 
      });
  });

更新: 我已成功使用 nodejs 在本地将推送通知直接发送到我的设备。但是现在,当我将它包装到 onCreate 方法并尝试部署它时,使用firebase deploy 命令 - 我收到下一个错误:

Error: Error parsing triggers: Cannot find module './cargo-tender-firebase-adminsdk-8e307-c6b82762d2.json'

有什么问题?当我在本地运行脚本时,该路径有效。 代码如下:

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';

const serviceAccount = require('./cargo-tender-firebase-adminsdk-8e307-c6b82762d2.json');

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://cargo-tender.firebaseio.com"
});

exports.sendPushNotification = functions.database
  .ref('/user-chat')
  .onCreate((event: any) => {

    const payload = {
        notification: {
        title: 'Title',
        body: 'come check it',
        badge: '0',
        sound: 'default',
        }
    };
    return admin
      .messaging()
      .sendToDevice('fcI1JGvOQnI:APA91bFql_J3Vx3TEfJgO6cwk6nmHBLtVrRk1J3AjD6f3nr5F5ZAI2yAy2Iiz4zBpkIXET2WurO8cjU0PY9lUbrPtNkej_oDCzozwIx1y_CwHxre1f3rFvIzr5K414oqBHdkamA2249e', payload)
  });

【问题讨论】:

  • 您可能希望首先在本地运行一个简单的 Node.js 脚本,该脚本会发送带有 admin.messaging().sendToDevice(...) 的消息。如果您无法完成这项工作,那么它也绝对不会在 Cloud Functions 中工作。一旦它在本地工作,您就可以开始添加数据库触发器了。
  • 我无法在本地设置,请看这个:stackoverflow.com/questions/56768174/…
  • 我已经成功在本地发送推送通知,直接到设备,但是现在,当我尝试部署一些修改过的代码时,我收到一个错误:Error: Error parsing triggers: Cannot find module './cargo-tender-firebase-adminsdk-8e307-c6b82762d2.json'。我已将代码添加到线程中
  • 好的,我通过将 .json 文件向上移动一个文件夹并将路径设置为 ../cargo-tender-firebase-adminsdk-8e307-c6b82762d2.json(前面是双 ..)来修复此错误,但推送通知仍无法正常工作
  • 修复了,这个,我得把路径改成.ref('/user-chat/{anything}')

标签: typescript firebase push-notification firebase-cloud-messaging firebase-admin


【解决方案1】:

1) 我必须将服务帐户 .json 文件从 src 文件中移出,并在脚本中将其路径更改为父文件夹(双点 ..

2) 我不得不将参考路径更改为.ref('/user-chat/{anything}')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    相关资源
    最近更新 更多