无法使用Google App Engine(GAE)连接到Google Cloud Messaging(GCM)服务器

Mar*_*ang 7 java google-app-engine google-cloud-messaging

我正在尝试为我的应用设置谷歌云消息,我正在为我的服务器使用Google App Engine.我有我的API密钥,但我似乎无法连接到谷歌云消息服务器.这是我的代码.

HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("https://android.googleapis.com/gcm/send");
        try {

            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
            nameValuePairs.add(new BasicNameValuePair("registration_id", regId));
            nameValuePairs.add(new BasicNameValuePair("data.message", messageText));    

            post.setEntity(new UrlEncodedFormEntity(nameValuePairs));

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


            Header[] s=post.getAllHeaders();


            System.out.println("The header from the httpclient:");

            for(int i=0; i < s.length; i++){
            Header hd = s[i];

            System.out.println("Header Name: "+hd.getName()
                    +"       "+" Header Value: "+ hd.getValue());
            }


            HttpResponse response = client.execute(post);
            BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
            String line = "";
            while ((line = rd.readLine()) != null) {
            System.out.println(line);
            }

            } catch (IOException e) {
                e.printStackTrace();
        }
Run Code Online (Sandbox Code Playgroud)

当我查看日志时,标题正在设置正确.但是,我收到一个错误

org.apache.http.impl.client.DefaultRequestDirector tryConnect:连接到目标主机时捕获的I/O异常(java.net.SocketException):权限被拒绝:尝试在未经许可的情况下访问被阻止的收件人.(映射-IPv4)的

我已经在Google API控制台中启用了Google云消息传递,并且我已经多次检查了我的API密钥.我不知道为什么我会被拒绝.在战争中我需要一个罐子或者我必须放入清单中吗?

感谢您阅读!! 标记

小智 2

我遇到了同样的问题,并且我正在使用与您使用的类似的东西。

  1. 我必须在我的 GAE 应用程序上启用计费(您可能有,但我不知道我必须这样做)
  2. 阅读 https://developers.google.com/appengine/docs/java/sockets/ 和 https://developers.google.com/appengine/docs/java/urlfetch/

因此,我的代码以前看起来像你的,现在看起来如下:

String json ="{}"; 
URL url = new URL("https://android.googleapis.com/gcm/send");
HTTPRequest request = new HTTPRequest(url, HTTPMethod.POST);
request.addHeader(new HTTPHeader("Content-Type","application/json")); 
request.addHeader(new HTTPHeader("Authorization", "key=<>"));
request.setPayload(json.getBytes("UTF-8"));
HTTPResponse response = URLFetchServiceFactory.getURLFetchService().fetch(request);
Run Code Online (Sandbox Code Playgroud)