【发布时间】:2020-05-11 14:20:21
【问题描述】:
我已经使用 Firebase 和 Flutter 应用创建了一个电子商务 Android 应用来更新 Firebase 节点。
我想在管理员更新汇率时向所有用户发送通知。
下面是我编写的代码,用于使用 Cloud Function 向所有已注册的令牌发送更新通知,但它只将通知发送到 Flutter 应用而不是两个应用。
我不知道我做错了什么。
这是我的函数代码:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.helloWorld=functions.database.ref('Rates').onUpdate(evt =>{
const payload={
notification:{
title:"Today's Rate",
body :"Click here to see today's gold rate",
badge: '1',
sound: 'default'
}
}
return admin.database().ref('fcm-token').once('value').then(allToken =>{
if(allToken.val()){
console.log('token available');
const token = Object.keys(allToken.val());
console.log(admin.messaging().sendToDevice(token, payload));
return admin.messaging().sendToDevice(token, payload);
}else{
console.log('No Token Available');
throw new Error("Profile doesn't exist")
}
});
});
这是我的Realtime Database Structure 的图片。
【问题讨论】:
-
发送到 Flutter 应用的代码与发送到 Android 应用的代码没有区别。如果未收到通知,则很可能是您捕获注册令牌的方式或处理来自 FCM 的消息的方式有所不同。
-
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("fcm-token"); String token = FirebaseInstanceId.getInstance().getToken(); Log.e("Test", "FCM Registration Token: " + token); if(!(this.getSharedPreferences("com.jk.jkjwellers",MODE_PRIVATE).getBoolean("FCMAdded",false))){ databaseReference.push().setValue(new Tokens(token)); this.getSharedPreferences("com.jk.jkjwellers",MODE_PRIVATE).edit().putBoolean("FCMAdded",true).apply(); } -
我正在使用此代码注册令牌。但是当我使用 if 条件时。令牌未在 firebase 上注册。当我将其删除时。当用户打开应用程序时。它用相同的令牌一次又一次地自我注册
-
请不要在 cmets 中发布其他信息,而是编辑您的任务以包含它。
-
注意-我刚刚尝试在 firebase 中手动输入令牌。当我将节点的名称与令牌相同并在节点内部时,我创建一个新的值名称,其令牌和值与令牌相同。然后我收到通知。 i.stack.imgur.com/hMRx7.png(Image链接)
标签: node.js firebase firebase-realtime-database google-cloud-functions firebase-cloud-messaging