当实时数据将由FCM更改时,如何在android中获取通知?

时间:2019-07-24 03:44:11

标签: javascript android node.js firebase-realtime-database firebase-cloud-messaging

我正在尝试在Firebase实时数据库更改时在android设备中设置推送通知。 假设,如果已安装的应用程序被杀死或在后台运行,如果任何用户在组中发布消息(“发布”节点中添加了新的子项),并且如果该组具有名为currentUid的子项,则我将收到通知。

这是一个发布节点,用户可以在其中发布消息。

"Post": 
    "pushId":{
              "message": "this is a group post"
             },
    "pushId2":{
              "message": "this is a group post2"
             },

这是用户的组节点。

"Group": {
            "gkgekugkiwughkiguvwvhvuh": true,
            "***currentUSERID***": true,
            "wkuuwkbuerkigubgi3ugnbgk": true
        },

所以我如何使用FCM来完成此功能

1 个答案:

答案 0 :(得分:0)

您可以通过编写云功能来做到这一点。

1)将device_token添加到您的用户节点。

Demo

2)编写一个云函数,一旦创建数据,该函数将被调用,并将向接收者发送通知。

    export const onMessageAdded = functions.database.
         ref('/chat/{whichNodes}/{chatId}').onCreate((snapShot, context) => {

 var message = {
                apns: {
                    payload: {
                        aps: {
                            alert: {
                                title: "Easee",
                                body: nameToNotify + " has sent you message",
                            },
                            sound: '1',
                            badge: 1,
                        },
                        notification: {
                            senderId: messageDataForUserOne.senderId + '',
                            receiverId: messageDataForUserOne.receiverId + '',
                            notificationMessage: messageDataForUserOne.message + '',
                            name: nameToNotify,
                            notificationType: "Push"
                        }
                    }
                },
                android: {

                    data: {
                        senderId: messageDataForUserOne.senderId + '',
                        receiverId: messageDataForUserOne.receiverId + '',
                        notificationMessage: messageDataForUserOne.message + '',
                        name: nameToNotify,
                        notificationType: "Push"
                    }
                },
                token: userDeviceToken
            };

            admin.messaging().send(message).then(suc => {
                console.log('Notification send Successfuly.' + suc)
            }).catch(errorr => {
                console.log('Notification Failed.' + userDeviceToken
                )
            })
        }