2017-04-14 116 views
0

我想发送消息给所有设备,但我只发送到一个设备,这是我如何发送消息:我只能发送消息给一个用户,当我在我的方法中删除此消息以发送消息:Java Firebase云消息。发送消息给所有

json.put("to", tokenId.trim()); 

消息不发送给没有人,当我有这条线我只发送一条消息给一个用户。我如何向每个人发送消息?

static void send_FCM_Notification(String tokenId, String server_key, String message) { 


     try { 
      URL url = new URL(FCM_URL); 
// create connection. 
      HttpURLConnection conn; 
      conn = (HttpURLConnection) url.openConnection(); 
      conn.setUseCaches(false); 
      conn.setDoInput(true); 
      conn.setDoOutput(true); 
//set method as POST or GET 
      conn.setRequestMethod("POST"); 
//pass FCM server key 
      conn.setRequestProperty("Authorization", "key=" + server_key); 
//Specify Message Format 
      conn.setRequestProperty("Content-Type", "application/json"); 
//Create JSON Object & pass value 
      JSONObject infoJson = new JSONObject(); 
      infoJson.put("title", "Wiadomosc z serwera"); 
      infoJson.put("sound", "default"); 
      infoJson.put("icon", "ic_launcher"); 
      infoJson.put("body", message); 
      JSONObject json = new JSONObject(); 
      json.put("to", tokenId.trim()); 
      json.put("notification", infoJson); 
      OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
      wr.write(json.toString()); 
      wr.flush(); 
      int status = 0; 
      if (null != conn) { 
       status = conn.getResponseCode(); 
      } 
      if (status != 0) { 
       if (status == 200) { 
//SUCCESS message 
        BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
        System.out.println("Android Notification Response : " + reader.readLine()); 
       } else if (status == 401) { 
//client side error 
        System.out.println("Notification Response : TokenId : " + tokenId + " Error occurred : 401"); 

       } else if (status == 501) { 

//server side error 

        System.out.println("Notification Response : [ errorCode=ServerError ] TokenId : " + tokenId); 

       } else if (status == 503) { 

//server side error 

        System.out.println("Notification Response : FCM Service is Unavailable TokenId : " + tokenId); 

       } 


      } 

     } catch (MalformedURLException mlfexception) { 

// Prototcal Error 

      System.out.println("Error occurred while sending push Notification!.." + mlfexception.getMessage()); 

     } catch (IOException mlfexception) { 

//URL problem 

      System.out.println("Reading URL, Error occurred while sending push Notification!.." + mlfexception.getMessage()); 

     } catch (JSONException jsonexception) { 

//Message format error 

      System.out.println("Message Format, Error occurred while sending push Notification!.." + jsonexception.getMessage()); 

     } catch (Exception exception) { 

//General Error or exception. 

      System.out.println("Error occurred while sending push Notification!.." + exception.getMessage()); 

     } 
    } 
+0

见http://stackoverflow.com/questions/37634563/fcm-firebase -cloud-messaging-how-to-send-to-all-phones –

回答

2

火力地堡支持所谓topics

所以,你可以发送邮件到一个主题,所有订阅该主题将获得推动的设备。

您可以拥有一个名为all的主题,然后向每个设备注册。

这里是你如何注册

FirebaseMessaging.getInstance().subscribeToTopic("all"); 

然后,你可以解雇通知,该主题和所有用户将得到它。

然后用

json.put("to", "/topics/your-topic-name"); 

替换该行

json.put("to", tokenId.trim()); 

在这种情况下,你的主题名称是all

2

您可以订阅所有设备到同一主题,并发送消息到主题。 通过这种方式,您甚至不需要跟踪服务器中的令牌ID。

检查DOX这里:

Subscribe the client app to a topic

+0

请注意,该主题需要一段时间才能注册。所以它不会立即工作。也许你有一天或类似的事情。 – Juan