Firebase云触发功能 - 如何向所有用户发送通知?

时间:2017-12-05 17:18:52

标签: android firebase firebase-cloud-messaging google-cloud-functions

我对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方法?

我注意到的一件事是,每次应用程序启动时都会调用上述语句。这会以任何方式影响结果吗?

2 个答案:

答案 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,即使您没有订阅主题,只要您未指定主题或“发送到设备”选项

,它也将发送给每个用户

enter image description here