web-dev-qa-db-ja.com

GCM通知からデータを取得する

「GCM通知」からデータを取得する方法はありますか。これは、gcmで送信する私のjson文字列の一部です:{"data":{"id":"123"}}。アプリでidの値を取得する必要がありますが、方法がわかりません...どうもありがとう。

15
mysho

新しいGCMライブラリを使用している場合は、IntentServiceを拡張するクラスを作成する必要があります。これは、GCMメッセージが受信されたときにGCMライブラリが通知する場所です。 MyIntentService.Javaサンプルをご覧ください。

@Override
public final void onHandleIntent(Intent intent) {
    try {
        String action = intent.getAction();
        if (action.equals("com.google.Android.c2dm.intent.REGISTRATION")) {
            handleRegistration(intent);
        } else if (action.equals("com.google.Android.c2dm.intent.RECEIVE")) {
            handleMessage(intent);
        }
    } finally {
        synchronized(LOCK) {
            sWakeLock.release();
        }
    }
}

private void handleMessage(Intent intent) {
    String id = intent.getExtra("id");
}

GCMライブラリを使用していない場合は、レシーバーのインテントでGCM応答が届きます。次に、インテントのgetExtras()。getString()を使用して、GCM通知からキーと値のペアを取得できます。例えば.

// intent come in in your onReceive method of your BroadcastReceiver:
public onReceive(Context context, Intent intent) {
   // check to see if it is a message
   if (intent.getAction().equals("com.google.Android.c2dm.intent.RECEIVE")) {
      String id = intent.getExtras().getString("id");
      String other_key = intent.getExtras().getString("other_key");

      // if your key/value is a JSON string, just extract it and parse it using JSONObject
      String json_info = intent.getExtras().getString("json_info");
      JSONObject jsonObj = new JSONObject(json_info);          
   }
}
26
azgolfer

Json表現として取得する最良の方法は、データをjsonオブジェクトとして追加することです。

{
    "registration_ids" : [
        "id1",
        "id2"
    ],
    "data" : {
        "my_json_object": {
            "text" :"This is my message",
            "title":"Some title"
        }
    },
    "collapse_key":"12345"
}

次に、オブジェクトを解析するには:

String json = getIntent().getExtras().getString("my_json_object");
JsonObject jObject = new JsonObject(json);
6
Roberto B.
<receiver Android:name=".beforelogin.GcmBroadcastReceiver"
          Android:permission="com.google.Android.c2dm.permission.SEND">
    <intent-filter>
        <action Android:name="com.google.Android.c2dm.intent.RECEIVE" />
        <category Android:name="Android.intent.category.TAB" />
    </intent-filter>
</receiver>
<service Android:name=".beforelogin.GcmIntentService" />
<meta-data Android:name="com.google.Android.gms.version"
           Android:value="@integer/google_play_services_version" />
0
Venkatesh