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。数据更改时重建小部件。错误的代码或错误的数据库? [关闭]

Flutter Firebase Cloud Messaging - 应用程序在后台时的通知

Flutter:Firebase 如何更改查询和内容

实时数据库未将数据推送到 Firebase