先週すべてが順調で、デバイスでアプリケーションを実行している間、またはGenymotionでエミュレートしている間、APIへのすべての呼び出しが機能していました(データを返すか、失敗したが、少なくとも何かを表示しています)。
使っていた
ionic run Android
グローバルコルドバイオンを更新するために追加します。
npm install -g cordova ionic
それ以来、すべての$ httpリクエストは処理されていません。 Apiがまだ正常に動作していて、CORSが完全に設定されている間は、応答がありません。
私が見つけた唯一の方法は、オプション--livereloadまたは-lを使用することです:
ionic run -l Android
Livereloadの使用は絶対に避けたいです。
ionic 1.0.0と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);
});
})
したがって、使用中:
ionic serve
それは正しく「calling api」と応答を警告しています(An OAuthアクセストークン)。
しかし、使用中:
ionic run Android
「calling api」を警告するだけですが、httpリクエストを処理していないようです。
誰かが似たような経験をしましたか?私はそれについて大きな頭痛を感じています。
Cordova 4.0.0の更新により、RESTful APIへのHTTP呼び出しを実行できず、他のHTML/video/audio/imagesを含む外部リソースをロードできないという問題に直面します。
cordova-plugin-whitelist を使用してドメインをホワイトリストに登録すると、問題が解決します。
すでにインストールされている場合は、ホワイトリストプラグインを削除します。
cordova plugin remove cordova-plugin-whitelist
CLI経由でホワイトリストプラグインを追加します。
cordova plugin add cordova-plugin-whitelist
次に、アプリケーションのルートディレクトリにあるアプリのconfig.xmlに次のコード行を追加します。
ドキュメントで推奨:
<allow-navigation href="http://example.com/*" />
または:
<allow-navigation href="http://*/*" />
そして
このmeta
タグをindex.html
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
この問題の理由:
Cordova 4.0.0 for Androidのアップデートから:
ホワイトリスト機能が刷新されました
ホワイトリストを引き続き使用するには、新しいcordova-plugin-whitelistプラグインを追加する必要があります
Content-Security-Policy(CSP)の設定がサポートされ、ホワイトリストへの登録に推奨される方法(プラグインのreadmeで詳細を参照)
ネットワークリクエストはデフォルトでプラグインなしでブロックされるため、すべてのリクエストを許可する場合でも、CSPを使用している場合でも、このプラグインをインストールしてください。
この新しいホワイトリストは、より安全で構成可能なように拡張されていますが、レガシーホワイトリストの動作は、別のプラグインを介して引き続き使用できます(非推奨)。
注:このリリースに厳密には含まれていませんが、cordova-cliによって作成された最新のデフォルトアプリには、このプラグインがデフォルトで含まれています。
次のことを試したところ、うまくいきました…
Config.xmlで、ドメインへのアクセスとナビゲーションを許可します。
<access Origin="http://yourdomain1.com" />
<allow-navigation href="http://yourdomain1.com"/>
次に、index.htmlで、以下のようにContent-Security-Policyを追加します。
<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';">
私はionic appで同じ問題に直面しました。私の場合、Androidアプリは私の携帯電話で問題なく実行されていましたが、他のアプリでhttp呼び出しをしていませんでしたチームメンバーのモバイル。
Chrome:// inspect#devicesを使用してデバイスをデバッグした後。正確なエラーを知るようになりました。 HTTP呼び出し中に、アプリがERR_CLEARTEXT_NOT_PERMITTEDエラーを出していました。
以下のリンクを使用して、プレイペンのAndroidManifest.xmlファイルでクリアテキスト形式でデータを送信できるようにしました。 https://forum.ionicframework.com/t/err-cleartext-not-permitted-in-debug-app-on-Android/164101