Obtener datos de la notificación de GCM

¿Hay alguna manera de obtener datos de la "notificación de GCM". Aquí hay una parte de mi cadena json que envío con gcm: {"data":{"id":"123"}}. Necesito obtener el valor de la identificación en mi aplicación, pero no sé cómo ... muchas gracias.

preguntado el 04 de julio de 12 a las 09:07

3 Respuestas

Si está utilizando la nueva biblioteca GCM, entonces necesita crear una clase que amplíe IntentService, aquí es donde la biblioteca GCM le notificará cuando se reciba un mensaje GCM. Por favor, eche un vistazo a la muestra 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");
}

Si no está utilizando la biblioteca de GCM, entonces la respuesta de GCM le llega en una intención en su receptor, entonces puede usar getExtras().getString() de la intención para recuperar el par clave/valor de su notificación de GCM. p.ej

// 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);          
   }
}

Respondido 29 Jul 12, 16:07

Ok, pero ¿cómo puedo llegar aquí (protected void onMessage(Context context, Intent intent)) cadena de notificación? - mysho

Actualicé mi respuesta, eche un vistazo. - azgolfista

¿Cómo puedo obtener gcm_notification_string de Intent? - Nam vu

@ZuzooVn, mira mi respuesta actualizada. Cometí un pequeño error en una respuesta anterior. No puede obtener una cadena sin procesar de lo que envió en su servidor GCM, porque el sistema operativo lo analizará en pares clave/valor y lo enviará como intención a su receptor. Sin embargo, puede asignar una cadena JSON a una clave y decodificarla en su aplicación. - azgolfista

¿Hay alguna forma de analizar el paquete en json? :) - roger extranjero

La mejor manera de obtenerlo como una representación json es agregar sus datos como un objeto json.

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

Luego, para analizar su objeto simplemente:

String json = getIntent().getExtras().getString("my_json_object");
JsonObject jObject = new JsonObject(json);

Respondido 31 Oct 13, 09:10

y la mejor manera que he encontrado hasta ahora para "agregar sus datos como un objeto json" es: String json = gson.toJson([YOUR_OBJECT]); Message msg = new Message.Builder().addData("message", json).build(); gcmresult = sender.send(msg, [YOUR GCM CLIENT REG ID],5); - da Bich

<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" />

contestado el 12 de mayo de 16 a las 13:05

Agregue su clase GCmBroadcastReceiver y su clase GcmIntentService para recibir notificaciones: Venkatesh

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.