1

アプリをC2DMからGCMに移行していますが、登録IDを送信するサーバーは引き続きC2DMIDを楽しんでいます。だから私の質問は、サーバーがこれがGCM IDであることを識別できるように、アプリから何ができるかということです。登録IDとともに新しいビットを送信することをお勧めします。どうやってやるの。例を挙げてください。

4

2 に答える 2

1

AppEngine を使用していない場合は、次のことを行う必要があります。

サーバーには、すべての登録 ID (reg_id) を格納するテーブルが既にあるはずです。このテーブルに「is_gcm_reg_id」などの別の列を追加する必要があります。現在、すべての既存の行は C2DM reg_ids であるため、この列のすべての既存の行をデフォルトで '0' に設定します。必要に応じて、GCM reg_ids を格納する新しいテーブルを作成することもできます。

次に、GCM 対応アプリケーションで、reg_id が GCM reg_id であることをサーバーに知らせる必要があります。reg_id をサーバーにアップロードする方法については言及していませんでした (Web サービス呼び出し?単純な POST 要求?)。Web サービス呼び出しを使用する場合は、新しい GCM 対応アプリでのみ使用される新しいメソッドを作成するだけです。POST リクエストを使用する場合は、「gcm=true」などの別のキーと値のペアを追加するだけで、サーバーはこの kvp を探す必要があります。

最後に、reg_id が GCM のものであることを確認し、それに応じて「is_gcm_reg_id」列フィールド (または新しい GCM テーブル) を更新するために必要なすべての要素を用意する必要があります。

于 2012-09-30T17:23:13.553 に答える
0

App Engine を使用して GCM/C2DM を実装しているとします。

App Engine の deviceInfo エンティティには、すでに「type」フィールドがあります。これは、「ac2dm」または「gcm」のいずれかに変更するフィールドです。

これを行う簡単な方法は、「ac2dm」の代わりに「gcm」を渡すだけの新しい登録要求を作成することです。AppEngine プロジェクトを見て、RegistrationInfo クラスを見つけます。register() メソッドを見てください。「ac2dm」を「gcm」に置き換えるだけです。

元:

     // original
 public void register() {
    log.info("register " + this);
    try {
      doRegister(getDeviceRegistrationId(), "ac2dm", getDeviceId(), getAccountName());
    } catch (Exception e) {
      log.info("Got exception in registration: " + e + " - " + e.getMessage());
      for (StackTraceElement ste : e.getStackTrace()) {
        log.info(ste.toString());
      }
    }
    log.info("Successfully registered");
  }

      // new version
     public void register() {
    log.info("register " + this);
    try {
      doRegister(getDeviceRegistrationId(), "gcm", getDeviceId(), getAccountName());
    } catch (Exception e) {
      log.info("Got exception in registration: " + e + " - " + e.getMessage());
      for (StackTraceElement ste : e.getStackTrace()) {
        log.info(ste.toString());
      }
    }
    log.info("Successfully registered");
  }

これを機能させるには、おそらく RPC サービスを再コンパイルする必要があります。

ここで、サーバーが deviceInfo エンティティの「gcm」タグをチェックし、それに応じて動作することを確認するのはあなた次第です。また、まだ見ていない場合はこちらをお読みください https://developer.android.com/guide/google/gcm/c2dm.html

于 2012-09-26T15:32:22.137 に答える