Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用Firebase云消息从应用程序发送通知?_Android_Firebase_Android Volley - Fatal编程技术网

Android 如何使用Firebase云消息从应用程序发送通知?

Android 如何使用Firebase云消息从应用程序发送通知?,android,firebase,android-volley,Android,Firebase,Android Volley,我尝试从android应用程序发送fcm通知。我烧了很多次,但我找不到问题所在。我用postman试过了,很成功,但当我在android应用程序中试过的时候,却出现了错误 在我的日志中 BasicNetwork.performRequest:的意外响应代码400 错误:com.android.volley.ServerError private void sendNotification(){ JSONObject对象j=null; JSONObject objData=null; JSONO

我尝试从android应用程序发送fcm通知。我烧了很多次,但我找不到问题所在。我用postman试过了,很成功,但当我在android应用程序中试过的时候,却出现了错误

在我的日志中

BasicNetwork.performRequest:的意外响应代码400

错误:com.android.volley.ServerError

private void sendNotification(){
JSONObject对象j=null;
JSONObject objData=null;
JSONObject dataobjData=null;
试一试{
obj=新的JSONObject();
objData=newjsonobject();
dataobjData=新的JSONObject();
dataobjData.put(“message”,msg.getText().toString());
dataobjData.put(“image”,lnk.getText().toString());
dataobjData.put(“issucess”,true);
dataobjData.put(“catTitle”,cat.getText().toString());
objData.put(“内容可用”、“真实”);
objData.put(“优先级”、“高”);
obj.put(“to”,蓝色测试);
obj.put(“通知”,objData);
obj.put(“数据”,dataobjData);
Log.e(“MYOBJs”,obj.toString());
}捕获(JSONException e){
e、 printStackTrace();
}
JsonObjectRequest jsObjRequest=新的JsonObjectRequest(Request.Method.POST、urlAdress、obj、,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
Log.e(“成功”,响应+”);
}
},
新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Log.e(“错误”,错误+”);
}
}) {
@凌驾
公共映射getHeaders()引发AuthFailureError{
Map headers=newhashmap();
headers.put(“授权”、“密钥=“+API_密钥”);
headers.put(“内容类型”、“应用程序/json”);
返回标题;
}
};
RequestQueue RequestQueue=Volley.newRequestQueue(this);
int-socketTimeout=1000*60;//60秒
RetryPolicy policy=新的DefaultRetryPolicy(socketTimeout,DefaultRetryPolicy.DEFAULT\u MAX\u RETRIES,DefaultRetryPolicy.DEFAULT\u BACKOFF\u MULT);
jsObjRequest.setRetryPolicy(policy);
add(jsObjRequest);
}

使用url时不要拖尾“/”

请从服务器发布错误响应 在错误侦听器中使用以下代码获取响应 使用日志的输出更新问题

@Override
public void onErrorResponse(VolleyError error) {
    String response=new String(error.networkResponse.data,"UTF-8");
    Log.e("Error Response",response);
}


我不明白你为什么试图向firebase发送截击请求。android和google文档中都支持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的工作原理感到困惑

blueTest是字符串吗?您不应该直接从移动应用程序发送通知。你应该有一个后端为你做这项工作,这样你就不必向所有可以下载应用的人公开你的身份验证凭据。我开发了一个c#表单应用程序,使用fcm发送推送通知。但我需要一个可以发送通知的应用程序。@ShreyGupta yes是它的字符串。这是一个用户可以订阅的主题。您需要重新检查字符串日志。字符串的值甚至空格都可能会引起问题当我尝试使用您的代码时,在我的logcat InvalidTokenFormat中,您可以将obj.toString()的输出发布到“\/topics\/blueapp”,“notification”:{“content\u available”:“true”,“priority”:“high”},“data”:{“message”:“测试消息”,“图像”:“https:\/\/i.pinimg.com\/originals\/cf\/b1\/50\/cfb150600918b501a0d04957be90ab4a.jpg”,“isSuccess”:true,“catTitle”:“测试消息操作栏”}}尝试用应答中的Url替换它现在工作了吗?
@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());
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;
}