web-dev-qa-db-fra.com

Angular & Ionic, HTTP Get ne fonctionne pas dans un appareil réel IOS

J'ai un problème dans mon application. Lorsque je lance l'application dans l'hôte local, cela fonctionne sans problème et je peux voir la liste des chaînes, mais lorsque j'essaie de tester l'application avec un périphérique physique, rien ne s'affiche. Je pense que le problème vient de la méthode que j'utilise pour envoyer des données JSON via http.

(function () {
'use strict';

angular.module('testApp').controller('ChannelCtrl', ['$state', 'testApi', ChannelCtrl]);

function ChannelCtrl($state, testApi) {
    var vm = this;

myscreenApi.getChannels().then(function(data){
         vm.channels = data;
     });

    vm.selectLeague = function(id){
        testApi.setChannelId(id);
        $state.go("app.video");
    }

};
})();

et cela ma fonction pour obtenir channeldata

function getChannels() {
        var deferred = $q.defer(),
            cacheKey = "leagues",
            ChannelsData = null;

        if (ChannelsData) {
            console.log("Found data inside cache", ChannelsData);
            deferred.resolve(ChannelsData);
            $window.alert("From Cache");
        } else {
            $http.get("http://example.com/api/videos/getchannels")
                .success(function(data) {
                    console.log("Received data via HTTP");
                    self.leaguesCache.put(cacheKey, data);
                    $window.alert("From HTTP");
                    deferred.resolve(data);
                })
                .error(function(dataerr) {
                    console.log("Error while making HTTP call.");
                    $window.alert("Error baba daram " + dataerr);
                    deferred.reject();
                });
        }
        return deferred.promise;
    }

quand j’envoie des données avec JSON.parse (), cela fonctionne correctement.

vm.channels = JSON.parse('[{"Name":"MyScreen News","ID":46,"Thumbnail":"CB46.jpg","Videos":null}]');

Dans l’ensemble, j’ai utilisé l’API Web ASP.NET, qui est l’envoi de données par JSON. L'application fonctionne bien sur notre bureau, mais l'application en cours d'exécution ne peut pas récupérer les données de notre hôte. De plus, lorsque j'injecte des données directement dans le programme, cela fonctionne dans les deux plates-formes. De plus, le fichier de configuration ionique présenté ci-dessous:

  <content src="index.html"/>
  <access Origin="*"/>
  <preference name="webviewbounce" value="false"/>
  <preference name="UIWebViewBounce" value="false"/>
  <preference name="DisallowOverscroll" value="true"/>
  <preference name="BackupWebStorage" value="none"/>
  <feature name="StatusBar">
    <param name="ios-package" value="CDVStatusBar" onload="true"/>
  </feature>

C'est tout. ;)

11
Nima

Si vous utilisez l’une des dernières versions de cordova, vous devrez peut-être installer la liste blanche des plugins cordova :

cordova plugin add cordova-plugin-whitelist

Si vous utilisez IIS Express, vous rencontrerez peut-être quelques problèmes.
J'ai des explications plus détaillées ici .

12
LeftyX

Avait exactement le même problème en travaillant sur un serveur de test. Il semble que iOS 9 a ajouté une couche de sécurité à leurs applications en empêchant une application de se connecter à un serveur via HTTP plutôt que HTTPS.

Pour résoudre ce problème, vous devez ajouter This Patch à votre build iOS info.plist.

N'oubliez pas que cette solution estNON S&EACUTE;CURIS&EACUTE;Eet ne doit pas être utilisée dans les services Web de production.

2
Alfredo Rius

J'ai eu le même problème. Si vous utilisez cordova supérieur à 4.0, vous devrez exécuter cordova plugin add cordova-plugin-whitelist

Vous pouvez vérifier votre version de cordova en exécutant cordova -v

Bonne codage.

0
achola