离子 ios 应用程序无法访问互联网

Posted

技术标签:

【中文标题】离子 ios 应用程序无法访问互联网【英文标题】:ionic ios app cannot access internet 【发布时间】:2017-03-30 23:17:01 【问题描述】:

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

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

我没有问题访问互联网。但是,当我在调用后尝试从 XCode 运行应用程序时

离子构建 ios 科尔多瓦准备

该应用无法访问互联网。

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

到我的 config.xml

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

我看过以下内容:

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

编辑我发现ionic-cli github 页面上仍然存在与此相关的未解决问题。

编辑 2

Cordova CLI:6.2.0 离子框架版本:2.0.0-rc.1 Ionic CLI 版本:2.1.8 离子应用程序库版本:2.1.4 Ionic App 脚本版本:0.0.30 ios 部署版本:1.9.0 ios-sim 版本:5.0.11 操作系统:macOS Sierra 节点版本:v6.7.0 Xcode 版本:Xcode 8.1 Build 8B62 版

【问题讨论】:

【参考方案1】:

您是否关注过应用程序传输安全性?

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

更多关于应用传输安全的信息:https://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/ 在你的 info.plist 中

基本上你必须在你的 info.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>

【讨论】:

谢谢@OClyde,是的,正如你所说,这已经设置好了——我认为它是离子项目的默认设置 啊,他们是否已将其添加为默认设置?太好了,尽管它不能解决您的问题!因此,通过ionic run ios - - device 直接运行应用程序是否可以解决问题(正如您明确表示您是从 Xcode 运行的)?如果这解决了问题,将确定一些构建问题。 嗯,它要么是默认的,要么是由于现有的应用程序设置而设置的——我不能确定。我确实尝试过 sudo npm install -g cordova@6.2.0 && sudo npm install -g ios-deploy --unsafe-perm=true 这有助于 ionic deploy ios --device 实际部署,但我仍然无法访问互联网 :( 您能否在项目文件夹中执行ionic info 并将输出添加到您的问题中?只是希望通过使用的实际版本得到一个想法.. ;) 我已将离子信息的输出添加到问题中【参考方案2】:

所以根据这个SO Answer:

Safari 可用于在连接的 iOS 设备上调试 Ionic 应用程序。首先,我们需要在连接的设备上启用 Web Inspector。可以在 Settings > Safari > Advanced 下找到 Web Inspector。接下来,前往 Mac 上的 Safari,并在 Safari > Preferences > Advanced 下的菜单栏中启用 Show Develop menu in menu bar。连接的设备现在应该出现在“开发”菜单中。从那里,您可以检查它并使用 Safari 的开发人员工具来调试您的应用程序!

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

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

原来METEOR 过去曾遇到过类似问题,但通过添加以下行在cordova 上得到解决:

让我访问网络服务!

【讨论】:

【参考方案3】:

我通过将以下代码添加到后端索引页面来解决它(我的后端是 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);
      ));

【讨论】:

【参考方案4】:

我一直在从事一个 ionic 3 项目,我还面临一个问题,即 ionic ios 应用程序无法连接到互联网并且总是给出错误 --> "isTrusted"=true 但从未连接到互联网......我还尝试了所有方法,从应用自定义元标记、ionic.config.json 中的代理以及互联网上给出的其他任何东西,但我的问题通过删除一个名为作为 webkit 插件,尤其适用于 ios ... 在 android 应用程序上与插件配合良好,但在 ios 9 及更高版本上导致问题。

【讨论】:

以上是关于离子 ios 应用程序无法访问互联网的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 iOS 上运行的空白离子电容器应用程序返回此错误:无法连接到服务器

使用 NSTask 执行离子构建命令 - 无法访问启动路径

离子可选:错误 TS1086:无法在环境上下文中声明访问器

Xcode 6 Beta iOS 8 模拟器无法访问互联网

chrome://inspect 中无法识别离子视图

ionic 5(电容器)给出 NullInjectorError 空对象磁力计无法访问离子原生功能,