2017-01-03 8 views
0

Firebase Cloud Messagingを使用してAndroidデバイスに通知を送信しようとしています。明らかにすべてがOKです。私は私のHTTPリクエストのための答えを得る:カスタムサーバーを使用してAndroidのFirebase通知が表示されない

Response Code : 200 

{"message_id": **ID here** } 

しかし、私はAPKとエミュレータがインストールされているアプリがフォアグラウンドにあるではない場合でも、何の通知は、受信していないされています。

Firebaseコンソールからメッセージを送信すると、すべてうまく動作します。

誰でも私が間違っていることを見つけるのを助けることができますか?

import java.io.BufferedReader; 
    import java.io.IOException; 
    import java.io.InputStreamReader; 
    import java.io.OutputStreamWriter; 
    import java.io.UnsupportedEncodingException; 
    import java.net.HttpURLConnection; 
    import java.net.URL; 
    import java.util.Base64; 


    public class Main { 

     public static void main(String[] args) throws UnsupportedEncodingException, IOException { 

      String apiKey = "AI...LoU"; //My key here 

      String out = "{\"notification\":{\"title\": \"My title\", \"text\": \"My text\"}, \"to\":\"/topics/all\",\"data\": {\"key\": \"value\"}}"; 

      URL url = new URL("https://fcm.googleapis.com/fcm/send"); 

      String credentials = "key=" + apiKey; 
      //String basicAuth = "Basic " + new String(Base64.getEncoder().encodeToString(credentials.getBytes())); 

      HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
      conn.setUseCaches(false); 
      conn.setDoInput(true); 
      conn.setDoOutput(true); 
      conn.setRequestMethod("POST"); 
      conn.setRequestProperty("Content-Type", "application/json"); 
      conn.setRequestProperty("Authorization", credentials); 

      conn.connect(); 

      OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
      wr.write(out); 
      wr.flush(); 

      int responseCode = conn.getResponseCode(); 
      System.out.println("Response Code : " + responseCode); 

      BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
      String inputLine; 
      while ((inputLine = in.readLine()) != null) { 
       System.out.println(inputLine); 
      } 
      in.close(); 
      wr.close(); 
     } 

    } 
+0

これはエミュレータでネットワーク上の問題の可能性があります。通知を送信した後、エミュレータが飛行機モードをオンにして飛行機モードをオフにすると、すべての通知が届きます。 –

+0

Firebaseコンソールを使用して通知を受け取ります。私はネットワークが正常に動作していると思います。私はちょうどこのhttp post要求を使用するとき通知を受け取りません。 – felipepo

+0

デバイス(エミュレータ)が 'all'トピックに登録されているということは肯定的ですか? –

答えて

0

デバイスが対応するトピックに登録されていることを確認してください。この場合、クライアント側でsubscribeToTopic()に電話をかけてallに登録する必要があります。

+1

ちょうど補完!私のアプリケーションが作成されると、ランチャーアクティビティのonCreateメソッドで次の行が追加されました。 FirebaseMessaging.getInstance()。subscribeToTopic( "all"); これで完全に動作しています。 – felipepo

関連する問題