android - 与 GCM 通信时返回 HTTP 代码 400

标签 android apache http google-cloud-messaging

我正在尝试为 GCM 通信实现 HTTP 服务器。提供正确的 key 后,我得到的 HTTP 响应代码为“400”。这是代码 fragment :

URL url = new URL("https://android.googleapis.com/gcm/send");
        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("proxy.sgp.com", 8080));
        HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setRequestProperty("Authorization", "key="+"AIzaSyAYc53L6kg_XerwoWdLjUAi2iEfNKidSF8");
        conn.setDoOutput(true);
        DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
        wr.writeUTF("{\"collapse_key\" : \"Food-Promo\", \"data\" : {\"Category\" : \"FOOD\",\"Type\": \"VEG\",}, \"registration_ids\": [\"APA91bEk7GPFVxzOidvB3JKCMWq3FHpAaTj2dBv9VGOQkKtLAEiVGR8TDi1fsU4D1k293ODAFTJ8dNfE2gzJNfCvB1sjewZu2fGOIJmY8dgjcNTZQYi4QfyQH-AaO0qEmQnbEeEtsUQ5LzWrIHboAhJMx1bfdsO9bg\"]}");
        wr.flush();
        wr.close();
        int responseCode = conn.getResponseCode();

有人可以帮忙吗?

最佳答案

400错误仅出现在以下情况:

仅适用于 JSON 请求。 表示请求无法解析为 JSON,或者包含无效字段(例如,在需要数字的地方传递了字符串)。响应中描述了确切的失败原因,并且应该在重试请求之前解决问题。 Reference

所以你可以尝试这个代码,它对我有用

为 GCM 标准消息格式创建一个 POJO 类

public class Content implements Serializable {

public List<String> registration_ids;
public Map<String,String> data;

public void addRegId(String regId){
    if(registration_ids == null)
        registration_ids = new LinkedList<String>();
    registration_ids.add(regId);
}

public void createData(String title, String message){
    if(data == null)
        data = new HashMap<String,String>();

    data.put("title", title);
    data.put("message", message);
}

}

请求 GCM 向 Android 设备发送通知消息的代码,

   String apiKey = ""; //API key provided by Google Console
   String deviceID="";//Device Id
   Content content = new Content();
   //POJO class as above for standard message format
   content.addRegId(deviceID);       
   content.createData("Title", "Notification Message");
   URL url = new URL("https://android.googleapis.com/gcm/send");
   HttpURLConnection conn = (HttpURLConnection) url.openConnection();
   conn.setRequestMethod("POST");
   conn.setRequestProperty("Content-Type", "application/json");
   conn.setRequestProperty("Authorization", "key="+apiKey);
   conn.setDoOutput(true);
   ObjectMapper mapper = new ObjectMapper();
   DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
   mapper.writeValue(wr, content);
   wr.flush();
   wr.close();
   responseCode = conn.getResponseCode();

希望这可以帮助您解决问题......!!!!!!

关于android - 与 GCM 通信时返回 HTTP 代码 400,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27545782/

相关文章:

java - 错误 : Logcat capture failed: spawn ENOENT

android - Android Studio 1.0本地路径不存在

apache - 使用 Apache 为一个网站安装多个 RSA SSL 证书

iphone - 使用 Cocoa/iPhoneSDK 获取 URL 的字符串内容的最快方法是什么?

java - Spring Boot 在无效的 If-Modified-Since 值上抛出异常

json - 如何形成 ASP.NET OData WebApi 的 PATCH 正文?

java - 验证多个 edittext 并显示 edittext.setError ("String");

android - Google Play 控制台显示您的应用与所有设备不兼容的消息

apache - 在 Windows 7 上安装 tomcat 和完整的 j2ee 套件

java - 是否可以通过命令提示符创建 Solr 索引?