离子 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 应用程序无法访问互联网的主要内容,如果未能解决你的问题,请参考以下文章