每次在 firebase 实时数据库中添加新孩子时使用 firebase 函数发送推送通知不起作用
Posted
技术标签:
【中文标题】每次在 firebase 实时数据库中添加新孩子时使用 firebase 函数发送推送通知不起作用【英文标题】:sending push notification using firebase functions every time a new child is added in firebase realtime database is not working 【发布时间】:2020-09-24 06:53:04 【问题描述】:每次创建孩子都没有成功时,我都会尝试发送推送通知。 我正在创建一个带有 2 个标记名称的孩子,它们之间有一个问号,并尝试向这些标记发送通知。 从我正在使用的手机中获取令牌
new FirebaseMessaging().getToken()
.
这里是 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!");
// );
// The Cloud Functions for Firebase SDK to create Cloud Functions and setup triggers.
const functions = require('firebase-functions');
// The Firebase Admin SDK to access Cloud Firestore.
const admin = require('firebase-admin');
admin.initializeApp();
exports.onNewMessage = functions.database.
ref('/messages/pushId')
.onCreate((snapShot,context)=>
var str = snapShot.key();
var res = str.split("?");
// Notification details.
const payload =
notification:
title: 'title!',
body: `body!`,
click_action: 'FLUTTER_NOTIFICATION_CLICK'
;
// Send notifications to all tokens.
admin.messaging().sendToDevice(res[0], payload);
admin.messaging().sendToDevice(res[1], payload);
);` .
【问题讨论】:
【参考方案1】:这可能有很多 if-then,但我将在这里描述最常见的错误来源
1) 没有为 iOS/Android 平台的通知授予权限。对于 android,这很好,并且相对容易接收通知,但对于 ios,您需要开发者帐户才能做到这一点(在 2019 年 12 月,它是每年 99 美元)
2) 我建议使用主题订阅 而不是标记化(即 .getToken()),因为它消除了手动跟踪每条发送的消息的负担
例如:
final fbmsg = FirebaseMessaging();
fbmsg.requestNotificationPermissions();
fbmsg.configure(onMessage: (msg)
print(msg);
return;
, onLaunch: (msg)
print(msg);
return;
, onResume: (msg)
print(msg);
return;
);
fbmsg.subscribeToTopic('chats');
您可以根据自己的需求配置 onLaunch、onResume 和 onMessage 行为
对于 (1) 和 (2),一个很好的起点是关注 firebase_messaging 库的 documentation
3) 我对此不确定,但我认为使用index.js
文件的更好方法可能是使用您收到的快照(或至少尝试 console.log()无论您检查有效性)。但是,如果它对您有用,请忽略此步骤 :) 下面我将我的应用程序中的代码附上工作通知
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.myFunction = functions.firestore
.document('chats/message')
.onCreate((snapshot, context) =>
return admin.messaging().sendToTopic('chats',
notification:
title: snapshot.data().username,
body: snapshot.data().text,
clickAction: 'FLUTTER_NOTIFICATION_CLICK'
,
);
);
4)我很难建立这个 Firebase Functions 功能,还要检查它们的安装步骤
5)检查您尝试发送通知的方式,首先尝试从控制台模拟它,确保接收部分正常,然后尝试创建一个自动化的
希望对您有所帮助!
【讨论】:
以上是关于每次在 firebase 实时数据库中添加新孩子时使用 firebase 函数发送推送通知不起作用的主要内容,如果未能解决你的问题,请参考以下文章
向 Firebase 实时数据库添加新值时如何保存当前日期/时间