ionic ios app无法访问互联网

时间:2016-11-16 16:40:54

标签: cordova ionic-framework

当我在模拟器中运行离子应用程序时:

  

离子模拟ios --target =“iPhone-6”

访问互联网没有问题。但是当我在调用

后尝试从XCode运行应用程序时
  

离子构建ios
  科尔多瓦准备

该应用无法访问互联网。

我已将 cordova-plugin-whitelist 插件添加到我的应用中,并添加了

  

< 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/
  4. 编辑
    我看到ionic-cli github页面上仍有一个与此相关的未解决问题。

    编辑2

      

    Cordova CLI:6.2.0
      离子框架版本:2.0.0-rc.1
      离子CLI版本:2.1.8
      Ionic App Lib版本:2.1.4
      Ionic App Scripts版本:0.0.30
      ios-deploy版本:1.9.0
      ios-sim版本:5.0.11
      操作系统:macOS Sierra Node版本:v6.7.0
      Xcode版本:Xcode 8.1 Build版本8B62

4 个答案:

答案 0 :(得分:1)

您是否负责App Transport Security?

从iOS9开始,Apple要求您允许info.plist中的特定域或明确允许所有外部加载(Apple不推荐这种加载,但最简单的测试用例是查看问题是否由ATS引起) 。

有关App Transport Security的更多信息:https://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/在您的info.plist

基本上你必须在info.plist中指定以下内容(同样:不推荐外部加载的一般容差,你可以通过上面的链接找到有关如何指定域的详细信息:)):< / p>

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

答案 1 :(得分:0)

所以根据这个SO Answer

  

Safari可用于调试连接的iOS设备上的Ionic应用程序。首先,我们需要在连接的设备上启用Web Inspector。可以在设置&gt;下找到Web Inspector。 Safari&gt;高级即可。接下来,转到Mac上的Safari并在 Safari&gt;下的菜单栏中启用Show Develop菜单。偏好&gt;高级即可。连接的设备现在应显示在“开发”菜单中。从那里,您可以检查它并使用Safari的开发人员工具来调试您的应用程序!

这导致我使用Safari在模拟器上调试iOS应用程序(现在也拒绝连接到互联网)。我看到了错误:

  

拒绝连接https://.../login,因为它既不出现在connect-src指令中,也出现在内容安全策略的default-src指令中。

事实证明,METEOR过去曾遇到类似问题,但已通过添加以下行在cordova上解决:

  

&lt; meta http-equiv =&#34; Content-Security-Policy&#34; content =&#34; default-src * gap:// ready file:; style-src&#39; self&#39; &#39;不安全直插&#39; *; script-src&#39; self&#39; &#39;不安全直插&#39; &#39;不安全-EVAL&#39; *&#34;&GT;

让我访问网络服务!

答案 2 :(得分:0)

我通过将下面的代码添加到后端索引页面(我的后端是CI)

来解决它
MethodName

并使用以下代码从移动端使用API​​获取数据

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

答案 3 :(得分:0)

我一直致力于离子3项目,我也面临着一个问题,即离子ios应用程序无法连接到互联网并且总是出错 - &gt; {&#34; isTrusted&#34; = true}但从未连接到互联网...我也尝试过应用自定义元标记,ionic.config.json中的代理以及互联网上给出的其他内容,但我的问题得到了解决通过删除一个名为 webkit 插件的插件,特别是对于ios ...在Android应用程序上运行良好的插件,但在ios 9及更高版本上导致问题。