繁体   English   中英

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

[英]Parsing received GCM message into push notification

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

该通知适用于示例数据,但是当我尝试使用从服务器接收的消息信息时,会得到空值。

这是我从服务器收到的消息的示例:(在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的方式有什么问题?

您正在接收的数据已经是json格式,因此您可以执行以下类似操作以从相应的key获取value

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM