我尝试从我的Android应用程序发送我的fcm通知。我经常多次接触,但我找不到问题所在。我尝试使用邮差,它的成功,但当我在我的Android应用程序中尝试它时,它给出了错误。
在我的logcat中;
BasicNetwork.performRequest:意外的响应代码400 for https://fcm.googleapis.com/fcm/send/
错误:com.android.volley.ServerError
private void sendNotification() {
JSONObject obj = null;
JSONObject objData = null;
JSONObject dataobjData = null;
try {
obj = new JSONObject();
objData = new JSONObject();
dataobjData = new JSONObject();
dataobjData.put("message", msg.getText().toString());
dataobjData.put("image", lnk.getText().toString());
dataobjData.put("isSuccess", true);
dataobjData.put("catTitle", cat.getText().toString());
objData.put("content_available","true");
objData.put("priority", "high");
obj.put("to", blueTest);
obj.put("notification", objData);
obj.put("data", dataobjData);
Log.e("MYOBJs", obj.toString());
} catch (JSONException e) {
e.printStackTrace();
}
JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST, urlAdress, obj,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.e("SUCCESS", response + "");
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("ERRORS", error + "");
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<String, String>();
headers.put("Authorization", "key=" + API_KEY);
headers.put("Content-Type", "application/json");
return headers;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(this);
int socketTimeout = 1000 * 60;// 60 seconds
RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
jsObjRequest.setRetryPolicy(policy);
requestQueue.add(jsObjRequest);
}
答案 0 :(得分:0)
使用网址而不留尾“/”
https://android.googleapis.com/gcm/send
请从服务器发布错误响应 使用错误侦听器中的以下代码来获取响应 使用
的日志输出更新问题@Override
public void onErrorResponse(VolleyError error) {
String response=new String(error.networkResponse.data,"UTF-8");
Log.e("Error Response",response);
}
并且
Log.e("MYOBJs", obj.toString());
答案 1 :(得分:0)
我不明白为什么你要向/通过firebase发送一个截击请求。在Android和谷歌文档中支持firebase消息传递,这很容易理解。此外,如果要将上游消息发送到后端,后端需要XMPP支持,或者如果要发送到另一个设备,则至少需要指定它的firebase令牌。这是我在firebase中发送消息的示例:
public static int login(String email, String password){
int msgId = getFreeMsgId();
FirebaseMessaging fm = FirebaseMessaging.getInstance();
fm.send(new RemoteMessage.Builder(MY_SENDER_ID + "@gcm.googleapis.com")
.setMessageId(Integer.toString(msgId))
.addData("type","login")
.addData("e-mail", email)
.addData("password",password)
.setTtl(1200)
.build());
return msgId;
}
通过firebase直接进入我的后端,在我的XMPP后端,我已经保存了所有已连接的设备,因此我可以向他们发送消息/通知
我不是firebase的专家,但我认为你对firebase的运作方式感到困惑