iOS10的坑:新机⾸次安装app,请求⽹络权限“是否允许使⽤数
据”
这个坑最近弄得我很抓狂,不过现在基本弄清楚了。记录⼀下过程中我收集到的信息,分享给⼤家。
症状
iOS 10 之后,陆陆续续地有⽤户,说新机第⼀次安装、第⼀次启动的时候,app ⾸屏⼀⽚空⽩,完全没数据。kill 掉重新打开就好了。⼀开始以为是⽤户⽹络情况不好,但随着越来越多的⽤户报告这个问题,我意识到这并不是偶然情况。但是并⾮所有⽤户都如此。
⽽且卸载掉之后,如果再装,也不会出现这现象。问题只会出现在这台设备第⼀次安装、第⼀次启动的情况下。如果把⼿机抹掉、重置,问题还能重现。
定位问题
这个问题真的很棘⼿,也很难定位。幸运的是,公司同事想到把⼿机抹掉重置,得以在我眼前重现问题。
我发现的是,app ⾸次启动会弹出⼀个询问⽤户“是否允许应⽤访问数据”的弹框,类似下图:
询问⽹络权限的弹框
虽然 app 刚打开的时候是⼀⽚空⽩,但我发现进去之后,登录、下拉刷新等都没问题。因此很容易猜测出这样的结论:⽤户点“允许”之前,⽹络请求全都是失败的;⽽点“允许”之后,⽹络请求就能正常进⾏了。
玫瑰花含义>元旦祝福语简短创意违章缴费问题原因
蜂窝移动⽹络的两种界⾯
进到⼿机的 设置->蜂窝移动⽹络,如果看到如左图就说明是不会弹框的机型,如果看到如右图,说明是会弹框的机型。
那么这个新功能会为⽤户带来哪些问题呢?问题主要在于,⽤户点击“允许”之前,所有⽹络请求都是被禁⽌的。具体有两种表现:
1. 少部分⽤户根本不显⽰弹框,所以⽹络请求⼀直被禁⽌。针对这部分⽤户,只能通过客服引导,按照掘⾦的这篇⽂章,逐个尝试⾥⾯的解决⽅
案;
2. 对于绝⼤部分⽤户,弹框会正确显⽰;然⽽从 app 启动到⽤户点击“允许”需要⼀段时间,在这段时间内发出的⽹络请求全都会直接失败;
危害公共安全罪量刑如果⽤户点击“不允许”,app 永远⽆法访问⽹络,Wifi 和数据流量均不可以。当然,这是⽤户⾃⼰的选择,我们没什么可做的。我们主要需要解决的是上⾯的第⼆个问题。
影响范围
高速免费节日有哪些这个特性推出之后,⼤部分 app 应该都会受到不同程度的影响。可以着重在这⼏个⽅⾯检查⼀下⾃⼰的 app:
1. ⾸屏数据。⾸屏⼏个 tab 的数据往往在 app 启动时即加载,也就是在⽤户点“允许”之前。很容易造成⽤户第⼀次进⼊时,⾸屏数据空⽩。
2. 推送。通常的处理逻辑是,把注册设备远程推送的代码写在 appDelegate ⾥。经过测试发现,这种写法下允许推送的弹框和允许使⽤⽹络的
弹框出现的顺序没有⼀定。如果先出允许推送的弹框,⽤户点击允许,此时注册 deviceToken 是不能成功的。当然如果⽤户允许访问⽹络,第⼆次打开 app 时也会⾛⼀遍注册远程推送⽅法,此时就能注册成功了。流行文化
3. 其他⾸次启动的处理。诸如⼴告页、活动页之类,需要在启动时请求的数据。新版本的更新检查往往也在启动时进⾏,但这⼀点影响不⼤,因
为⾸次打开的⽤户⼀般都是处于最新版。另外,常常会在新设备⾸次启动时,上传⼀个设备唯⼀标识⽤于统计⽬的,例如 IDFA。
解决⽅案
在重置过的⼿机上,尝试装了⼀些⼤⼤⼩⼩的 app,发现不少 app 在适配这个新特性上都存在⼀些⼩问题。⽽有些 app 也做了⽐较有特⾊的处理。
不幸的是,苹果这个功能可能出得太仓促,并没有给开发者提供相应的 API。所以,我们没办法检测到⽤户点击“允许”或“不允许”⽹络请求的回调,也没法检测到当前⽤户是否授权的状态。只能通过⼀些特殊处理,来尽量减⼩对⽤户的影响。
总体来说,主要有如下⼏个解决⽅案:
1. 延迟请求。对于⾸次启动的所有接⼝,如果能延迟到⽤户点击“允许”之后再请求,或者重新请求⼀次,就能把对⽤户的影响降到最低,是⼀
个⽐较好的解决⽅案。因为⾸次启动往往有⼏屏引导页,⼀个⽐较好的时机是引导页结束时。此时⽤户已经进⾏了授权,数据都能正确得到。
所以我⾃⼰的做法是把请求推迟到了引导页。另外下⾯评论⾥饶志臻⼤神提了⼀个特别好的思路,就是⽤ AFN 监听⽹络状态,有⽹时开始请求。虽然没有试过(我⾃⼰⼿机不是国⾏,不太好实验),但感觉应该也能⽐较完美地处理这个问题。
2. 允许⽤户⼿动重新请求。出现数据空⽩时,如果在空⽩页⾯上有“重新加载”的按钮,也可以让⽤户
体验好⼀些。⽐较有趣的是,测试中发现
⽹易严选的处理是这样的:
⽹易严选的⾸屏界⾯
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论