angularjs - start - ionic guide
Cordova/Ionic: la solicitud $ http no se procesa mientras se emula o se ejecuta en el dispositivo (2)
Con la actualización de Cordova 4.0.0, enfrentará el problema de no poder realizar llamadas HTTP a API RESTful y cargar recursos externos, que incluyen otros HTML / video / audio / imágenes.
La inclusión en la lista blanca de los dominios mediante 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 la lista blanca a través de CLI:
cordova plugin add cordova-plugin-whitelist
y luego agregue la siguiente línea de código al config.xml de su aplicación que se encuentra en el directorio raíz de su aplicación:
Recomendado en la documentación:
<allow-navigation href="http://example.com/*" />
o:
<allow-navigation href="http://*/*" />
y
esta
meta
en su
index.html
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src ''self'' ''unsafe-inline''; script-src ''self'' ''unsafe-inline'' ''unsafe-eval''">
La razón de este problema:
Desde Cordova 4.0.0 para la actualización de Android:
Se ha renovado la funcionalidad de la lista blanca.
Deberá agregar el nuevo complemento cordova-plugin-whitelist para continuar usando una lista blanca
Establecer una Política de seguridad de contenido (CSP) ahora es compatible y es la forma recomendada de incluir en la lista blanca (ver detalles en el archivo Léame del complemento)
Las solicitudes de red están bloqueadas de forma 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 que sea más segura y configurable, pero el comportamiento de la lista blanca heredada todavía está disponible a través de un complemento separado (no recomendado).
Nota: aunque no es estrictamente parte de esta versión, la última aplicación predeterminada creada por cordova-cli incluirá este complemento de forma predeterminada.
Todo salió bien la semana pasada y mientras estaba ejecutando la aplicación en el dispositivo o emulando con Genymotion, todas las llamadas a la API estaban funcionando (devolviendo los datos o fallando pero al menos mostrando algo).
Yo estaba usando
ionic run android
Añado para actualizar el cordova global iónico:
npm install -g cordova ionic
Desde entonces, todas las solicitudes $ http ni siquiera se están procesando. No puedo obtener ninguna respuesta mientras la Api todavía funciona 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 livereload a cualquier costo.
Comencé 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, mientras usa:
ionic serve
Está alertando correctamente a ''api de llamada'' y luego a la respuesta (un token de acceso OAuth para ese ejemplo).
Pero mientras usa:
ionic run android
Solo alerta a ''api de llamada'' pero no parece procesar la solicitud http.
¿Alguien experimentó algo similar? Me duele mucho la cabeza por eso.
Funcionó para mí, cuando intenté lo siguiente ...
En Config.xml, permita el acceso y la navegación a sus dominios:
<access origin="http://yourdomain1.com" />
<allow-navigation href="http://yourdomain1.com"/>
Luego, en index.html, agregue la Política de seguridad de contenido de la siguiente manera:
<meta http-equiv="Content-Security-Policy" content="default-src ''self'' http://yourdomain1.com data: gap: https://ssl.gstatic.com; style-src ''self'' ''unsafe-inline''; media-src *; script-src ''self'' ''unsafe-eval'' ''unsafe-inline'';">