0

Я отправляю push-уведомления с моего собственного сервера через Urban Airship на Android-приложение на основе PhoneGap. Уведомления отправляются успешно, однако я хотел бы иметь возможность отправлять дополнительные данные, которые не отображаются на панели уведомлений на Android, но я все еще могу извлечь их из приложения. Как я понял, это должно быть сохранено в виде пар ключ-значение в «дополнительном» поле push-уведомления. У меня есть проблемы с кодированием и извлечением этого в правильном направлении.Извлечение «лишнего» из уведомления о выпуске Urban Airship в PhoneGap

Сервер представляет собой простой веб-интерфейс ASP.NET со страницей кода, которая отправляет сообщение на Urban Airship (на основе этого https://stackoverflow.com/a/2528151/1822286). Я сохраняю данные из взаимодействия пользователя (которое состоит из заполненных форм и координат импортированного экземпляра Google Maps) с использованием JavaScript и JSON в скрытое поле. Затем это поле считывается страницей кода в ASP.NET и используется для создания push-уведомления.

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\"] 
    }"; 

послание successf отправлен через городской дирижабль на свой телефон. В приложении я хочу извлечь часть stringData.Value, содержащую переменные alert, data, lat и lng. Я не уверен, является ли ошибка в том, как я решаю кодировать ее на стороне сервера или в том, как я разбираю ее на стороне клиента. Это сбивает с толку, поскольку терминология отличается между документацией Urban Airship и веб-панелью, используя «alert» и «extra», в то время как другие вещи на их плагине 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; 
    } 
}); 

Спасибо заранее.

ответ

0

Решено. Я попробовал различные комбинации извлечения в PhoneGap, используя панель Urban Airship, чтобы отправлять сообщения вместо моего собственного сервера, чтобы свести к минимуму количество источников ошибок. На стороне сервера я подозреваю, что проблема заключалась в попытке отправить стробированный объект 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; 
Смежные вопросы