2012-07-04 38 views
15

Có cách nào để lấy dữ liệu từ "thông báo GCM" hay không. Đây là một phần của chuỗi json của tôi mà tôi gửi với gcm: {"data":{"id":"123"}}. Tôi cần nhận được giá trị của id trong ứng dụng của tôi, nhưng tôi không biết làm thế nào ... cảm ơn rất nhiều.Nhận dữ liệu từ thông báo GCM

Trả lời

26

Nếu bạn đang sử dụng thư viện GCM mới, thì bạn cần phải tạo một lớp mở rộng IntentService, đây là nơi thư viện GCM sẽ thông báo cho bạn khi nhận được tin nhắn GCM. Xin hãy nhìn vào mẫu 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"); 
} 

Nếu bạn không sử dụng thư viện GCM, sau đó phản ứng GCM được đến với bạn trong một ý định trong máy thu của bạn, sau đó bạn có thể sử dụng getExtras ý định của(). getString() để lấy cặp khóa/giá trị từ thông báo GCM của bạn. ví dụ.

// 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, nhưng làm thế nào tôi có thể nhận được ở đây (protected void onMessage (bối cảnh Bối cảnh, Ý định mục đích)) chuỗi thông báo? – mysho

+0

Cập nhật câu trả lời của tôi, hãy xem. – azgolfer

+0

Tôi có thể lấy gcm_notification_string từ Intent bằng cách nào? –

6

Cách tốt nhất để lấy nó làm biểu diễn json là thêm dữ liệu của bạn làm đối tượng json.

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

Sau đó, để phân tích đối tượng của bạn chỉ cần:

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

và cách tốt nhất mà tôi đã tìm thấy như vậy để "thêm dữ liệu của bạn dưới dạng đối tượng json" là: 'String json = gson.toJson ([YOUR_OBJECT]); Message msg = new Message.Builder(). AddData ("message", json) .build(); gcmresult = sender.send (msg, [GCM 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

Thêm lớp GCmBroadcastReceviver và lớp GcmIntentService của bạn để nhận thông báo –

Các vấn đề liên quan