我对Firebase Cloud功能完全陌生(2天曝光)。当Firebase数据库检测到添加了新数据时,我正尝试向我的应用的所有用户发送通知。以下是我到目前为止的情况:
exports.sendNotification = functions.database.ref("/uploads/{pushId}").onCreate(event => {
const snapshot = event.data;
var str = snapshot.child("name").val();
console.log(str);
if (snapshot.previous.val()) {
return 0;
}
if (snapshot.val().name != "ADMIN") {
return 0;
}
const text = snapshot.val().text;
const payload = {
notification: {
title: snapshot.name,
body: ""
}
}
//return admin.messaging().sendToDevice(tokens, payload);
});
我知道代码现在处于混乱状态,这是由于各种教程网站的一些复制和测试。我可以成功从console.log获取数据的名称,但无法向所有用户发送通知。
我知道大多数人使用令牌和设备ID。但有没有更简单的方法发送给我的每个用户?我是否需要为我的应用添加任何java代码才能使此通知生效?
编辑1: 根据彼得的建议,我更新了我的职能:
exports.sendNotification = functions.database.ref("/uploads/{pushId}").onCreate(event => {
const snapshot = event.data;
var str = snapshot.child("name").val();
console.log(str);
if (snapshot.previous.val()) {
console.log("RETURN 1");
return 0;
}
const payload = {
notification: {
title: str,
body: ""
}
}
return admin.messaging().sendToTopic("Users", payload)
.then(function(response){
console.log("Notification sent ", response);
})
.catch(function(error){
console.log("Error sending notification: ", error);
});
});
我还在我的代码中添加了以下java:
FirebaseMessaging.getInstance().subscribeToTopic("Users");
我现在遇到的问题是,在Firebase控制台上,它说通知已成功发送,但在我的手机上我没有收到任何内容。在我的情况下是否必须使用onMessageReceived方法?
我注意到的一件事是,每次应用程序启动时都会调用上述语句。这会以任何方式影响结果吗?
答案 0 :(得分:1)
我认为最简单的是public static void updateCSV(String fileToUpdate) throws IOException {
File inputFile = new File(fileToUpdate);
// Read existing file
CSVReader reader = new CSVReader(new FileReader(inputFile), ',');
List<String[]> csvBody = reader.readAll();
// get CSV row column and replace with by using row and column
for(int i=0; i<csvBody.size(); i++){
String[] strArray = csvBody.get(i);
for(int j=0; j<strArray.length; j++){
if(strArray[j].equalsIgnoreCase("Update_date")){ //String to be replaced
csvBody.get(i)[j] = "Updated_date"; //Target replacement
}
}
}
reader.close();
// Write to CSV file which is open
CSVWriter writer = new CSVWriter(new FileWriter(inputFile), ',');
writer.writeAll(csvBody);
writer.flush();
writer.close();
}
,您可以将所有用户订阅到单个topics
,然后向该主题发送通知。您必须将return语句更改为:
topic
所以现在所有用户都订阅了return admin.messaging().sendToTopic("Cat", payload);
&#34; Cat&#34;将收到通知。当然,您也可以将主题更改为您想要的任何内容..
要订阅用户主题,您只需写下:
topic
查看此信息以获取更多信息topic messaging
答案 1 :(得分:0)
针对寻求更直接答案的人
除非要发送给目标用户,否则无法从firebase功能发送给所有 用户。这些将是已订阅某个主题的用户。前进功能将是
function my_order_created ( $post_id, $post, $update ) {
// Don’t run if $post_id doesn’t exist OR post type is not order OR update is true
if ( ! $post_id || get_post_type( $post_id ) != 'shop_order' || $update == 1 ) {
return;
}
$order = wc_get_order( $post_id );
if ( $order && $order->has_status( 'processing' ) ){
// Do something
}
}
add_action( 'wp_insert_post', 'my_order_created', 10, 3 );
或者,您可以使用控制台GUI,即使您没有订阅主题,只要您未指定主题或“发送到设备”选项
,它也将发送给每个用户