将收到的GCM消息解析为推送通知

时间:2015-10-05 10:38:45

标签: android

我正在从我的服务器向我的应用程序发送GCM消息。

通知适用于样本数据,但是当我尝试使用收到的来自服务器的消息信息时,我得到空值。

我从服务器收到的消息是exmplae :(在showNotification()收到消息

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的方式有什么问题?

1 个答案:

答案 0 :(得分: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);
}