2012-07-04 3 views
15

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

ответ

26

Если вы используете новую библиотеку 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 Intent (в). 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);   
    } 
} 
+0

Хорошо, но как я могу получить здесь (защищенный недействительным OnMessage (контекст контекста, Намерение Намерение)) строку уведомлений? – mysho

+0

Обновлен мой ответ, посмотрите. – azgolfer

+0

Как я могу получить gcm_notification_string из Intent? –

6

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

и лучший способ, который я нашел таким образом, чтобы «добавить ваши данные как объект json»: 'String json = gson.toJson ([YOUR_OBJECT]); Сообщение msg = new Message.Builder(). AddData ("message", json) .build(); gcmresult = sender.send (msg, [YOUR GCI CLIENT REG ID], 5); ' –

0
<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

Добавьте свой класс GCmBroadcastReceviver и класс GcmIntentService для получения уведомлений –