2016-11-16 4 views
0

Когда я запускаю мое приложение ионное в эмуляторе:ионного приложение ИОС не может получить доступ к Интернету

ionic emulate ios --target="iPhone-6"

У меня нет проблем с доступом в Интернете. Однако, когда я пытаюсь запустить приложение из XCode после вызова

ionic build ios
cordova prepare

Приложение не может получить доступ в Интернет.

Я добавил Cordova-плагин-белый список плагин для моего приложения, а также добавление

<allow-navigation href="*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />

моему config.xml

и

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com ; style-src 'self' 'unsafe-inline'; media-src *">

к моему index.html

Код:

import { Headers, Http, Response } from '@angular/http'; 
... 
public login(url: string, params: any): Observable<any> { 
    return this.post(url, params) //I have logged the URL and it's fine! 
     .map((response: any) => { 
      ... 
     }) 
     .catch((error) => { 
      console.log("Error: " + JSON.stringify(error)); 
     }); 
} 

Выход ошибки выглядит следующим образом:

{ 
    "_body": { 
     "isTrusted": true 
    }, 
    "status": 0, 
    "ok": false, 
    "statusText": "", 
    "headers": {}, 
    "type": 3, 
    "url": null 
} 

Я посмотрел на следующее:

  1. Get error message from Angular 2 http
  2. https://forum.ionicframework.com/t/ionic-run-android-works-but-apk-does-not-access-internet/3867
  3. https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-whitelist/

EDIT
Я видел, что на странице github ionic-cli еще есть открытый вопрос, относящийся к этому вопросу.

EDIT 2

Cordova CLI: 6.2.0
Ionic Framework Version: 2.0.0-rc.1
Ionic CLI Version: 2.1.8
Ionic App Lib Version: 2.1.4
Ionic App Scripts Version: 0.0.30
ios-deploy version: 1.9.0
ios-sim version: 5.0.11
OS: macOS Sierra Node Version: v6.7.0
Xcode version: Xcode 8.1 Build version 8B62

ответ

0

Итак, в соответствии с этим SO Answer:

Safari can be used to debug an Ionic app on a connected iOS device. First, we need to enable Web Inspector on the connected device. Web Inspector can be found under Settings > Safari > Advanced. Next, head over to the Safari on your Mac and enable Show Develop menu in menu bar under Safari > Preferences > Advanced. The connected device should now appear in the Develop menu. From there, you can inspect it and use Safari's developer tools to debug your application!

Это привело меня к отладке приложения iOS на эмуляторе (который теперь также отказался подключиться к Интернету) с помощью Safari. Я увидел ошибку:

Refused to connect to https://.../login because it appears in neither the connect-src directive nor the default-src directive of the Content Security Policy.

Оказывается METEOR была аналогичная проблема в прошлом, но была решена cordova, добавив следующую строку:

<meta http-equiv="Content-Security-Policy" content="default-src * gap://ready file:; style-src 'self' 'unsafe-inline' *; script-src 'self' 'unsafe-inline' 'unsafe-eval' *">

Который меня к веб-сервисам!

1

Вы позаботились App безопасности на транспорте?

С iOS9 Apple требует, чтобы вы разрешили определенные домены в вашем info.plist или явно разрешили все внешние нагрузки (что не рекомендуется Apple, но это будет самый простой тестовый тест, чтобы узнать, вызвана ли проблема ATS).

Больше о App безопасности на транспорте: https://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/ В вашем info.plist

В основном вы должны указать следующие в вашей информации.PLIST (опять-таки: общее пособие внешних нагрузок не рекомендуется, хотя, вы можете найти подробную информацию о том, как вы можете указать домены, перейдя по ссылке выше :)):

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
    <dict> 
    <!-- other stuff --> 

    <key>NSAppTransportSecurity</key> 
    <dict> 
     <key>NSAllowsArbitraryLoads</key> 
     <true/> 
    </dict> 

    <!-- other stuff --> 
    </dict> 
</plist> 
+0

Спасибо @OClyde, да, это уже было установлено, как вы говорите - я думаю, что это по умолчанию для ионных проектов. –

+1

А они добавили это по умолчанию? Это здорово, хотя это и не решает вашу проблему! Так что запуск приложения напрямую с помощью 'ionic run ios - - device' делает или не устраняет проблему (как вы прямо заявляли, что работаете с Xcode)? Определил бы проблему сборки, если это решит проблему. – OClyde

+0

Ну, это либо по умолчанию, либо по умолчанию из-за существующих настроек приложения - я не могу быть уверен. Я попробовал sudo npm install -g [email protected] && sudo npm install -g ios-deploy --unsafe-perm = true, и это помогло ионному развертыванию ios --device ACTUALLY, но у меня все еще нет доступа в интернет :( –

0

Я решить путем добавления ниже кода в индекс бэкенд страницы (мой бэкенд CI)

header('Access-Control-Allow-Origin: *'); 
header('Access-Control-Allow-Methods: GET, POST, OPTIONS'); 
header('Access-Control-Allow-Headers: Origin, Content-Type, Accept,Authorization, X-Request-With'); 
header('Access-Control-Allow-Credentials: true'); 

и использовать ниже код для извлечения данных с мобильного конца с помощью API

let postParams = { 
     id: "1" 
    }; 
let headers = new Headers(); 
     headers.append('Content-Type', 'application/json'); 
     let options = new RequestOptions({ 
      params: postParams, 
      headers: headers, 
      withCredentials: true, 
     }); 

     this.http.post("Enter your API URL",JSON.stringify(postParams), options) 
     .map(res => res.json()) 
     .subscribe(data => { 
      console.log(data); 
     },(err => { 
      console.log(err); 
     })); 
0

Я был работа над ионным проектом 3 и я также столкнулся с проблемой, когда приложение iic ios не смогло подключиться к Интернету и всегда давало ошибку -> {"isTrusted" = true}, но никогда не подключался к интернету ... я также попробовал все от применения пользовательских метатег, прокси в иони c.config.json и когда-либо еще в Интернете, но моя проблема была решена путем удаления одного плагина с именем webkit плагин специально для ios ... в приложении для Android хорошо работал с плагином, но вызывал проблему на ios 9 и выше .

Смежные вопросы