我正在通过 Urban Airship 从我自己的服务器向基于 PhoneGap 的 Android 应用程序发送推送通知。通知已成功发送 - 但是,我希望能够发送未显示在 Android 通知栏中的其他数据,但我仍然可以在应用程序中提取这些数据。据我了解,这应该作为键值对存储在推送通知的“额外”字段中。我在以正确的方式编码和提取它时遇到了麻烦。
服务器是一个简单的 ASP.NET Web 界面,带有一个将消息发送到 Urban Airship 的代码隐藏页面(基于此https://stackoverflow.com/a/2528151/1822286)。我使用 JavaScript 和 JSON 将来自用户交互的数据(包括填写的表单和导入的 Google 地图实例的坐标)保存到隐藏字段中。然后,该字段由 ASP.NET 中的代码隐藏页面读取,并用于构造推送通知。
JavaScript 到隐藏字段 stringData(事件变量来自 Google Maps 实例,因为该部分有效,所以我在这里省略了):
var allDataToString = {
"alert": "\"" + document.getElementById("alertTextBox").value + "\"",
"data": "\"" + document.getElementById("dataTextBox").value + "\"",
"lat": "\"" + event.latLng.lat() + "\"",
"lng": "\"" + event.latLng.lng() + "\""
};
document.getElementById("stringData").value = JSON.stringify(allDataToString);
C# 代码隐藏页面中的推送通知消息:
string postData = "{\"aliases\": [],\"tags\": [],\"android\": {\"alert\": \"alerttest\",\"extra\": {\"data\": \"" + stringData.Value + "\", \"notificationtype\": \"1\"}},\"apids\": [\"APID\"]}";
更易读的版本:
string postData =
"{
\"aliases\": [],
\"tags\": [],
\"android\":
{
\"alert\": \"alerttest\",
\"extra\":
{
\"data\": \"" + stringData.Value + "\",
\"notificationtype\": \"1\"
}
},
\"apids\": [\"APID\"]
}";
消息已通过 Urban Airship 成功发送到我的手机。在应用程序中,我想提取 stringData.Value 部分,其中包含警报、数据、lat 和 lng 变量。我不确定错误是否在于我选择在服务器端对其进行编码的方式,还是在于我在客户端解析它的方式。令人困惑的是,Urban Airship 的文档和 Web 仪表板之间的术语不同,使用“alert”和“extra”,而他们的 PhoneGap 插件端的其他内容称为“incoming”和“incoming.message”。
在 PhoneGap JavaScript 中:
push.getIncoming(function(incoming) {
if(incoming.extra!=undefined){
var data = JSON.parse(incoming.extra.data);
var alert = data.alert;
var data = data.data;
var lat = data.lat;
var lng = data.lng;
}
});
提前致谢。