Cordova / Ionic: richiesta $ http non elaborata durante l’emulazione o l’esecuzione sul dispositivo

Tutto stava andando bene la settimana scorsa e mentre stavo eseguendo l’applicazione sul dispositivo o emulando con Genymotion, tutte le chiamate all’api stavano funzionando (o restituendo i dati o fallendo ma almeno mostrando qualcosa).

Stavo usando

ionic run android 

Aggiungo per aggiornare la cordova ionica globale:

 npm install -g cordova ionic 

Dal momento che tutte le richieste $ http non vengono nemmeno elaborate. Non riesco a ottenere alcuna risposta mentre l’Api funziona ancora bene e le CORS sono perfettamente impostate.

L’unico modo che ho trovato è usare l’opzione –livereload o -l:

     ionic run -l android 

    Voglio evitare di usare il fegato a qualsiasi costo.

    Ho iniziato a creare un progetto da zero usando ionic 1.0.0 e 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); }); }) 

    Quindi mentre usi:

     ionic serve 

    Sta avvisando correttamente ‘call api’ quindi la risposta (Un token di accesso OAuth per quell’esempio).

    Ma mentre si usa:

     ionic run android 

    Sta solo allertando ‘calling api’ ma non sembra elaborare la richiesta http.

    Qualcuno ha vissuto qualcosa di simile? Sto ricevendo grossi grattacapi.

    Con l’aggiornamento di Cordova 4.0.0, dovrai affrontare il problema di non essere in grado di effettuare chiamate HTTP a API RESTful e caricare risorse esterne, che includono altri HTML / video / audio / immagini.

    La whitelist dei domini tramite la whitelist plug-in di cordova risolve il problema.

    rimuovi il plugin della whitelist se già installato:

     cordova plugin remove cordova-plugin-whitelist 

    Aggiungi il plug-in whitelist tramite CLI:

     cordova plugin add cordova-plugin-whitelist 

    e quindi aggiungi la seguente riga di codice al file config.xml della tua app che si trova nella directory principale dell’applicazione:

    Consigliato nella documentazione:

      

    o:

      

    e

    questo meta tag nel tuo index.html

      

    La ragione di questo problema:

    Da Cordova 4.0.0 per l’aggiornamento di Android:

    La funzionalità della white list è stata rinnovata

    • Dovrai aggiungere il nuovo plug-in di plug-in per il whitelist di cordova per continuare a utilizzare una whitelist

    • L’impostazione di un Content-Security-Policy (CSP) è ora supportata ed è il metodo consigliato per la lista bianca (vedi i dettagli nel readme del plugin)

    • Le richieste di rete sono bloccate di default senza il plugin, quindi installa questo plugin anche per consentire tutte le richieste, e anche se stai usando CSP.

    • Questa nuova whitelist è stata migliorata per essere più sicura e configurabile, ma il comportamento di whitelist legacy è ancora disponibile tramite un plugin separato (non consigliato).

    Nota: sebbene non sia strettamente parte di questa versione, l’ultima app predefinita creata da cordova-cli includerà questo plugin per impostazione predefinita.

    Ha funzionato per me, quando ho provato il seguente …

    In Config.xml, consenti l’accesso e le navigazioni ai tuoi domini:

       

    Quindi in index.html, aggiungi il Content-Security-Policy come di seguito: