POST-ing JSON 对 FCM 服务器的请求无效
POST-ing JSON request to FCM server isn't working
我正在尝试向 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..."
}
那么谁能给出一个正确的代码,用这个 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();
这可以使用 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();
我用过 OkHttp,现在可以用了。如果有人需要,这是代码。
首先将OkHttp添加到应用程序中graddle.build
compile 'com.squareup.okhttp3:okhttp:3.4.1'
这里是发送POSTJson请求的方法
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);
}
我正在尝试向 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..."
}
那么谁能给出一个正确的代码,用这个 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();
这可以使用 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();
我用过 OkHttp,现在可以用了。如果有人需要,这是代码。
首先将OkHttp添加到应用程序中graddle.build
compile 'com.squareup.okhttp3:okhttp:3.4.1'
这里是发送POSTJson请求的方法
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);
}