2012-07-04 18 views
15

Czy istnieje sposób na uzyskanie danych z "Powiadomienia GCM". Oto część mojego ciąg json, który wysyłam z gcm: {"data":{"id":"123"}}. Potrzebuję wartości id w mojej aplikacji, ale nie wiem jak ... wielkie dzięki.Otrzymuj dane z powiadomienia GCM

Odpowiedz

26

Jeśli używasz nowej biblioteki GCM, musisz utworzyć klasę, która rozszerza IntentService, w tym miejscu biblioteka GCM powiadomi Cię, gdy zostanie odebrana wiadomość GCM. Proszę spojrzeć na MyIntentService.java próbki:

@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"); 
} 

Jeśli nie korzystasz z biblioteki GCM, a następnie reakcja GCM przychodzi do ciebie w intencji w odbiorniku, a następnie można użyć getExtras intencyjny w(). getString(), aby pobrać parę klucz/wartość z powiadomienia GCM. na przykład

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

Ok, ale w jaki sposób można uzyskać tutaj (protected void onMessage (kontekst kontekście Intent intent)) ciąg zgłoszenie? – mysho

+0

Zaktualizowałem odpowiedź, spójrz. – azgolfer

+0

Jak mogę uzyskać polecenie gcm_notification_string z Intent? –

6

Najlepszym sposobem na uzyskanie go jako reprezentacji json jest dodanie danych jako obiektu json.

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

Następnie przeanalizować swój obiekt tylko:

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

i najlepszym sposobem, jaki znalazłem, aby "dodać twoje dane jako obiekt json" jest: 'String json = gson.toJson ([YOUR_OBJECT]); Message msg = new Message.Builder(). AddData ("message", json) .build(); gcmresult = sender.send (msg, [ID Z KLIENTA GCM KLIENTA], 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

Dodaj swoją klasę GCmBroadcastReceviver i GcmIntentService, aby otrzymywać powiadomienia –

Powiązane problemy