2

我正在尝试从开发者 android 网站了解 GCM。我已经按照 http://developer.android.com/google/gcm/client.html 的说明实现了客户端 android 应用程序,并按照http://developer.android.com/google/gcm/client.html的说明实现了http服务器应用程序(不是基于 XMPP 的服务器应用程序)developer.android.com/google/gcm/http.html。正如他们所提到的,我使用的代码是从https://code.google.com/p/gcm/下载的。GCM 注册功能在我的手机上完美运行。

现在的问题是,我如何将手机的注册 ID 发送到我的 http 服务器应用程序。我知道我应该在 Android 应用程序的 DemoActivity.java 文件中的 sendRegistrationIdToBackend() 中放置一些代码,以便在我的服务器应用程序上简单地调用 RegisterServlet。但我是java和android的新手,只是不知道该怎么做。任何有关我如何编写此代码的建议将不胜感激。

4

1 回答 1

4

下面是使用 HTTP GET 请求将注册 ID 发送到您的服务器的示例代码。我正在使用org.apache.http.*图书馆的课程。它假定您的服务器上有一个页面,该页面在名为 regId 的参数中接受注册 ID(在示例中它是一个jsp页面,但它可以是PHP您服务器中的任何内容)。您必须添加错误处理代码和解析服务器响应才能完成此示例。

  String responseString= null;

  try {
    URI url            = new URI ("http://your-server-domain/your-server-page.jsp?regId="+THE_REGISTRATION_ID);
    HttpGet httpGet    = new HttpGet (url);
    // defaultHttpClient
    HttpParams
      httpParameters   = new BasicHttpParams();

    // Set the timeout in milliseconds until a connection is established.
    // The default value is zero, that means the timeout is not used. 
    int
      timeoutConnection= 3000;
    HttpConnectionParams.setConnectionTimeout (
      httpParameters,
      timeoutConnection
                         );

    // Set the default socket timeout (SO_TIMEOUT) 
    // in milliseconds which is the timeout for waiting for data.
    int timeoutSocket  = 5000;
    HttpConnectionParams.setSoTimeout (
      httpParameters,
      timeoutSocket
                         );

    DefaultHttpClient
     httpClient        = new DefaultHttpClient (httpParameters);

    HttpResponse
      httpResponse     = httpClient.execute (httpGet);
    HttpEntity
      httpEntity       = httpResponse.getEntity ();

    if (httpResponse.getStatusLine().getStatusCode() != 200)
    {
      Log.e (
        _context.getString(R.string.app_name),
        "Server Call Failed : Got Status Code " + httpResponse.getStatusLine().getStatusCode() + " and ContentType " + httpEntity.getContentType().getValue()
                         );
      // add code to handle error
    }

    responseString     = EntityUtils.toString (httpEntity);
  } catch (UnsupportedEncodingException e) {
    Log.e(_context.getString(R.string.app_name),e.toString(),e);
    // add code to handle error
  } catch (ClientProtocolException e) {
    Log.e(_context.getString(R.string.app_name),e.toString(),e);
    // add code to handle error
  } catch (IOException e) {
    Log.e(_context.getString(R.string.app_name),e.toString(),e);
    // add code to handle error
  } catch (URISyntaxException e) {
    Log.e(_context.getString(R.string.app_name),e.toString(),e);
    // add code to handle error
  }
于 2013-09-01T01:38:04.240 回答