Flutter:数据更改时的 Firebase 推送通知
Posted
技术标签:
【中文标题】Flutter:数据更改时的 Firebase 推送通知【英文标题】:Flutter: Firebase Pushnotification On Data Change 【发布时间】:2018-11-12 18:51:57 【问题描述】:收到评论后,我已将此以下代码部署到我的 firebase 项目中,并且已成功部署!但是没有通知发送给我。 请在此处查看我的 Firebase 实时数据库屏幕截图以获得更好的理解。
[现已解决:它将仅向一个 ID 即我的管理设备发送通知]
工作代码:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firbase);
exports.codeformypeople = functions.database.ref('items/id').onWrite(evt =>
const payload =
notification: title: 'New Customer Requested', body: 'Touch to Open The App', badge: '1', sound: 'default',
;
const token ="Lsn-bHfBWC6igTfWQ1-h7GoFMxaDWayKIpWCrzC";//replace with ur token
if (token)
console.log('Toke is availabel .');
return admin.messaging().sendToDevice(token, payload);
else
console.log('token error');
);
[
更多详情请查看VIDEO LINK
注意:如果您的应用程序已打开并最小化,则会显示通知,但如果应用程序已打开并且您正在使用,或者应用程序被终止强制关闭,则它将无法正常工作!!
【问题讨论】:
【参考方案1】:您可以使用 firebase 云功能来触发通知。这是我用来触发通知的云函数的 sn-p:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.pushNotification = functions.database.ref('/Notifications/pushId')
.onWrite(( change,context) =>
console.log("Push Notification event triggered");
var request = change.after.val();
var payload =
data:
username: request.userName,
;
admin.messaging().sendToDevice(request.userTokenId, payload)
.then(function(response)
console.log("Successfully sent message: ",response);
console.log(response.results[0].error);
)
.catch(function(error)
console.log("Error sending message: ", error)
)
)
下面我提供了我的通知结构,你可以在下面看到。如果有新的数据被推送到数据库通知节点,这个函数将触发。要查看触发此功能时得到的输出/错误,请转到 firebase 管理面板 > 功能 > 日志。
您已经完美地部署了函数代码,但是您忘记在数据库中添加刷新 tokenId,如上图所示,我将 userTokenId
保存在我的数据库中,而在函数 admin.messaging().sendToDevice(request.userTokenId, payload)
中,我正在使用该 tokenId,该 tokenId用于向特定设备发送通知,您可以使用 FirebaseInstanceId.getInstance().getToken()
获取此 tokenId 并将其保存在您的 fbproject1 > items
数据库结构中。请参考this & this
【讨论】:
@RajeshJr。此代码不是android原生代码,此代码是firebase云功能,您必须在firebase控制台的firebase函数中写下,当您从flutter代码中将任何数据添加到通知数据库节点时,此功能将触发并且通知将被发送 @RajeshJr。请检查我更新的答案,如果您需要任何帮助,请告诉我。 @RajeshJr。请检查我更新的答案,如果您需要任何帮助,请告诉我。admin.messaging().sendToDevice(request.body, payload)
在此您的第一个参数应该是 tokenId,第二个参数是您的有效负载。
如果你想只向一个人发送通知而不是没有办法,你将不得不使用tokenId,但如果你想基于主题发送通知,你可以将admin.messaging().sendToDevice(request.userTokenId, payload)
更改为admin.messaging().sendToTopic(topicname,payload)
。希望这会对你有所帮助。以上是关于Flutter:数据更改时的 Firebase 推送通知的主要内容,如果未能解决你的问题,请参考以下文章
Flutter - 将 Firebase 通知推送给没有 Firebase 身份验证的特定用户
Flutter - 使用提供程序包侦听 Firebase 用户的用户配置文件(Firestore)中的数据更改
Flutter 和 Firebase。数据更改时重建小部件。错误的代码或错误的数据库? [关闭]