ArcGIS REST POST request in Meteor Android app

983
1
Jump to solution
07-21-2017 02:50 PM
JoshuaDonato1
New Contributor II

I have created an Android app using Meteor that only has a client side (no Meteor server side).  The app uses the ArcGIS REST API to obtain a token and then posts user location data to a service.  The app functions as expected in development (run from meteor on Android device) but not in production (install signed APK on Android device).  The POST requests do not work in production.

I have tried a few different ways to implement the POST request, all of which work in development but not in production:

  1. jQuery AJAX - does not appear to use success or error functions
  2. Meteor HTTP ( Meteor.http.call ) - response is undefined
  3. ESRI-Leaflet ( L.esri.post ) - code: 500; message: Could not parse response as JSON.  This could also be caused by CORS or XMLHttpRequest error.; response is null

After a few straight days of trying to determine if the exact problem is in the code, a Meteor, CORS, or something else, I feel I have exhausted all avenues.  I am not a CORS guru and I am not a server manager, etc so I am not completely sure how to troubleshoot.  From the results listed above, it sounds like the requests are not being sent.

Below is some sanitized code for the three different POST functions I have tried.  "getToken_ajax" is my original and preferred function.  I assume since the app works in development it should work in production but likely with some modification in the code or updates to settings/parameters on the server.  However, I am unsure of what needs to change.  Any thoughts?

Thanks,

Josh


var getToken_ajax = function() {

    var tokenData = {
        username: "theusername",
        password: "thepassword",
        f: 'json',
        expiration: 60,
        client: 'referer',
        referer: window.location.origin
    };

    $.ajax({
        url: "https://<address>/arcgis/tokens/generateToken",
        dataType: 'json',
        type: 'POST',
        data: tokenData,
        crossDomain: true,
        success: function(data, textStatus, jqXHR) {

            $(".status").empty();
            $("#status").empty().append("status: " + textStatus);
            $("#data").empty().append("data: " + JSON.stringify(data));
            $("#jqXHR").empty().append("jqXHR: " + JSON.stringify(jqXHR));

        },
        error: function(data, textStatus, jqXHR) {

            $(".status").empty();
            $("#status").empty().append("status: " + textStatus);
            $("#data").empty().append("data: " + JSON.stringify(data));
            $("#jqXHR").empty().append("jqXHR: " + JSON.stringify(jqXHR));

        }
    });

};

var getToken_meteorhttp = function() {

    var tokenData = {
        headers: {
            "Content-type": "application/x-www-form-urlencoded"
        },
        params: {
            username: "theusername",
            password: "thepassword",
            f: 'json',
            expiration: 60,
            client: 'referer',
            referer: window.location.origin
        }
    };

    Meteor.http.call("POST", "https://<address>/arcgis/tokens/generateToken", tokenData,
        function(error, response) {

            $(".status").empty();
            $("#status").empty().append("status: " + JSON.stringify(error));
            $("#response").empty().append("response: " + JSON.stringify(response));

        });
};

var getToken_leaflet = function() {

    function serverAuth(callback) {
        L.esri.post('https://<address>/arcgis/tokens/generateToken', {
            username: "theusername",
            password: "thepassword",
            f: 'json',
            expiration: 86400,
            client: 'referer',
            referer: window.location.origin
        }, callback);
    };

    serverAuth(function(error, response) {

        $(".status").empty();
        $("#status").empty().append("status: " + JSON.stringify(error));
        $("#response").empty().append("response: " + JSON.stringify(response));

    });

};
0 Kudos
1 Solution

Accepted Solutions
JoshuaDonato1
New Contributor II

Turns out there was not a proper certificate in place.  Once fixed, everything worked as expected.

View solution in original post

0 Kudos
1 Reply
JoshuaDonato1
New Contributor II

Turns out there was not a proper certificate in place.  Once fixed, everything worked as expected.

0 Kudos