web-dev-qa-db-ja.com

Angular&Ionic、HTTPGetが実際のデバイスで機能しないIOS

アプリに問題があります。ローカルホストでアプリを実行すると問題なく動作し、チャンネルリストは表示されますが、物理デバイスでアプリをテストしようとすると何も表示されません。問題は、httpを介してjsonデータを送信するために使用している方法に起因すると思います。

(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");
    }

};
})();

そしてこれは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;
    }

jSON.parse()を使用してデータを送信すると、正しく機能します。

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

全体として、JSONでデータを送信するASP.NET WebAPIを使用しました。アプリはデスクトップで正常に動作しますが、実行中のアプリケーションはホストからデータを取得できません。さらに、プログラムに直接データを挿入すると、両方のプラットフォームで機能します。さらに、以下に示すionic構成ファイル:

  <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>

それで全部です。 ;)

11
Nima

コルドバの最新バージョンの1つを使用している場合は、 cordovaプラグインホワイトリスト をインストールする必要がある場合があります。

cordova plugin add cordova-plugin-whitelist

IIS Expressを使用している場合、いくつかの問題が発生する可能性があります。
もう少し説明しました ここ

12
LeftyX

テストサーバーでの作業中にまったく同じ問題が発生しました。 iOS 9は、アプリがHTTPSではなくHTTPを介してサーバーに接続できないようにすることで、アプリケーションにセキュリティのレイヤーを追加したようです。

これを修正するには、info.plist iOSビルドに このパッチ を追加する必要があります。

このソリューションは[〜#〜]安全ではない[〜#〜]であり、本番Webサービスでは使用しないでください。

2
Alfredo Rius

私も同じ問題を抱えていました。 4.0以降のcordovaを使用している場合は、cordova plugin add cordova-plugin-whitelistを実行する必要があります。

cordova -vを実行すると、コルドバのバージョンを確認できます。

ハッピーコーディング。

0
achola