Отправка JSON-запроса на сервер FCM не работает



Я пытаюсь отправить запрос на сервер Firebase для FCM и, как сказано в документации FCM, это должен быть POST-запрос с данными JSON. Это и есть образец.



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..."
}


Так может ли кто-нибудь дать правильный код, который отправит POST-запрос с этими данными JSON?



Это то, что я пытался, но это не работает



Асынкт.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();
522   2  

2 ответов:

Я использовал Ohttp, и теперь он работает. Вот код, если кому-то это нужно.

Сначала добавьте OkHttp в приложения graddle.построить

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

Вот способ отправки 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 и вызовите его там, где вы хотите.

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);
}

Это можно сделать с помощью 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) {

        }
      }
    }

Это можно назвать использованием new PostTask().execute();

Comments

    Ничего не найдено.