Cordova / Ionic: la solicitud de $ http no se procesa mientras se emula o se ejecuta en el dispositivo

Todo iba bien la semana pasada y mientras ejecutaba la aplicación en el dispositivo o emulaba con Genymotion, todas las llamadas a la API funcionaban (devolviendo los datos o fallando, pero al menos mostrando algo).

Estaba usando

ionic run android 

Añado para actualizar el cordova global iónico:

 npm install -g cordova ionic 

Dado que todas las solicitudes de $ http ni siquiera están procesando. No puedo obtener ninguna respuesta mientras Api sigue funcionando bien y los CORS están perfectamente configurados.

La única forma que encontré es usar la opción –livereload o -l:

 ionic run -l android 

Quiero evitar el uso de la carga en vivo a cualquier costo.

Empecé a crear un proyecto desde cero usando ionic 1.0.0 y cordova lib 4.3.0.

 angular.module('starter.controllers', []) .controller('AppCtrl', function($scope, $ionicModal, $timeout, $http) { alert('calling api'); // Create an anonymous access_token $http .get(domain+'/oauth/v2/token?client_id='+public_id+'&client_secret='+secret+'&grant_type=client_credentials') .then(function(response){ alert(response.data.access_token); }); }) 

Entonces al usar:

 ionic serve 

Está alertando correctamente ‘calling api’ y luego la respuesta (un token de acceso OAuth para ese ejemplo).

Pero al usar:

 ionic run android 

Solo alerta a ‘calling api’ pero no parece procesar la solicitud http.

¿Alguien experimentó algo similar? Tengo grandes dolores de cabeza por eso.

    Con la actualización de Cordova 4.0.0, se enfrentará al problema de no poder realizar llamadas HTTP a API RESTful y cargar recursos externos, que incluyen otros HTML / video / audio / imágenes.

    Incluir en una lista blanca los dominios usando cordova-plugin-whitelist resuelve el problema.

    eliminar el complemento de la lista blanca si ya está instalado:

     cordova plugin remove cordova-plugin-whitelist 

    Agregue el complemento de lista blanca a través de CLI:

     cordova plugin add cordova-plugin-whitelist 

    y luego agregue la siguiente línea de código al archivo config.xml de su aplicación que se encuentra en el directorio raíz de su aplicación:

    Reccomendado en la documentación:

      

    o:

      

    y

    esta meta en su index.html

      

    El motivo de este problema:

    Desde Cordova 4.0.0 para la actualización de Android:

    La funcionalidad de la lista blanca se renovó

    • Deberá agregar el nuevo complemento cordova-plugin-whitelist para continuar usando una lista blanca

    • Ahora se admite el establecimiento de una Política de seguridad del contenido (CSP) y es la forma recomendada de incluir en la lista blanca (consulte los detalles en el archivo Léame del complemento).

    • Las solicitudes de red están bloqueadas de manera predeterminada sin el complemento, por lo tanto, instale este complemento incluso para permitir todas las solicitudes e incluso si está utilizando CSP.

    • Esta nueva lista blanca se ha mejorado para ser más segura y configurable, pero el comportamiento de la lista blanca heredada aún está disponible a través de un complemento independiente (no recomendado).

    Nota: si bien no es estrictamente parte de este lanzamiento, la última aplicación predeterminada creada por cordova-cli incluirá este complemento de manera predeterminada.

    Me funcionó, cuando intenté lo siguiente …

    En Config.xml, permita acceso y navegación a sus dominios:

       

    Luego, en index.html, agregue Content-Security-Policy de la siguiente manera: