2015-10-05 98 views
1

我从我的服务器发送GCM消息,我的应用程序。解析收到的GCM消息到推送通知

通知工作样本数据,但是当我试图从我的服务器使用接收到的报文信息,我得到空值。

的是一个信息,我从我的服务器上获取exmplae:(在showNotification收到MSG())

Received: { 
"subtitle": "text", 
"sound": "1", 
"message": "bla bla", 
etc.. 

这是我如何试图处理它(查找showNotification() ):

public class GcmService extends GcmListenerService { 
    String title; 

    @Override 
    public void onMessageReceived(String from, Bundle data) { 
     JSONObject jsonObject = new JSONObject(); 
     Set<String> keys = data.keySet(); 
     for (String key : keys) { 
      try { 
       jsonObject.put(key, data.get(key)); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
     try { 
      sendNotification("Received: " + jsonObject.toString(5)); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void onDeletedMessages() { 
     sendNotification("Deleted messages on server"); 
    } 

    @Override 
    public void onMessageSent(String msgId) { 
     sendNotification("Upstream message sent. Id=" + msgId); 
    } 

    @Override 
    public void onSendError(String msgId, String error) { 
     sendNotification("Upstream message send error. Id=" + msgId + ", error" + error); 
    } 

    private void sendNotification(final String msg) { 
     Handler handler = new Handler(Looper.getMainLooper()); 
     handler.post(new Runnable() { 
      @Override 
      public void run() { 
       MainActivity.mTextView.setText(msg); 

       //JSON Parsing 
       try { 
        JSONObject thePush = new JSONObject(msg); 
        JSONArray pushData; 
        pushData = thePush.optJSONArray("Received"); 
        thePush = pushData.optJSONObject(0); 
        if (thePush != null) { 
         //Initalize data from my JSON 
         title = thePush.optString("title"); 
        } 

       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 

       NotificationCompat.Builder mBuilder = 
         new NotificationCompat.Builder(getApplicationContext()) 
           .setSmallIcon(R.drawable.beer) 
           .setContentTitle(title) 
           .setContentText("Hello World!"); 
       // Creates an explicit intent for an Activity in your app 
       Intent resultIntent = new Intent(getApplicationContext(), MainActivity.class); 

// The stack builder object will contain an artificial back stack for the 
// started Activity. 
// This ensures that navigating backward from the Activity leads out of 
// your application to the Home screen. 
       TaskStackBuilder stackBuilder = TaskStackBuilder.create(getApplicationContext()); 
// Adds the back stack for the Intent (but not the Intent itself) 
       stackBuilder.addParentStack(MainActivity.class); 
// Adds the Intent that starts the Activity to the top of the stack 
       stackBuilder.addNextIntent(resultIntent); 
       PendingIntent resultPendingIntent = 
         stackBuilder.getPendingIntent(
           0, 
           PendingIntent.FLAG_UPDATE_CURRENT 
         ); 
       mBuilder.setContentIntent(resultPendingIntent); 
       NotificationManager mNotificationManager = 
         (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
// mId allows you to update the notification later on. 
       mNotificationManager.notify(1, mBuilder.build()); 
      } 
     }); 
    } 


} 

当我从下面的代码收到GCM消息时,我得到一个没有标题的消息。 由于值不是来自我的json,因此测试,身体工作。

什么是与我收到的JSON方式的问题?

+0

可以添加'你得到的'sendNotification'方法msg'您题 ? –

+0

这是:'收到:{ “字幕”:“文字”, “声音”:“1”, “消息”:“bla bla”, etc ..(我发布的消息) – EliKo

+0

May是你是不是一个有效的JSON,在这里发表您的JSON在http://jsonlint.com/,并检查它是否有效与否 –

回答

1

数据您收到已在json格式,所以你可以做类似下面的东西从得到value相应key

@Override 
public void onMessageReceived(String from, Bundle data) { 
    String subtitle = data.getString("subtitle","defValue"); 
    String sound = data.getString("sound","defValue"); 
    String message = data.getString("message","defValue"); 
    //..... fetch other values similarly 

    Log.d("Data ->",subtitle+"-"+sound+"-"+message); 
} 
+0

得到什么真棒谢谢! – EliKo