【问题标题】:sending push notification using firebase functions every time a new child is added in firebase realtime database is not working每次在 firebase 实时数据库中添加新孩子时使用 firebase 函数发送推送通知不起作用
【发布时间】: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);

});` .

【问题讨论】:

    标签: javascript firebase flutter google-cloud-functions firebase-cloud-messaging


    【解决方案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)检查您尝试发送通知的方式,首先尝试从控制台模拟它,确保接收部分正常,然后尝试创建一个自动化的

    希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-08
      • 2018-02-27
      • 1970-01-01
      • 2018-05-04
      • 2018-05-31
      • 1970-01-01
      • 2013-03-05
      • 2018-04-05
      相关资源
      最近更新 更多