首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试从Java向GCM发送HTTP-POST

尝试从Java向GCM发送HTTP-POST
EN

Stack Overflow用户
提问于 2014-02-19 01:41:02
回答 1查看 1.3K关注 0票数 0

我正在尝试向Google Cloud消息服务发送HTTP-POST。我已经设置了正确的按键,当我使用php脚本向我的手机发送推送通知时,一切都正常。

但是我的Java httpPost只返回401响应。我已经按照Android Developers给出的说明进行了操作,但是我还是收到了烦人的401。我是否分配了错误的头字段?

我的代码:

代码语言:javascript
复制
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;

    public class Server {
      public static void main(String[] args) throws IOException {

          String url = "https://android.googleapis.com/gcm/send";

            HttpClient client = HttpClientBuilder.create().build();
            HttpPost post = new HttpPost(url);


            HttpPost httppost = new HttpPost("https://android.googleapis.com/gcm/send");

            List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
            urlParameters.add(new BasicNameValuePair("registration_id=", "MY_DEVICE_GSM_REG_ID"));
            urlParameters.add(new BasicNameValuePair("data=", "Type=value,Lat=58.365547,Long=8.613235,Comment=value"));

            httppost.setHeader("Authorization",
                    "key=MY_API_AUTH_FROM_GOOGLE_API_CONSOLE_BROWSER_TOKEN");
            httppost.setHeader("Content-Type",
                    "application/x-www-form-urlencoded;charset=UTF-8");

            post.setEntity(new UrlEncodedFormEntity(urlParameters, "UTF-8"));

            HttpResponse response = client.execute(post);
            System.out.println("Response Code : " 
                        + response.getStatusLine().getStatusCode());

            BufferedReader rd = new BufferedReader(
                    new InputStreamReader(response.getEntity().getContent()));

            StringBuffer result = new StringBuffer();
            String line = "";
            while ((line = rd.readLine()) != null) {
                result.append(line);
            }
}
}
EN

回答 1

Stack Overflow用户

发布于 2014-02-19 02:03:27

您正在正确设置Authorization标头。您的API密钥可能有问题。

您的注册ID和有效负载确实存在问题(与401错误无关)。

这是错误的:

代码语言:javascript
复制
urlParameters.add(new BasicNameValuePair("registration_id=", "MY_DEVICE_GSM_REG_ID"));
urlParameters.add(new BasicNameValuePair("data=", "Type=value,Lat=58.365547,Long=8.613235,Comment=value"));

您应该从密钥中删除=,并且每个有效负载参数都应该以data.开头。因此,您应该具备:

代码语言:javascript
复制
urlParameters.add(new BasicNameValuePair("registration_id", "MY_DEVICE_GSM_REG_ID"));
urlParameters.add(new BasicNameValuePair("data.Type", "value"));
urlParameters.add(new BasicNameValuePair("data.Lat", "58.365547"));
urlParameters.add(new BasicNameValuePair("data.Long", "8.613235"));
urlParameters.add(new BasicNameValuePair("data.Comment", "value"));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21861363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档