Cordova/ Ionic: $ http-запрос не обрабатывается при эмуляции или запуске на устройстве

на прошлой неделе все шло хорошо, и пока я запускал приложение на устройстве или эмулировал с Genymotion, все вызовы api работали (либо возвращая данные, либо терпя неудачу, но, по крайней мере, показывая что-то).

Я был с помощью

ionic run android

я добавляю, чтобы обновить глобальный cordova ionic:

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

он правильно предупреждает "вызов api", а затем ответ (маркер доступа OAuth для этого примера).

но при использовании :

ionic run android

это только предупреждение "вызова api", но, похоже, не обрабатывает http-запрос.

кто-нибудь испытал что-то подобное? Я получаю большую головную боль на что.

2 ответов


С обновлением Cordova 4.0.0 вы столкнетесь с проблемой невозможности совершать HTTP-вызовы RESTful API и загружать внешние ресурсы, которые включают в себя другие HTMLs/видео/аудио/изображения.

белый список доменов с помощью cordova-плагин-белый список решает эту проблему.

удалить плагин whitelist, если он уже установлен:

cordova plugin remove cordova-plugin-whitelist

добавить плагин белого списка через CLI:

cordova plugin add cordova-plugin-whitelist

и затем добавьте следующую строку кода для вашего приложения конфигурации.в 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 для обновления 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"/>

затем в индексе.html, добавьте политику Content-Security, как показано ниже:

<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';">