每次在 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 实时数据库添加新值时如何保存当前日期/时间

我希望在 Firebase 实时数据库中添加数据时收到通知

将新数据添加到特定子项时如何使用 Cloud Functions 将数据写入 Firebase 实时数据库

Firebase如何向所有孩子添加新数据

在 swift firebase 中添加新孩子后填充数组

JAVA Android Studio 不向 Firebase 实时数据库发送数据