gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:51:39 24 4
gpt4 key购买 nike

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

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

这是我从服务器收到的消息的示例:(在 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 消息时,我收到一条没有标题的消息。由于该值不是来 self 的 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);
}

关于android - 将收到的 GCM 消息解析为推送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32946548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com