1

サーバーから受信する新しいデータがあるときに、Google クラウド メッセージングを使用してユーザーに通知しようとしています。GCM を使用したメッセージの送信は、次のように定義されます。

To send a message, the application server issues a POST request to https://android.googleapis.com/gcm/send.

この HTTP POST リクエストを Android アプリケーションから送信することはできますか? MongoLab がホストするサーバーへの POST に成功した方法を使用して、これを実装しようとしました。私の試みは次のとおりです。

    input_json.put("registration_ids", RegistrationIDs);
    input_json.put("data", data);
    param = new StringEntity(input_json.toString());

    HttpParams httpParams = new BasicHttpParams();
    int some_reasonable_timeout = (int) (20 * DateUtils.SECOND_IN_MILLIS);
    HttpConnectionParams.setConnectionTimeout(httpParams, some_reasonable_timeout);
    HttpConnectionParams.setSoTimeout(httpParams, some_reasonable_timeout);

    HttpClient httpClient = new DefaultHttpClient(httpParams);
    HttpPost request = new HttpPost(url);
    request.setEntity(param);
    request.setHeader("Content-type", "application/json");
    request.setHeader("Authorization", API_KEY);
    HttpResponse response = httpClient.execute(request);

    StatusLine status = response.getStatusLine();
    if (status.getStatusCode() == HttpStatus.SC_OK){
        ResponseHandler<String> responseHandler = new BasicResponseHandler();
        result = responseHandler.handleResponse(response);
    }

HTTP エラーや gcm サーバーからの応答を受信しないため、ここからどこに移動すればよいかわかりません。ご協力いただきありがとうございます。

4

1 に答える 1

-1

この HTTP POST リクエストを Android アプリケーションから送信することはできますか?

これは、GCMintent クラスのユーザー登録に関するすべての関連デバイス情報を投稿する方法です。これがあなたの質問に答えるのに役立つことを願っています.

@Override
protected void onRegistered(Context ctx, String regId) {
    // send regId to your server
    sendRegistrationIdToServer(regId, "01");    
}


public void sendRegistrationIdToServer(String registrationId, String func) {
    //Send the reg info to server
    Log.d(TAG, "Sending registration ID to my application server");
    String deviceId = Secure.getString(getContentResolver(), Secure.ANDROID_ID);
    HttpClient client = new DefaultHttpClient();
    HttpPost post = new HttpPost(URL);
    Context context = getApplicationContext();

    try {
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
        nameValuePairs.add(new BasicNameValuePair("deviceid", deviceId));
        nameValuePairs.add(new BasicNameValuePair("func", func));
        nameValuePairs.add(new BasicNameValuePair("registrationid",registrationId));
        nameValuePairs.add(new BasicNameValuePair("app", GetPackageName()));

        post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpResponse response = client.execute(post);
        BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

        String line = "";
        while ((line = rd.readLine()) != null) {
            Log.e("HttpResponse", line);
        }

    } catch (IOException e) {
        Log.e("HttpResponse", "broke");
    }
}

Json を送信するように簡単に変更できます。

于 2013-02-01T15:00:06.547 に答える