2019年苹果包问题总结
文章目录
苹果包现状
- 2018年,由于苹果进行棋牌游戏审核,对公司提交的苹果包进行审核,发现提审过大量类型的应用,下架了公司所有appstore包。
- 由于appstore包被封,所属的苹果开发者账号也被封了,无法打出旧包名的包进行测试。
- 重新提审appstore包,棋牌游戏基本上提不过去,采用马甲包的方式,也没有通过。
- 2019年,各个棋牌公司大都采用企业签的方式来维持苹果用户,企业账号价格飞涨。随着时间的推移,越来越多的苹果企业签被封,企业签越来越难签。并且签了之后,经常被封,企业签每次被封后,玩家需要重新下载,影响玩家体验。
- appstore包是一个2017年初提审的苹果包,包体支持ipv6的网络,但是并未对虚拟的ipv6(::ffff:开头的)做处理。
对策
- appstore包被下架后,采用了企业签的方式提供给玩家进行游戏,企业签需要找第三方进行签注和更换包名。
- 导出包后,修改包名,通过测试账号安装测试。
- 登录以前的账号,发现以前开发者账号下提审通过待上架的包重新出来了(可能是苹果规则筛选问题),将以前的包更新成最新的包。
修改包名
已经在另外一篇印象笔记中描述了
标题:苹果包重新签名
落地页下载ios包的配置
已经在另外一篇印象笔记中描述了
标题:ios企业签落地页配置
ios企业签包无法登录的问题
- 不能登录问题
突然爆发大面积苹果用户登录不上,appstore包和企业签包,但是安卓包没有问题
对玩家日志进行分析,发现不能登录的玩家通过域名解析出来的IP是ipv6的,但是服务器并不支持ipv6,并且解析出来的ipv6的虚拟的ipv6,前缀为::ffff:这种。
解决方式:- 修改代码,将解析出来的ip进行修改,去掉::ffff:前缀,改成ipv4的IP进行登录
- 服务器增加ipv6的域名解析
- 采用阿里的httpdns进行dns解析。加快解析速度
- 频繁提示网络弱,断线重连问题依旧
解决方式:- 经过排查是因为域名做了dns动态加速,导致心跳包被阿里优化,前几次心跳被合并,导致心跳没收到出发网络弱及掉线。
- 加大心跳的时间间隔
将商城包更新到最新的包
部署服务器
- 服务器代码找不到了,服务端重写了一个用于验证登录的服务器,对登录玩家的ip进行限制,根据ip设置白名单,用于白名单更新。
客户端
- 根据之前留下来的表格,一个个试验出服务器的IP地址和端口
- 配置更新包上传到oss上,用于测试更新
增加appstore包的渠道统计
增加每个包的渠道统计,了解玩家的分布
修改横竖版界面
由于提审时所有的包都提的是横版,而我们的游戏很多是竖版,导致界面有问题
- 将原本竖版的游戏改为横版
最初的时候开发游戏都是维护2个版本,横竖版都需要维护。将以前的横版更新成最新的,进行修改后提交上线。 - 游戏还是采用竖版界面,但是将界面进行修改,改成横版
a. 将所有的界面进行重新排版,制作成横版(修改成本和维护成本太大,后来放弃)
b. 采用代码将大厅内的所有界面进行调整
调整方式: 代码新创建一个panel,将原本root节点上面的界面全部copy到新的节点上,然后将界面进行旋转90度,再做偏移处理。
这样做的结果是,大大减少了修改成本,所有包都通用,界面不需要做2套,维护简单。
兼容处理
- 提审的包不支持底层的复制功能,
兼容: appstore包屏蔽掉,后面采用拉起网页,让数据传入,玩家通过点页面上的按钮实现复制文字功能。 - Toast和通用弹窗界面并没有转变过来,
兼容:修改函数传入形参修改。让界面能够正常转过来。 - 更新之后大小屏的问题,发现是更新后屏幕的宽高获取反了,导致大界面下面叠了一个横着的小界面。
修复:通过获取正确的宽高,解决了这个问题 - appstore包无法分享,
兼容:通过拉起分享时,将包名写死成其它可以正常分享的包名达到拉起分享的目的。(ios分享包名和appid感觉不需要对应) - 无法接入闲聊SDK,
兼容:通过网页,将截图加载到网页上,然后提示玩家长按复制,点击按钮分享到微信/闲聊
appstore包无法登录的问题
反馈无法登录更新
appstore包反馈无法登录更新,主要地区为安徽淮北地区,但是自己测试,无法复现出来。
iphones手机在旧版本的时候不支持ipv4/ipv6的解析,只支持单ipv4,升级12.1之后开启
由于appstore包工程和代码已经找不到了,无法调试,根据企业签的包无法登录的情况,判断可能是因为解析出了虚拟ipv6地址所致。
采用不同的ip进行测试:
纯ipv4:能够正常登陆和更新
纯ipv6:能够正常登陆和更新
虚拟ipv6:“::ffff:”+ipv4 无法登录
根据测试结果,判断是因为服务器没有增加ipv6的解析能力,导致运行商解析出来了“::ffff:”的虚拟ipv6,导致登录不上。
于是联系阿里,了解到可以购买ipv6的域名解析能力,得到纯ipv6。
增加域名ipv6的解析
增加域名ipv6的解析后,还是又许多玩家无法登录。
工具和测试方法的收集
每次企业签包被封后,玩家就会大量下载appstore的包,反馈过来登录不上
收集到的比较有用的工具和测试网址:
- ipv6测试网址:http://test-ipv6.com/
功能:可以判断当前网络是否能够访问纯ipv6,DNS服务器是否具备ipv6的解析能力等信息。 - i Net Tools
功能:ping、路由等信息 - Best NetTools(上面软件的加强版)
功能:ping、路由、Network Info等
出差计划
一个多月以来,只要企业签挂了,就有玩家来反馈appstore包无法登录、更新。已经到了必须解决的时候了。
根据上级安排,派遣我去淮北地区出差。
出差前的准备
- 苹果电脑、苹果手机准备
提申请,领mac和iphone - xcode打包环境安装
a. 更新mac系统
b. 下载xcode
c. 拷贝现有工程,修改打包中的报错,具体环境配置查看笔记:Mac安装cocos2d quick工程环境 - 将登录代码好好过一下,必要的地方增加打印
对现在最新的代码进行修改,发现改动量太大了,而且结构都发生了变化,最后选择一份找到的同时期的代码来进行测试。
对底层代码进行阅读,发现了一些问题和疑点
问题:- 原有的旧代码没有断线重连机制,没有超时提示。
- 就算是没有网络的情况下,也会一直转圈,不会有任何提示。
如果解析到ipv6的ip,会采用ipv6的方式去进行socket的链接。
这个地方产生了疑点:
a. iphone旧版本默认没开启ipv6的解析
b. 采用单ipv4、单ipv6、ipv4/ipv6的网络,看看结果
- 模拟单ipv4、单ipv6、ipv4/ipv6的网络
安卓手机自始至终没有出现过无法登录的情况
安卓手机默认是开启了ipv4/ipv6的网络
通过配置安卓手机的APN,对网络进行设置,可以模拟出各种网络环境 - 根据模拟的网络进行测试
将热点分别设为单ipv4、单ipv6、ipv4/ipv6的网络
单ipv4:正常登陆,正常更新
单ipv6:正常登陆,无法更新
ipv4/ipv6:正常登陆,正常更新
上述测试并没有复现出来玩家的问题 - xcode调试域名解析的结果
单ipv4:解析出来是ipv4的地址
单ipv6:解析出来是ipv6的地址
ipv4/ipv6:ipv4和ipv6的地址都有
根据5、6的测试结果及代码优先采用ipv6进行连接进行分析,得出以下结论:- 单ipv4能够正常登陆和更新
- 单ipv6只能登陆,无法更新,推断是oss地址不支持ipv6
- 通过强行修改代码进行测试
- 注释掉ipv6链接的代码,默认采用ipv4的方式链接
结果:无法登录,ip是ipv6的 - 单ipv4的网络,采用ipv6的方式去连接
结果:无法登录
- 注释掉ipv6链接的代码,默认采用ipv4的方式链接
- 联系无法登录的玩家,预约时间去找玩家了解情况
根据上面的测试结果,得到了一个待确认的问题:
玩家是否是因为解析了ipv4、ipv6的IP,但是自身网络又不支持ipv6,采用了ipv6的方式去登录。
出差到当地实际查看
到达合肥机场后,马上进行了测试,复现了玩家转圈的那种情况。并且手机系统是新版的。验证了之前的猜测。
以下为测试的所有过程
测试时间:9月23日 9:00
安卓手机开热点:
单IPV4模式:
游戏包复现一直转圈的问题,
插电脑调试,发现单ipv4模式下也会解析出ipv4和ipv6的地址,
当ipv4和ipv6同时存在的情况下,会用ipv6去连接,但是网络环境是ipv4,无法连接上
单ipv6模式:
游戏包能够连接上,收到下载,但是下载不了
插电脑调试,发现单ipv6模式下也会解析出ipv4和ipv6的地址,
当ipv4和ipv6同时存在的情况下,会用ipv6去连接,收到更新后下载不了,可能是下载的地址不支持ipv6
ipv4/ipv6混合模式:
游戏包能够正常下载,也能够正常更新
同样解析出ipv4和ipv6的地址,但是能够支持ipv6的连接,所以连接上了。
下载更新时,存在ipv4环境,所以下载更新成功## 标题了。
下一步测试:
让运维去掉ipv6的解析,看各个模式下的解析情况,如果还能解析出来ipv6地址,并且是虚拟的ffff地址,那么应该是运营商增加了ipv6的解析,
但是玩家只支持ipv4,所以连不上。如果上这种情况,那就没办法解决了,
这种情况下只能找到ipv4/ipv6混合的网络给他,然后看能不能更新。因为登陆需要ipv6网络环境,下载更新需要ipv4网络环境。
- 首先确认玩家手机系统是否支持ipv6网络,不然解析出来ipv6,会一直登录不了
ios 12.1默认开启了ipv4和ipv6,就算解析出来了有ipv6,但是手机不支持ipv6网络环境也没有办法
测试时间:9月23日 10:13
安卓手机开热点
连接其它游戏,其它只有ipv4解析
单ipv4模式:
解析出来的ip只有ipv4,能够连上服务器和更新。
单ipv6模式:
解析出来的ip只有ipv4,连不上服务器,可能是网络上ipv6,不能连ipv4
同样的单ipv4环境,其它游戏正常,游戏不正常,这两个的区别在于ipv6的解析
测试时间:9月23日 10:24
安卓开热点
去掉游戏的ipv6解析(生效有延时)
单ipv4网络:
解析出来只有ipv4地址,能够正常连接服务器和更新了
单ipv6网络:
连不上服务器
解析出来只有ipv4地址,连不上服务器,出现一直转圈的现象,网络环境和ip模式不匹配
ipv4/ipv6
解析出来只有ipv4地址,可以正常连接服务器和更新
测试时间:9月23日 11:11
游戏麻将
域名:huangs.dasheng-game.com
服务器模式:ipv4
联通热点:
单ipv4:
ipv4:120.27.234.111
ipv6:没有
表现:正常更新
单ipv6:
ipv4:120.27.234.111
ipv6:没有
表现:登录不上,一直转圈
ipv4/ipv6
ipv4:120.27.234.111
ipv6:没有
表现:正常更新
移动热点:
单ipv4:
ipv4:120.27.234.111
ipv6:没有
表现:正常更新
有时会登录缓慢,但是还上能够正常更新
单ipv6:
ipv4:120.27.234.111
ipv6:没有
表现:登录不上
ipv4/ipv6
ipv4:120.27.234.111
ipv6:
表现:正常更新
电信热点:
单ipv4:
ipv4:120.27.234.111
ipv6:没有
表现:正常更新
单ipv6:
ipv4:120.27.234.111
ipv6:没有
表现:登录不上,一直转圈
ipv4/ipv6
ipv4:120.27.234.111
ipv6:没有
表现:正常更新
之前能够获取到ipv6点地址,可能是之前有缓存的原因
第一个玩家
9月23日 下午4点半
玩家1:
服务器环境:单ipv4环境(ipv6的解析上午已经去掉了)
之前反馈游戏无法更新:
去了之后,发现玩家下载不了游戏麻将,appid的账号选择不上中国,应该是账号续费之前她试过更新不了,后面账号续费,关闭了国外的游戏包下载。
然后帮她设置地区,她不记得appid的账号,于是帮她重置appid账号,通过QQ邮箱找回账号。
但是她QQ的密码不记得了,通过手机找回,手机号验证不通过,不知道是不是她把手机输入错了,
然后通过手机发送短信重置QQ密码,然后通过QQ邮箱充值appid密码。
改完appid密码后,修改地区为中国大陆,能够搜索到游戏麻将了。
通过wifi和流量下载后,发现不能够更新,
检测wifi环境为单ipv4,但是现在服务端是单ipv4环境,她还是登录不上。 疑点1
用我们的手机开热点给她的手机提供网络,单ipv4和ipv4/ipv6混合模式都能够正常更新。 疑点2
按照预测,如果此时加上ipv6的解析,应该会出现登录不上的情况。于是让运维增加了ipv6的解析,结果玩家和我们自己测试还是可以登录和更新。 疑点3
离开那个地方后,吃饭时自己测试,发现更新不了,用的是单ipv4网络。发现现在可以解析到ipv6了。之前估计是网络信息有缓存,没有及时被刷新到。
推测:
疑点1:玩家的流量和wifi都是此前更新不上时已经存在的,已经存在了ipv6的解析结果,当运维去掉后,还缓存有,所以更新不了。
疑点2:我们提供给玩家的热点是此前没连接过的,此时关闭了ipv6的解析,只能解析到ipv4,单ipv4是可以更新到的。
疑点3:因为网络dns解析缓存的问题
回顾:
由于之前不会用工具看dns解析的结果。没有及时发现问题。
但是不会设置wifi的手动解析dns,不能将玩家已经被污染的环境修复。
没有对玩家的手机进行重新设置网络环境。
服务器环境:ipv4和ipv6环境
吃饭时有一台手机无法更新了,一直转圈。
插上电脑调试,发现此时可以解析出ipv4和ipv6的结果,但是手机网络是通过安卓手机提供的单ipv4热点。
由于ipv6的连接优先级高于ipv4,当用ipv4的网络环境去连接ipv6的id就会出现转圈的问题
不断的测试,尝试复现无法登录的现象
回到酒店后,一直在研究怎么将那台重新开始转圈的手机弄成可以正常更新。
统一网络环境为ipv4,通过多台iphone对比,有的可以更新,有的不行对比。确认了单ipv4的网络下,只要解析出了ipv6的ip就一定更新不了的问题
正常的网络解析:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KnEGCoXw-1572262873791)(en-resource://database/1381:1)]
无法登录的网络解析:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OdVxwJ94-1572262873792)(en-resource://database/1383:1)]
通过base Net Tools工具和查看wifi配置佐证了单ipv4连ipv6解析的ip更新不了的问题
然后想办法对网络进行设置,看能否解决问题
wifi连接的网络进行设置的尝试
对新版本的ios系统中的wifi进行调试,发现去掉ipv6的dns解析后,成功了一次。能够正常更新了。
然后设法让手机恢复到不能更新的状态,再重新进行设置。
经过多次测试后发现,如果给手机提供ipv6的网络,然后解析到ipv6后,再切到单ipv4的网络,在连接的wifi中就可以看到这个wifi存在2中dns解析
分别是ipv4和ipv6,此时就能够复现更新不了的问题了。
更新不了的问题复现了之后,设法修改wifi网络重新能够正常更新。
反复测试后,将连接的wifi中的dns解析修改为手动,删除掉ipv6的解析,保存后,断开wifi,然后重新连接,就只有ipv4的dns解析了。
经过测试,发现这个方法能够正常更新了。这部手机的系统为ios 12.4
拿出另外一台手机,系统为10.3.3
设置wifi的配置,发现不管怎么配置都还是不行,而且这个手机不能选择手动选dns,无法删除ipv6的ip
旧版本的ios手机无法设置wifi的dns解析,无法通过修改dns解析来恢复正常
结论:新版系统可以通过wifi设置来解决更新不了的问题,旧版系统不行。
当前ipv4和ipv6都开起的情况下,旧系统如果不升级只能通过连接ipv4/ipv6混合模式的热点进行连接和更新。
手机移动网络环境下
发现手机移动网络如果解析出了ipv6和ipv4的ip结果,
手机系统是旧系统,那么它是连不上的。猜测是因为旧系统根本没有开起ipv6的功能,ip解析的结果是运营商给的。
手机系统是新系统,能够正常的更新。
设法调整移动网络的配置
新/旧系统都没法像安卓那样设置网络是单ipv4还是ipv6或者ipv4/ipv6混合模式
通过修改网络环境的尝试:
猜想:3G网络上很多年前的,3G网络应该只有ipv4,不会有ipv6
将手机的网络修改为3G网络,发现能够登录,登录超级慢。更新不上,一直卡在0%。(此时我观察手机网络为E,并不少H,并且信号不强,酒店环境比较封闭,遮挡严重)
猜测3G网络应该是可行的,0%应该是网络不好,下载不到的原因。
第二个玩家
9月24日 9:00
第二天上午见玩家:
当前服务器解析为ipv4和ipv6
玩家手机系统ios 9.3,玩家不愿意升级系统,也不愿意插电脑调试
玩家用流量不能够正常更新,提供单ipv4的网络也不能更新。
猜测:流量和单ipv4的网络,但是运营商的dns还是可以解析到ipv6的ip,所以还是拿ipv6的ip去连接
重置过手机网络,单ipv4和她自己的流量也不行。
提供ipv4/ipv6的网络就可以正常更新了。
尝试让玩家用流量,然后将网络改为3G,网速很慢,登录和更新都很慢,但是可以正常更新。 猜测:3G网络在多年前布局的基站,可能dns解析就算有部署ipv6,但是都不会解析出来。
切换服务器解析为单ipv4后,玩家还是不能用流量正常更新,猜测是因为运营商的域名dns解析存在缓存。
第三个玩家
9月24日 13:00
第二天下午见玩家:
当前服务器解析为ipv4和ipv6
玩家手机系统ios 12.4(最新),愿意插电脑调试
不管是采用什么方式都不能更新,插电脑调试也没发现异常
切换服务器解析为单ipv4后,玩家还是不能正常更新。
后来发现是因为玩家以前下载过游戏麻将,然后将游戏麻将的网络禁用了。
打开游戏麻将的网络权限后,用流量和wifi都能够正常更新。
ios商城包登录转圈总结:
目前服务器的域名解析为单ipv4模式,以前是ipv4和ipv6都有解析
ios商城包不能更新,引导玩家步骤优先级:
- 检查是否允许了应用的网络权限。
2.让玩家重启手机后再试一下。
3.让其它玩家提供热点(最好是安卓手机)给玩家看是否能够更新,如果玩家不能更新,选择忘记这个wifi,然后重新加入,看能够正常更新,如果还不行,将wifi点开,截图提供给我们。
4.让玩家将网络改成3G网络试一下。3G网路可能存在网速超级慢的情况,但是确实是可以更新成功的。更新过程中切换网络会导致更新不能继续。
5.如果玩家手机系统低于12.4,可以让玩家升级系统后再试,还是不行的话,将1、2、3步骤试一遍。
6.如果不愿意升级系统,并且通过以上步骤都不能解决,那么反馈给技术,然后技术跟进这个玩家的具体情况。
网络及手机环境分析:
1.iphone无法设置流量环境下的网络环境
2.手机系统升级后具备ipv6的解析能力
3.手机系统不管升不升级,wifi支持ipv6的解析能力
4.域名解析后的ip是供应商提供的,就算当前网络不支持ipv6的情况下,也有可能得到ipv6的ip解析结果,导致无法登录。(无法验证这个猜想)
5. 去掉ipv6的解析能力后,不能及时生效
6. 可以手动设置wifi的DNS解析结果,达到指定ip模式的效果。设置完后需要断开wifi重新连接生效。
7. 3G网络由于基站的原因,就算增加了ipv6的解析能力,也无法解析出ipv6的IP,不同地区3G网络速度超级慢。
追踪问题的方法
- 详细阅读代码,找出可能有问题的点
- 查找测试工具及网站
- 条件有限时,创造条件验证猜测。
- 反复测试,测试结果与期望不符时,仔细追溯问题的原因。