【发布时间】: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