Получить данные из уведомления GCM

Есть ли способ получить данные из "уведомления GCM". Вот часть моей строки json, которую я отправляю с gcm: {"data":{"id":"123"}}. Мне нужно получить значение id в моем приложении, но я не знаю, как... большое спасибо.

3 ответа

Если вы используете новую библиотеку GCM, вам необходимо создать класс, который расширяет IntentService, и здесь GCM-библиотека сообщит вам, когда будет получено сообщение GCM. Пожалуйста, взгляните на образец ***************.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); 
 }
}


Лучший способ получить его как 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);


<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">
 </category></action></intent-filter>
</receiver>

licensed under cc by-sa 3.0 with attribution.