繁体   English   中英

从PhoneGap中的Urban Airship推送通知中提取“额外”

[英]Extracting “extra” from Urban Airship push notification in PhoneGap

我正在通过Urban Airship从我自己的服务器向基于PhoneGap的Android应用发送推送通知。 通知已成功发送-但是,我希望能够发送其他数据,这些数据未显示在Android的通知栏中,但仍可以在应用程序中提取数据。 据我了解,这应该作为键值对存储在推送通知的“额外”字段中。 我在以正确的方式编码和提取代码时遇到麻烦。

该服务器是一个简单的ASP.NET Web界面,带有代码隐藏页面,该页面将消息发送到Urban Airship(基于https://stackoverflow.com/a/2528151/1822286 )。 我使用JavaScript和JSON将用户互动(包括填写的表单和导入的Google Maps实例的坐标组成)中的数据保存到隐藏字段中。 然后,该字段由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仪表板的术语有所不同,使用的是“警报”和“额外”,而其PhoneGap插件方面的其他内容则称为“传入”和“传入”。

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

提前致谢。

解决了。 我尝试使用Urban Airship仪表板在PhoneGap中使用不同的提取组合,而不是从我自己的服务器发送消息,以最大程度地减少错误源。 在服务器端,我怀疑问题出在尝试发送字符串化的JSON对象时,因为引号会干扰消息其余部分中的引号。 将它们作为单独的键值对发送可以正常工作:

string postData = "{\"aliases\": [],\"tags\": [],\"android\": {\"alert\": \"" + someAlertValue + "\",\"extra\": {\"someKey\": \"" + someDataValue + "\", \"someKey2\": \"" + anotherDataValue + "\"}},\"apids\": [\"some apid\"]}";

然后,在PhoneGap中提取“额外”消息的方法是:

var extra = incoming.extras;

提取的每个键值对:

var someDataValue = extra.someKey;
var anotherDataValue = extra.someKey2;

暂无
暂无

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

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