Ionic-framework: iOS-App 被拒绝,不兼容 IPv6?

创建于 2016-09-05  ·  67评论  ·  资料来源: ionic-team/ionic-framework

问题的简短描述:

由于应用程序显然不支持 IPv6,我的 Ionic-App 的 iOS 版本被拒绝。 我正在使用 $http.get/post 并在配置文件中有一个可配置的 Server-Api 来进行调用。
现在我的问题是我的服务器只支持 IPv4,并且没有与互联网的 IPv6 连接,我不可能在这台服务器上获得 IPv6。

我怎样才能让我的 iOS 应用程序进入商店并让它工作? 我听说有人使用名为 cordovaHTTP 的插件取得了成功,但它也会帮助我吗?

哪个离子版本? 1.x 或 2.x
版本 1

最有用的评论

你好

我刚刚用 wkwebview 替换了 uiwebview,然后苹果不会因为 Ipv6 而拒绝我的应用程序......

伊曼纽尔·莱佩蒂
特使 iPhone

Le 19 mars 2017 à 01:24, Michael Amaral [email protected]一个écrit:

抱歉, @elepetit ,你能解释一下你是如何解决这个问题的吗?


你收到这个是因为你被提到了。
直接回复此电子邮件,在 GitHub 上查看它,或将线程静音。

所有67条评论

我不确定这与离子有关。 我们已成功向 Ap​​p Store 提交了一个 Ionic 1 应用程序并获得了批准。 我们的后端仅处理 IPv4。

这只是一个疯狂的猜测,但它可能很有用:您是否为您的服务器使用文字 IPv4 地址(例如: http://192.0.2.3/ )而不是让 DNS 解析它? 这将在 NAT64/DNS64 环境中中断,并且可能会成为拒绝的原因。

我按照以下方式进行:
localValues.loadResource('AppSettings.json').then(function (response) { apiUrlService.setApiUrl(response.apiEndpoint); }

apiUrlService 是一个 Service,它提供了 SetApiUrl、GetApiUrl 和 CallApi 等方法

而 AppSettings.json 看起来像这样:
{ "apiEndpoint": "https://app.myServer.com/myAppApi" }

同样的问题,我的应用由于同样的原因被拒绝了,你可以在这里查看:
https://forum.ionicframework.com/t/apple-ipv6-http-ionic-reject/62546
http://stackoverflow.com/questions/39343443/apple-ipv6-http-ionic-reject

我的连接是使用我的主机名,而不是 IP 地址,我认为这是一个 Ionic 问题,因为与带有 AngularJS 项目的 Cordova 连接的相同 URL 没有失败。 有什么想法吗?

这在论坛里已经被提过好几次了。 Apple 要求所有应用程序必须在 IPV6 环境中运行。 这是他们的规则,我们必须遵守。
看看这个文档页面以获得更深入的指南来测试它们。 长话短说,如果您在代码中使用 IP 对服务器/端点进行硬编码,它将无法在您的应用程序中运行。 它应该使用您为端点注册的 DNS 名称。

如果您有 Mac,请查看文档,以便了解如何在您的应用程序上本地化。 在这里使用像 cordovaHTTP 这样的插件实际上并没有帮助,因为@Z3roCoder服务器不兼容 IPV6。

我认为这是一个 Ionic 问题,因为与带有 AngularJS 项目的 Cordova 连接的相同 URL 没有失败。

@zantos82不,Ionic 在这里没有错。 对该问题进行了相当多的研究(即将发布博客文章),问题在于对 IP 地址进行硬编码。 在这种情况下,Ionic只是UI 层,对 http/https 的影响为零。 再次,请浏览我链接到的文档页面并测试您的应用程序。

@mhartington ,感谢您的评论,但是当您确保在这种情况下 Ionic 不是问题时,我不同意您的看法,因为 $http 调用是通过 ionic.bundle.js 而不是通过角度库方式进行的。 几天前我查看了你告诉我的链接,我已经做了很多测试,在 IPv6 本地网络上,应用程序可以工作,在 IPv6 转换为 IPv4 网络上,也可以工作,但是在链接本地(或零地址称为)网络不起作用,这不是硬编码 IP 地址问题,因为我调用的是相同的主机名(fe:http://www.myserver.com/webservice_to_login 或 http://myserver.com/webservice_to_login) . 那我问你,三网有什么区别?

如果您查看我发布的 Ionic 论坛链接,失败的网络配置如下:
IP地址:169.254.24.243
子网掩码:255.255.0.0
路由器:
DNS: 2001:2:0:aab1::1

恢复:
Ionic/AngularJS 工作: https ://cdn-enterprise.discourse.org/ionicframework/uploads/default/original/3X/f/8/f80832330169dde2f42eecccc8b94327b477faac.PNG
Ionic/AngularJS 工作: https ://cdn-enterprise.discourse.org/ionicframework/uploads/default/original/3X/7/1/71b02cb1249247b6520cbc011abd8470cec31fb3.png
离子不工作/AngularJS工作: https ://cdn-enterprise.discourse.org/ionicframework/uploads/default/original/3X/4/f/4f4c0bac70315115204f034​​843b83a9194964089.png

那么,你确定离子不是问题吗? 有很多像我一样的 Ionic 开发人员......

$http 调用是通过 ionic.bundle.js 而不是 Angular 库的方式进行的。

ionic.bundle.js 是 angular、ui-router 和 ionic 组件的捆绑包。 那里http来自Angular,而不是离子。

尽管我对您如何遇到问题感到困惑。 您能否创建一个示例项目进行测试? 在您提供的所有内容中,似乎没有什么不合适的,所以我不确定为什么会出现问题。

ionic.bundle.js 是 angular、ui-router 和 ionic 组件的捆绑包。 那里的http来自Angular,而不是离子。

是的,我想是这样的,但是……Angular 和 Ionic 的 http 之间没有任何修改?

我可以做一个基本的测试项目,但是,你知道我可以在哪里调用“公共” ws 来做吗?

是的,我想是这样的,但是……Angular 和 Ionic 的 http 之间没有任何修改?

不, ionic.bundle.js中提供的 http 与 angular 中的 http 完全相同。 不是因为它是复制/粘贴,而是因为它是 Angular 。 看一下v1 分支,离子踩角没有任何作用。

那里有很多服务。

https://randomuser.me/

https://gearside.com/public-json-feeds/

好吧,我已经生成了世界上最简单的示例来使用 Ionic 1 调用 WS,并且我已经验证了服务器 url 调用它支持 IPv6。 然后我完成了我的测试并且在第二次失败(我不知道为什么现在也在第二次)和我上面描述的第三次配置并且只在第一次配置中工作。 我没有时间只用 AngularJS 来检查它。 您需要什么文件以及您希望如何发送给您?

如果可以的话,你能把整个东西拉上拉链然后给我发一封电子邮件吗

离子点 io 的麦克

如果可以的话,你能把整个东西拉上拉链然后给我发一封电子邮件吗

邮件已发送。 我将在今天早上尝试制作一个 Cordova/AngularJS 项目以在相同的配置下对其进行测试,但是直到今天下午我才能尝试它,尽管我已经完成了,我也会发送它。

测试它的最重要的配置是创建一个带有 Mac 共享连接的 IPv6/NAT64 网络,但 Mac 的主连接必须是 IPv4 网络,不能有 IPv6 地址,如果没有,应用程序将工作,因为在完全 IPv6 和 IPv6翻译的网络有什么问题,问题是什么时候是链接本地(或零地址)网络(只有一个 IPv6 DNS 地址和本地 IPv4 IP)

我刚刚发送了其他 IPv6 测试项目,但现在使用 Cordova/AngularJS 而不是 Ionic,但我无法测试是否在我上面描述的所有环境中工作,因为在我的办公室我们有一个完全内部的 IPv6 网络,我无法模拟最坏的条件。 今天下午,我将再次测试它与我的 Mac 共享我的家庭 IPv4 网络,创建一个本地链接(或零地址)IPv6 转换网络。

我看到第二个项目已被拒绝,但拒绝电子邮件没有任何理由......

@mhartington关于我几天前发给你的测试项目有什么消息吗?

我从来没有得到它。 你能再发一次吗

迈克·哈廷顿

2016 年 9 月 12 日凌晨 4:53,zantos82 [email protected]写道:

@mhartington关于我几天前发给你的测试项目有什么消息吗?


你收到这个是因为你被提到了。
直接回复此电子邮件,在 GitHub 上查看它,或将线程静音。

我的项目也被拒绝了两次。 经过漫长的开发时间后相当震惊:/

@doonot你能提供更多信息吗? 您是否测试过您的应用程序的 IPv6 兼容性? 您的服务器是否可以从 IPv6 访问?

同样,虽然这不是 Ionic 特定的问题,但我想了解更多信息,以便我们找出如何以最好的方式帮助人们。 所以信息越多越好。

@mhartington我刚刚又发了一次,请检查你的收件箱,你一定有。

@doonot您拒绝的确切原因是什么? 你检查过迈克告诉你的吗?

什么都没有@zantos82

你发到哪个邮箱?

我已发送给 ionic dot io 的麦克。 你有检查过你的垃圾邮件文件夹吗? 我还没有收到退货...

captura de pantalla 2016-09-12 a las 17 11 25

有任何替代电子邮件可以再次发送吗? 可能是附件大小的问题 Mb 吗?

是的,它没有通过我的结束。 如果能push到github,我拉下来看看。

我已经通过 Wetransfer 给你发了,如果你没有收到下载链接我会上传到 Github 或 Bitbucket。

知道了! 现在看看

好,谢谢。 我希望你能解决这个问题,因为我完全无法找到解决方案......

@mhartington嘿,迈克。 是的,我确实使用此链接测试了我的应用程序:

了解和准备 IPv6 过渡

他们说当 iPhone 连接到 IPv6 Wi-Fi 网络时仍然存在问题。 简而言之,显示 Facebook 登录活动指示器,没有任何进展。

现在这些信息不是很有帮助,因为我使用他们提供的步骤对其进行了测试。 我现在要求 Apple 工程师进行代码级分析。 等了好几天才联系我。

我的虚拟主机目前不支持 IPv6,但我听说这根本不是必需的,对吗?

我的系统信息:

科尔多瓦 CLI:6.3.0
Gulp 版本:CLI 版本 3.9.1
吞咽本地:
离子框架版本:1.3.1
离子 CLI 版本:1.7.16
离子应用程序库版本:0.7.3
ios-部署版本:1.8.6
ios-sim 版本:5.0.6
操作系统:Mac OS X El Capitan
节点版本:v5.8.0
Xcode 版本:Xcode 7.3.1 构建版本 7D1014

离子插件:

cordova-plugin-app-event 1.2.0 “应用程序事件”
科尔多瓦插件徽章 0.7.2 “徽章”
科尔多瓦插件相机 2.2.0 “相机”
科尔多瓦插件兼容 1.0.0 “兼容”
科尔多瓦插件控制台 1.0.3 “控制台”
科尔多瓦插件设备 1.1.0 “设备”
科尔多瓦插件对话框 1.2.1 “通知”
cordova-plugin-facebook4 1.7.1 “Facebook 连接”
科尔多瓦插件文件 4.2.0 “文件”
科尔多瓦插件文件传输 1.5.1 “文件传输”
科尔多瓦插件地理定位 2.2.0 “地理定位”
科尔多瓦插件inappbrowser 1.3.0“InAppBrowser”
cordova-plugin-network-information 1.1.0“网络信息”
科尔多瓦插件状态栏 2.0.0 “状态栏”
科尔多瓦插件振动 2.1.1 “振动”
科尔多瓦插件白名单 1.2.0 “白名单”
cordova-plugin-wkwebview-engine 1.1.0-dev "Cordova WKWebView 引擎"
cordova-plugin-x-socialsharing 5.0.9 “社交分享”
离子插件部署 0.5.7 “离子部署”
ionic-plugin-keyboard 2.2.1 “键盘”
phonegap-plugin-barcodescanner 4.1.0 “条形码扫描仪”
phonegap-plugin-push 1.6.1 “PushPlugin”

我的网络主机目前不支持 IPv6,但我听说这根本不是必需的

@doonot不,您的网络主机必须在仅 ipv6 的环境中可访问。 因此,它必须支持 IPv6。

@mhartington您是否重现了该错误? 你知道发生了什么吗?

到目前为止,我还无法重现该错误。 在我的本地测试中,一切正常。 还在做一些更多的测试。

@mhartington oookay,这对我来说是新的。 让我迁移到完全支持 IPv6 的网络托管服务商。 然后,我将重新提交我的申请,并在这里告诉你进展如何。

感谢您的提示迈克!

@mhartington按照我的步骤进行操作,我相信您将能够重现它...

1.- 通过有线将您的 Mac 连接到仅 IPv4 的网络。 这是最重要的一步,因为如果您的 Internet 提供商支持 IPv6,并且您的路由器有 IPv6 外部地址,它将无法工作,因为在完全 IPv6 网络中没有任何问题,它只是在 IPv4 到 IPv6 网络的转换中。
2.- 正如 Apple 所说的创建 IPv6 网络,通过无线方式与您的 Mac 共享您的 IPv4 有线连接。
3.- 如果您的设备有蜂窝连接,打开“飞行模式”,然后打开“WiFi”。
4.- 将您的 iOS 设备连接到已翻译的 IPv4 到 IPv6 网络,并等待提供的 IP、子网掩码、路由器和 DNS 如下所示:
IP地址:169.254.XX
子网掩码:255.255.0.0
路由器:
DNS: 2001:2:0:aab1::1
5.- 打开 IPv6 测试项目。
6.- 打开 Safari 并转到“开发”->“你的 mac”->“index.html”
7.- 当 Safari 检查器打开时,单击“控制台”选项卡。
8.- 点击进入 IPv6 测试项目应用程序的“测试”按钮。
9.- 检查控制台消息。 如果一切顺利(不是很好,真的很糟糕),您会看到“无法访问域 xxx.xxx”。
10.- 请评论你的结果。

请记住,问题不在于完全 IPv6 网络,问题在于仅 IPv4 网络并与转换为 IPv6 网络的 NAT64/DNS64 共享。 苹果通过这种方式进行测试。

网络设置:
screen shot 2016-09-13 at 11 25 05 am

Iphone 的网络设置
img_4192

来自 Safari 开发工具的控制台

screen shot 2016-09-13 at 11 32 37 am

除非我错过了什么,否则对我来说并没有失败。

好吧,它对您有用是正常的,因为您的路由器为您的 iOS 设备提供 IPv6 地址路由器。 您必须没有 IPv6 地址(现在您有两个)和 IPv6 路由器才能获得失败。 由于同样的原因,在我的办公室我无法复制它,但在我的家里我可以复制它。 我认为您可以尝试禁用路由器对 IPv6 的支持,然后再试一次,您怎么看? Apple 的问题是一样的,如果使用 IPv6 本机(完全)网络测试该应用程序运行良好,则问题仅出现在 NAT64/DNS64 转换网络到不支持 IPv6 的 IPv4 网络...

@mhartington检查两种方式之间的差异,我没有任何 IPv6 地址或 IPv6 路由器...

4f4c0bac70315115204f034843b83a9194964089

嗯,那我就在这里不知所措了。 与我的 ISP 交谈,我的服务没有任何 IPv6 功能,并且我的路由器禁用了 IPv6

screen shot 2016-09-13 at 3 13 23 pm

所以我不确定现在该怎么做。 在这一点上,我唯一可以建议的另一件事是创建一个在 ipv6 上运行的简单中间层,并与您的 Web 服务进行对话。 数字海洋对此有支持。 不确定heroku。

尝试停用所有 IPv6 接口,取消选中本页末尾的四个接口并应用。 第 1 点停用 WAN IPv6 连接,但接口停用 LAN/WLAN IPv6 网络。

还是一样的。 即使接口停用,我也无法得到错误。

你有没有关闭并关闭你的路由器和你的mac? 如果您的网络没有任何 IPv6 支持,您的 iOS 设备不能有 IPv6 地址和路由器参数。 我完全确定这就是工作和失败之间的区别,因为这就是我的办公室和我的家之间的区别……感谢您的关注。

@Z3roCoder

根据我的经验,Facebook4 插件是 IPv6 拒绝的原因。 一旦我删除了插件,它就通过了苹果的 IPv6 测试。

我记得从一些人那里读到,在 Facebook4 插件周围使用 Ionic Native 包装器也可以解决这个问题,但我不能保证,因为我自己没有尝试过。

@cojj90我在 Internet 上看到过同样的情况,如果您没有任何其他服务器的请求,这可能是原因,但如果您有更多请求,问题也可能是@mhartington所说的......

嘿,你们会密切关注这一点,以帮助人们尽可能地帮助他们。

@mhartington您是否无法重现失败? 你知道你是否有一些解决方案来通过 IPv6(链接本地或零地址)Apple 测试? 我很担心。 怎么又关门了?

正如我所说,虽然我希望能够提供尽可能多的帮助,但这在技术上不是 Ionic 问题。

我无法在本地复制它,所以我不确定还能做什么。

我在博客文章中添加了一个解决方法,如果您无法托管自己的 IPv6 网络,Digital Ocean 支持 IPv6,您可以编写自己的中间件来解决它。 不理想,但 Ionic 对此无能为力。

@mhartington好吧,我们假设这不是 Ionic 问题(我不确定,因为带有 AngularJS 的 Cordova 效果很好),然后......你不能帮我解决这个问题吗? 我一个人解决不了……我知道还有很多案例,但是没有人有办法解决……

@mhartington
只是我们案例的一些信息,它可能与 ionic 甚至 ipv4 地址无关:
我们今天刚刚通过了一个应用程序的批准,使用具有固定 IPv4 地址(不是 dns)的 ionic v1。
一周前,一个使用 ionicv2 和 dns 的应用程序。

@zantos82你用的是什么插件?

@mhartington在我的项目中,我没有使用 Facebook 插件,但在测试项目中(谁也失败了)我只使用在创建项目时添加的插件,有:

科尔多瓦插件控制台 1.0.3 “控制台”
科尔多瓦插件设备 1.1.2 “设备”
科尔多瓦插件闪屏 3.2.2 “闪屏”
科尔多瓦插件状态栏 2.1.3 “状态栏”
科尔多瓦插件白名单 1.2.2 “白名单”
ionic-plugin-keyboard 2.2.1 “键盘”

@mhartington有什么消息吗? 你知道什么时候会出现问题吗?

@mhartington您保证这不是离子问题,但我确信它是。 三天前,我已经向 Apple 发送了一个带有 AngularJS 应用程序的 Cordova(无 Ionic)用于我的工作,昨天我收到了批准,没有任何问题。 与 web 服务的通信与我为你做的 Ionic 测试项目相同(AngularJS $http)。 然后......我仍然认为这是一个离子问题......

这不是 ionic 问题,因为 Ionic 没有做任何修改 HTTP 的事情。 Ionic 只是应用程序的视图层。

我不知道你的应用程序的细节,或者发生了什么,但我不能强调,离子不会是任何问题的原因,因为它不接触 HTTP。

好吧,好吧,您是 Ionic 团队成员,您可能说的是实话,但我不同意您的观点,因为我的两个测试(Ionic 和 Cordova/AngularJS)项目都必须工作,并且只会失败 Ionic 项目,另一个一个效果很好。

我有一些问题......有什么方法可以用 angulares 函数覆盖离子 angulares 函数来进行一些测试吗? 我认为使用 angular.min.js HTTP 函数而不是 ionic.bundle.js 可能是一个很好的测试。

没有说谎。 只看代码。 这都是开源的,所以请随意四处寻找。

我们实际上是在拉角并只制作一个包含的大文件

ionic.js - 发生在 Angular 之外的实用函数
ionic.angular.js - Ionic 的指令(ion-tabs、ion-item 等)
角.js
角度动画
ui路由器

https://github.com/driftyco/ionic/blob/1.x/config/lib/js/angular/angular.js

我没有说你在撒谎,但考虑到这对我(对苹果来说也是如此)来说有点奇怪,在测试中 Ionic 项目失败并且 Cordova/AngularJS 项目工作(相同的功能和相同的域)......

那么......我可以用 ionic.bundle.js 文件代替这五个文件告诉我再次进行一些测试吗? 我相信你,但是,相信你,在所有这些问题中一定有一些奇怪的地方,我建议寻找它直到它得到解决,因为苹果仍然出于同样的原因拒绝应用程序......

您可以手动包含所有需要的文件,是的。

很确定你只需要这些模块。

'ngAnimate', 'ngSanitize', 'ui.router'

以及在您的应用程序中。

所以你的 index.html 应该有

角度,角度动画,角度消毒,ui路由器,离子,ionic.angular。

好吧,那我试试……我必须在 app.js 中加载模块,对吗? 而且我必须按照你说的顺序加载 index.html 文件中的脚本,不是吗? 我已经下载了除了 ui-router 之外的所有文件,我必须寻找它来下载...我想加载本机文件而不是 Ionic 项目文件(离子需要的文件除外)。

@mhartington我无法再次重现情况,我认为这是由于我的设备更新到iOS 10.0.2版本,因为现在我也有IPv6路由器地址并且总是连接,问题是当我没有IPv6时地址。 你在哪个版本的 iOS 上实现了测试?

@zantos82你可能想试试这个插件https://github.com/wymsee/cordova-HTTP。
我也有同样被 Apple 拒绝的问题。 希望插件解决问题。

@kythanh你能帮我使用cordovan-http吗,我正在尝试但没有成功获取我的数据。

谢谢

Îve 发现带有 wkwebview 的 pb 可以让苹果拒绝由于 ipv6 连接。
Îve解决了它,一切顺利!

抱歉, @elepetit ,你能解释一下你是如何解决这个问题的吗?

你好

我刚刚用 wkwebview 替换了 uiwebview,然后苹果不会因为 Ipv6 而拒绝我的应用程序......

伊曼纽尔·莱佩蒂
特使 iPhone

Le 19 mars 2017 à 01:24, Michael Amaral [email protected]一个écrit:

抱歉, @elepetit ,你能解释一下你是如何解决这个问题的吗?


你收到这个是因为你被提到了。
直接回复此电子邮件,在 GitHub 上查看它,或将线程静音。

所以......那似乎是什么问题? 怎么服呢? 我有同样的问题,似乎无法解决

就我而言,我刚刚安装了driftyco 的wkwebview,Apple 接受了它。

卖给我

伊曼纽尔·莱佩蒂
特使 iPhone

2017 年 3 月 28 日 à 13:08,Michael Amaral通知@github.com 一个 écrit :

就我而言,我刚刚安装了driftyco 的wkwebview,Apple 接受了它。


你收到这个是因为你被提到了。
直接回复此电子邮件,在 GitHub 上查看它,或将线程静音。

大家好!
由于 ipv6,我的应用最近两次被拒绝。

苹果评论

从苹果的屏幕截图中,应用程序在 ipv6 环境中的离子启动画面上停止。
@zantos82相同的条件,我使用苹果的指导进行测试,创建 ipv6 并且应用程序正常工作。 顺便说一下,我们的网络服务器在中国。
否则,苹果拒绝了我的应用程序,因为它无法在 ipv6 上加载并发布屏幕截图。
我怀疑审稿人在美国,使用美国网络连接中国服务器很慢。
希望能得到您的帮助。

如果你允许稍微题外话,我喜欢你对这个问题的热烈讨论@zantos82 @mhartington

谢谢你的问题! 此问题已被锁定,以防止与原始问题无关的评论。 如果这仍然是最新版本的 Ionic 的问题,请创建一个新问题并确保完整填写模板。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

brandyscarney picture brandyscarney  ·  3评论

MrBokeh picture MrBokeh  ·  3评论

SebastianGiro picture SebastianGiro  ·  3评论

brandyscarney picture brandyscarney  ·  3评论

BilelKrichen picture BilelKrichen  ·  3评论