强势的库克时代到来,苹果开启了强制IPV6审核,大家也知道中国现在的情况,除了教育网实验性的支持IPV6,ISP运营商还不支持,想必大家都陆陆续续的遭受到了苹果无情的拒绝,以前开个加急,审核时间也就一天,快的话2小时就可以过,而现在一次又一次的拒绝,让国内开发者苦不堪言.不过聪明的中国人,不会被这样的问题打倒的,中国有句古话叫道高一尺,魔高一丈.公司的两个APP在经过两轮苹果残忍拒绝后,在7月底还是审核通过了.在此跟大家分享一下审核通关的经验.最近看大家都在聊ipv6审核,有的运气好,没做任何改动就通过了,有的拒绝了10几次还是通不过.我想说,我们不靠运气,需要靠实力.
2016年6月1日起所有应用必须支持IPv6-Only网络,一方面App程序开发需要注意支持IPV6,另一方面为了让苹果快速审核,服务器需要支持IPV6的访问.
这里就不普及IPV6基础知识,我们主要看看程序开发需要支持的地方和送审时服务器的配置.
一.第一步:确保你的应用程序中没有违反以下基本原则
1.禁止在协议中使用IP地址。许多通信协议,如会话发起协议(SIP),文件传输协议(FTP)的WebSockets和对等网络协议(P2PP),包括在协议报文的IP地址文字。例如,该FTP参数的命令DATA PORT,并PASSIVE包括IP地址文字交换信息。类似地,IP地址文字可能出现在SIP报头字段,例如的值To,From,Contact,Record-Route,和Via.
2.禁止在配置文件中的使用IP地址,而是使用域名。配置文件通常包含IP地址的文字.
3.不建议使用IP进行网络预检。许多应用程序试图主动检查Internet连接,或者通过IP地址常量来网络可达性的API活跃的Wi-Fi连接。
如果由于业务需要,使用了Reachability进行网络的状态判断,不用担心,勿须作任何修改,Reachability在IOS9上是支持ipv4和ipv6的.但在IOS8以下不支持ipv6,但这仍满足苹果对于最新系统上支持ipv6的政策要求.
4.不要使用低级别的网络API。有些应用与插座等原始的网络API,如直接合作gethostbyname,gethostbyname2和inet_aton。这些API都容易滥用或他们只支持IPv4,例如,主机名解析为AF_INET地址族,而不是AF_UNSPEC地址族.
5.用小地址族的储存容器。有些应用程序和网络库使用的地址存储容器,如uint32_t,in_addr和sockaddr_in-即都是32位或更小。请参阅使用大小合适的贮存容器.
6.检查源代码对于IPv6 DNS64 / NAT64不兼容性,发现以下的方法,请删除,检查并消除特定的IPv4的API,如:
inet_addr()
inet_aton()
inet_lnaof()
inet_makeaddr()
inet_netof()
inet_network()
inet_ntoa()
inet_ntoa_r()
bindresvport()
getipv4sourcefilter()
setipv4sourcefilter()
getaddrinfo()
getnameinfo()
7. 应用里面的API请求,一般都会使用AFNetworking进行请求发送,鉴于历史因素,应用的代码基本上都引用了AFHTTPRequestOperation类,所以目前API网络请求均需要通过NSURLConnection发送出去,所以必须确认NSURLConnection是否支持IPV6. 经过测试,NSURLConnection在最新的iOS9系统上是支持IPV6的,IOS9.3在NAT64环境下会将ipv4合成ipv6,因此能够正常访问.
8.本机IP获取支持IPV6,在模拟器和真机上都会出现以FE80开头的IPV6单播地址影响我们判断,所以在这里进行特殊的处理,当第一次遇到不是单播地址的IP地址即为本机IP地址
(NSString *)deviceIPAdress
{
while (temp_addr != NULL) {
NSLog(@"ifa_name===%@",[NSString stringWithUTF8String:temp_addr->ifa_name]);
// Check if interface is en0 which is the wifi connection on the iPhone
if ([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"] || [[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"pdp_ip0"])
{
//IPV4地址,直接转化
if (temp_addr->ifa_addr->sa_family == AF_INET){
// Get NSString from C String
address = [self formatIPV4Address:((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr];
}
//IPV6地址
else if (temp_addr->ifa_addr->sa_family == AF_INET6){
address = [self formatIPV6Address:((struct sockaddr_in6 *)temp_addr->ifa_addr)->sin6_addr];
if (address && ![address isEqualToString:@""] && ![address.uppercaseString hasPrefix:@"FE80"]) break;
}
}
temp_addr = temp_addr->ifa_next;
}
}
}
二.网络和服务器同时支持ipv6
网络部分需要服务器支持IPV6访问,但国内除了教育网外,运营商暂时还不支持,要想让苹果审核团队顺利的访问国内的服务器,就需要一台支持IPV6的服务器进行中转,具体的原理也很简单,找一台国外支持ipv6的服务器作为流量中转即可.
让域名支持ipv6,将AAAA记录解析到支持ipv6的服务器上.有以下几种方式获得支持ipv6的服务器
- 购买国外支持ipv6的vps,比如搬瓦工,Linode,host1plus
- 通过he.net为Linux添加ipv6支持.
参考链接 :
通过上面的方式比较麻烦些,需要购买国外服务器,如果你想快速的搭建服务器并支持ipv6,可以使用我的服务器作为中转,将域名AAAA记录解析到 2607:8700:102:d63b:: 这个ipv6的地址上,然后邮件" dekinsq@gmail.com " 将转发地址+端口发给我,如果是SSL地址,请将证书文件(*.key,*.pem)一并发给我,我将提供转发服务,只会将来自ipv6的流量(苹果审核流量)转发到真实的服务器,并不会影响国内用户的访问.
注:收到订单后1小时内处理完成,可加微信"sh110876925"进行沟通.添加微信时请注明审核通关.
示意图如下:
查看服务器ipv6和ipv4地址:
以下是阿里云域名解析示例:
以下为nginx转发示例:
- 用尽洪荒之力整理的Mysql数据库32条军规(转)
今天上午吐血整理了Oracle SQL性能优化的40条军规,其中很多规则也是适用于Mysql的,结果今晚发现这一篇文章——用尽洪荒之力整理的Mysql数据库32条军规,和我的竟有异曲同工之妙,当然不同 ...
- 用尽洪荒之力学习Flask源码
WSGIapp.run()werkzeug@app.route('/')ContextLocalLocalStackLocalProxyContext CreateStack pushStack po ...
- linux服务器关闭ipv6 方法
第一个文件: /etc/sysconfig/network 第二个文件:如无此文件,vim添加 /etc/modprobe.d/disable_ipv6.conf
- App审核被拒(后台定位被拒,ipv6被拒,广告标示被拒的解决方案)
ipv6被拒问题描述: 解决方案支持ipv6 1)搭建ipv6 环境,搭建好的ipv6 ,环境会有一个共享wifi, 具体如何搭建ipv6测试环境参考本地如何搭建IPv6环境测试你的APP2)app连 ...
- iOS应用支持IPV6,就那点事儿
原文连接 果然是苹果打个哈欠,iOS行业内就得起一次风暴呀.自从5月初Apple明文规定所有开发者在6月1号以后提交新版本需要支持IPV6-Only的网络,大家便开始热火朝天的研究如何支持IPV6 ...
- iOS应用支持IPV6
一.IPV6-Only支持是啥? 首先IPV6,是对IPV4地址空间的扩充.目前当我们用iOS设备连接上Wifi.4G.3G等网络时,设备被分配的地址均是IPV4地址,但是随着运营商和企业逐渐部署IP ...
- linux系统关闭IPv6的方式
云服务器 ECS> Linux操作运维问题 > 应用配置 > linux系统关闭IPv6的方式 linux系统关闭IPv6的方式 IPv6被认为是IPv4的替代产品,它用来解决现有I ...
- App store 应用审核由于 IPv6 网络问题被拒的一点分析
App store 应用审核由于 IPv6 网络问题被拒的一点分析 六月以后陆续有一些软件提交市场的时候被拒了,症状基本就是无法登陆啥的.我们公司的应用也未能幸免. 很多同学也想了不少办法,申诉. ...
- 配置阿里云ECS支持IPv6,解决苹果app审核失败问题
前几天iOS的App提交给苹果审核没通过,给出的原因是:该应用在 IPv6 的环境下无法使用.检查发现:阿里云优化过的系统没有启用IPv6协议,需要配置启用一下,但是只单独启用IPv6也是无法直接提供 ...
随机推荐
- express快速搭建web server
安装express4.x npm install -g express npm install -g express-generator //express命令行工具在4.x分离出来了 express ...
- 漂亮的title提示信息
<HTML> <HEAD> <title>一种很酷的文字提示效果演示</title> <style> .tableBorder7{width ...
- rsync+inotify 实现服务器之间目录文件实时同步(转)
软件简介: 1.rsync 与传统的 cp. tar 备份方式相比,rsync 具有安全性高.备份迅速.支持增量备份等优点,通过 rsync 可 以解决对实时性要求不高的数据备份需求,例如定期的备份文 ...
- <转载>NPOI Excel 单元格背景颜色对照表
我转载地址:http://www.holdcode.com/web/details/117 NPOI Excel 单元格颜色对照表,在引用了 NPOI.dll 后可通过 ICellStyle 接口的 ...
- ABK (枚举)
ABK Accepted : 24 Submit : 176 Time Limit : 1000 MS Memory Limit : 65536 KB 题目描述 ABK是一个比A+B还要简单 ...
- 备份还原mysql数据库
Windows下cmd命令行中备份还原mysql数据库 先cmd 上cd 到mysql的安装bin目录下,然后再运行下面的命令. 例如:cd C:\Program Files\MySQL\MySQL ...
- android edittext 去边框
EditText的background属性设置为@null就搞定了:android:background="@null" style属性倒是可加可不加 附原文:@SlumberMa ...
- [ruby on rails] 跟我学之(6)显示指定数据
根据<[ruby on rails] 跟我学之路由映射>,我们知道,可以访问 GET /posts/:id(.:format) 来显示具体的对象. 1. 修改action 修改 ap ...
- django revision
由于多次涉及到了这个东东,又不是很理解机制,决定深入研究下. what django-revision到底啥玩意?readthedocs上只有一句话概括:django-reversion can be ...
- 【OpenStack】OpenStack系列1之Python虚拟环境搭建
安装virtualenv相关软件包 安装:yum install python-virtualenv* -y 简介,安装包主要包括, python-virtualenv:virtualenv用于创建独 ...