2

FCMに関するFirebaseサーバーへのリクエストを送信しようとしています。これがサンプルです。FCMサーバーへのJSONリクエストのPOSTが実行されていません

https://fcm.googleapis.com/fcm/send 
Content-Type:application/json 
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA 

{ "data": { 
    "score": "5x1", 
    "time": "15:10" 
    }, 
    "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..." 
} 

誰でもこのJSONデータでPOSTリクエストを送信する適切なコードを提供できますか?

この

は私が試したものですが、それは動作していない

AsyncT.java

package com.example.artin.pushnotifications; 

import android.os.AsyncTask; 

import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.DataOutputStream; 
import java.io.IOException; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 

class AsyncT extends AsyncTask<Void,Void,Void> { 

    @Override 
    protected Void doInBackground(Void... params) { 

     try { 
      URL url = new URL("https://fcm.googleapis.com/fcm/send"); //Enter URL here 
      HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection(); 
      httpURLConnection.setDoOutput(true); 
      httpURLConnection.setRequestMethod("POST"); // here you are telling that it is a POST request, which can be changed into "PUT", "GET", "DELETE" etc. 
      httpURLConnection.setRequestProperty("Content-Type", "application/json"); // here you are setting the `Content-Type` for the data you are sending which is `application/json` 
      httpURLConnection.setRequestProperty("Authorization","key=AIzaSyDZx9l_Izta9AjVS0CX70ou8OjbDVVGlHo"); 
      httpURLConnection.connect(); 

      JSONObject jsonObject = new JSONObject(); 
      JSONObject param = new JSONObject(); 
      param.put("Hii","there"); 

      jsonObject.put("data",param); 
      jsonObject.put("to", "dXazhmeFSSU:APA91bG23o75zeNOCb7pY-OCQG4BsGbY-YZrSnDrvLWv1"); 

      DataOutputStream wr = new DataOutputStream(httpURLConnection.getOutputStream()); 
      wr.writeBytes(jsonObject.toString()); 
      wr.flush(); 
      wr.close(); 

     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 


} 

ボタンがこれを使用して行うことができ

AsyncT asyncT = new AsyncT(); 
asyncT.execute(); 
+0

多くの重複があり、既に試したことはありません。 –

+0

'Volley'は良いですが、' OkHttp'もいいです。 http://stackoverflow.com/a/36160967/2308683 –

+0

[AndroidでのPOSTデータの送信](http://stackoverflow.com/questions/2938502/sending-post-data-in-android)の可能な複製 –

答えて

3

を使用して呼び出すことができます。誰かがそれを必要とする場合は、ここにコードがあります。まずアプリケーションにOkHttp追加

はPOST JSONリクエスト

public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8"); 

    OkHttpClient client = new OkHttpClient(); 

    Call post(String url, String json, Callback callback) { 
     RequestBody body = RequestBody.create(JSON, json); 
     Request request = new Request.Builder() 
       .addHeader("Content-Type","application/json") 
       .addHeader("Authorization","key=YourApiKey") 
       .url(url) 
       .post(body) 
       .build(); 
     Call call = client.newCall(request); 
     call.enqueue(callback); 
     return call; 
    } 

そして、ちょうどJSONオブジェクトを作成し、希望する場所に呼び出しを送信するための方法であり、ここで

compile 'com.squareup.okhttp3:okhttp:3.4.1' 

をgraddle.build。

try { 
    JSONObject jsonObject = new JSONObject(); 
    JSONObject param = new JSONObject(); 
    param.put("Hii", "there"); 
    param.put("Hours", "12:50"); 
    jsonObject.put("data", param); 
    jsonObject.put("to", "TokenOfTheDevice"); 
    post("https://fcm.googleapis.com/fcm/send", jsonObject.toString(), new Callback() { 
       @Override 
       public void onFailure(Call call, IOException e) { 
        //Something went wrong 
       } 

       @Override 
       public void onResponse(Call call, Response response) throws IOException { 
        if (response.isSuccessful()) { 
         String responseStr = response.body().string(); 
         Log.d("Response", responseStr); 
         // Do what you want to do with the response. 
        } else { 
         // Request not successful 
        } 
       } 
      } 
    ); 
} catch (JSONException ex) { 
    Log.d("Exception", "JSON exception", ex); 
} 
1

を押したとき、私はそれを実行AsyncTask、HTTPRequest

private class PostTask extends AsyncTask<String, String, String> { 

     String Url = "//fcm.googleapis.com/fcm/send" 

     @Override 
     protected String doInBackground(String... data) { 
     // Create a new HttpClient and Post Header 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost(Url); 

     try { 
      //add data 
      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); 
      nameValuePairs.add(new BasicNameValuePair("data", data[0])); 
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
      //execute http post 
      HttpResponse response = httpclient.execute(httppost); 

     } catch (ClientProtocolException e) { 

     } catch (IOException e) { 

     } 
     } 
    } 

これは私がOkHttp使用して、今それが動作 new PostTask().execute();

+1

HttpClientはアンドロイドから廃止されました –

+1

@Aram Sheroyanはい、 'HttpClient'は廃止されましたが、使用することができます。あなたの 'build.gradle'依存関係に' org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2 'というコンパイルを追加するだけです。 – Stanojkovic

+1

@Stanojkovicそれは完全に正しいわけではありません(http://stackoverflow.com/a/32741791/2308683) –

関連する問題