0

自分のサーバーから Urban Airship 経由で PhoneGap ベースの Android アプリにプッシュ通知を送信しています。通知は正常に送信されますが、Android の通知バーには表示されないが、アプリ内で抽出できる追加データを送信できるようにしたいと考えています。私が理解しているように、これはプッシュ通知の「追加」フィールドにキーと値のペアとして保存されるはずです。これを正しい方法でエンコードおよび抽出するのに問題があります。

サーバーは、Urban Airship にメッセージを送信するコード ビハインド ページを備えた単純な ASP.NET Web インターフェイスです (このhttps://stackoverflow.com/a/2528151/1822286に基づく)。JavaScript と JSON を使用して、ユーザーの操作 (入力されたフォームとインポートされた Google マップ インスタンスの座標で構成される) からのデータを隠しフィールドに保存します。このフィールドは、ASP.NET のコード ビハインド ページによって読み取られ、プッシュ通知の作成に使用されます。

JavaScript から非表示フィールド stringData へ (イベント変数は Google マップ インスタンスからのもので、その部分が機能するため、ここでは省略しました):

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 部分を抽出したいと考えています。エラーがサーバー側でエンコードする方法にあるのか、それともクライアント側で解析する方法にあるのかはわかりません。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;
    }
});

前もって感謝します。

4

1 に答える 1