0

Android用Googleクラウドメッセージング(GCM)の簡単なチュートリアルに従って、GCMサービスを使用してプッシュ通知用のAndroidアプリケーションを作成しました。これで、デバイスまたはエミュレーターで通知を正常に受信できますが、問題は、他のアプリケーションがインストールされているデバイスではなく、1つのデバイス(テスト目的で使用されるデバイス)でのみ受信することです。

final String regId = GCMRegistrar.getRegistrationId(this);

このコードを使用して、登録ID、logcatウィンドウからコピーした出力を取得し、.Net開発者に手動で送信します。彼はそのIDをサーバー側にコピーしたので、そのデバイスについては通知を受け取ります。その登録IDをサーバー側(Asp.netサーバー)に動的に送信するのを手伝ってください。それらのIDをデータベースに保存し、登録IDの配列をGoogleGCMサーバーに渡すことができるようにします。そうすると、すべてのデバイス(インストールされているアプリケーション)の通知を受け取ることができるのは私たちだけだと思います。サーバー側では、次のようにデータをGCMサーバーに渡しているためです。

string postData = "collapse_key=score_update&time_to_live=108&delay_while_idle=1&data.message=" + value + "&data.time=" + System.DateTime.Now.ToString() + "&registration_id=" + deviceIDs + "";

私の手順がどこかでうまくいかない場合は、私を訂正してください。

4

1 に答える 1

1

基本的には、Webサーバーへのデータ接続を開き、gcmidを電話の他の識別要素(ユーザーIDや電話IDなど)とともに送信します。 GCMIntentServiceクラスのOnRegisteredメソッド。フォーム投稿リクエストをウェブサーバーに送信します。Webサーバーでは、情報をデータベースに保存することをお勧めします。フォーム変数に多次元配列を使用します

public String formPost(String[][] Vars) {

    String url = "put url of web server here";
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(url);
    String tmp = null;
    String rturn = null;
    try {
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
        for (int i = 0; i < Vars.length; i++) {
            nameValuePairs.add(new BasicNameValuePair(Vars[i][0], Vars[i][1]));
        }
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpResponse response = httpclient.execute(httppost);
        String ttmp = parseISToString(response.getEntity().getContent());
        Log.i("test", ttmp);
        if (ttmp.contains("Success")) {
            rturn = ttmp;
            Log.i("test", "Success:" + ttmp);
        } else {
            rturn = ttmp;
            Log.i("test", "Fail:" + ttmp);
        }

    } catch (ClientProtocolException e) {

    } catch (IOException e) {
    } /*
     * catch (RuntimeException e){ Context context =
     * getApplicationContext(); CharSequence text =
     * "There was an error try again later."; int duration =
     * Toast.LENGTH_SHORT; Toast toast = Toast.makeText(context, text,
     * duration);toast.show(); Log.i("test",e.getMessage()); finish(); }
     */
    return rturn;

}
于 2013-01-10T13:35:14.773 に答える