javascript – Firebase功能,用于从Firebase DB获取数据以进行推送通知

前端之家收集整理的这篇文章主要介绍了javascript – Firebase功能,用于从Firebase DB获取数据以进行推送通知前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我与firebase数据库和Firebase云消息传递聊天应用程序.我可以通过控制台发送firebase通知,但在实际情况下,它应该是自动的.为了进行自动通知,我的朋友为我写了Index.js(在云函数添加)文件,但它没有发送通知.

根据我们的逻辑函数,只要有任何新条目(在任何节点或任何房间)都应该触发,并通过firebase函数获取这些值,并向FCM服务器发出post请求以通知接收方设备(从token_To获取接收方设备的值) ).

>消息
> Message_From
>时间
>类型
> token_To

Index.js

  1. var functions = require('firebase-functions');
  2. var admin = require('firebase-admin');
  3.  
  4.  
  5. var serviceAccount = require('./demofcm-78aad-firebase-adminsdk-4v1ot-2764e7b580.json');
  6. admin.initializeApp({
  7. credential: admin.credential.cert(serviceAccount),databaseURL: "https://demofcm-78aad.firebaseio.com/"
  8. })
  9.  
  10. // // Create and Deploy Your First Cloud Functions
  11. // // https://firebase.google.com/docs/functions/write-firebase-functions
  12. //
  13. // exports.helloWorld = functions.https.onRequest((request,response) => {
  14. // response.send("Hello from Firebase!");
  15. // });
  16. exports.setUserNode = functions.auth.user().onCreate(event => {
  17. // ...
  18. });
  19.  
  20. exports.notifyMsg = functions.database.ref('/{chatroom}/{mid}/')
  21. .onWrite(event => {
  22.  
  23. if (!event.data.val()) {
  24. return console.log('Message Deleted');
  25. }
  26.  
  27. const getDeviceTokensPromise = admin.database().ref('/{chatroom}/{mid}/token_to').once('value');
  28.  
  29.  
  30. return Promise.all([getDeviceTokensPromise]).then(results => {
  31. const tokensSnapshot = results[0];
  32.  
  33. if (!tokensSnapshot.hasChildren()) {
  34. return console.log('There are no notification tokens to send to.');
  35. }
  36.  
  37. const payload = {
  38. notification: {
  39. title: 'You have a new Message!',body: event.data.val().Message
  40. }
  41. };
  42.  
  43. const tokens = Object.keys(tokensSnapshot.val());
  44.  
  45. return admin.messaging().sendToDevice(tokens,payload).then(response => {
  46.  
  47. const tokensToRemove = [];
  48. response.results.forEach((result,index) => {
  49. const error = result.error;
  50. if (error) {
  51. console.error('Failure sending notification to',tokens[index],error);
  52.  
  53. if (error.code === 'messaging/invalid-registration-token' ||
  54. error.code === 'messaging/registration-token-not-registered') {
  55. tokensToRemove.push(tokensSnapshot.ref.child(tokens[index]).remove());
  56. }
  57. }
  58. });
  59. return Promise.all(tokensToRemove);
  60. });
  61. });
  62. });

Firebase功能日志

如何从数据库获取同一房间(9810012321-9810012347)或任何其他房间(9810012321-9810012325)中任何新添加节点的上述值,并将其发送给FCM进行通知

提前致谢.

解决方法

我所做的是创建一个Message节点,我相信用户密钥可以做到这一点.即,使接收者(toId)和发送者(fromId)键发送通知.
希望能帮助到你.

  1. exports.sendMessageNotification = functions.database.ref('/messages/{pushId}')
  2. .onWrite(event => {
  3. let message = event.data.current.val();
  4. console.log('Fetched message',event.data.current.val());
  5. let senderUid = message.fromId;
  6. let receiverUid = message.toId;
  7. let promises = [];
  8.  
  9. console.log('message fromId',receiverUid);
  10. console.log('catch me',admin.database().ref(`/users/${receiverUid}`).once('value'));
  11.  
  12. if (senderUid == receiverUid) {
  13. //if sender is receiver,don't send notification
  14. //promises.push(event.data.current.ref.remove());
  15. return Promise.all(promises);
  16. }
  17.  
  18. let messageStats = message.messageStatus;
  19. console.log('message Status',messageStats);
  20.  
  21. if (messageStats == "read") {
  22. return Promise.all(promises);
  23. }
  24.  
  25. let getInstanceIdPromise = admin.database().ref(`/users/${receiverUid}/pushToken`).once('value');
  26. let getSenderUidPromise = admin.auth().getUser(senderUid);
  27.  
  28. return Promise.all([getInstanceIdPromise,getSenderUidPromise]).then(results => {
  29. let instanceId = results[0].val();
  30. let sender = results[1];
  31. console.log('notifying ' + receiverUid + ' about ' + message.text + ' from ' + senderUid);
  32. console.log('Sender ',sender);
  33. var badgeCount = 1;
  34. let payload = {
  35. notification: {
  36. uid: sender.uid,title: 'New message from' + ' ' + sender.displayName,body: message.text,sound: 'default',badge: badgeCount.toString()
  37. },'data': {
  38. 'notificationType': "messaging",'uid': sender.uid
  39. }
  40. };
  41. badgeCount++;
  42. admin.messaging().sendToDevice(instanceId,payload)
  43. .then(function (response) {
  44. console.log("Successfully sent message:",response);
  45. })
  46. .catch(function (error) {
  47. console.log("Error sending message:",error);
  48. });
  49. });
  50. });

猜你在找的JavaScript相关文章