最近公司客服一直反映iOS 好多用户安装完,服务项目显示不出来,没办法下单。一直认为是用户网不好,让他们刷新一下或者退出APP重新进。随着反馈的问题越来越多,我觉得肯定是有存在问题的,就思考怎么解决数据加载失败的显示,好引导用户操作。后来发现在iOS 10 系统首次安装时苹果会提示'允许xx使用数据'的提示。当手机点击允许时,会发现首页的数据访问不到,会出现空白界面.这个问题只有在国行的苹果手机并且在iOS10 以上的机型里会出现.
渊源:
查了相关文章知道由于大陆工信部出台的新规定指出,应用在未经用户允许的前提下,系统不能授予其使用联网的功能。Apple 在 iOS 10操作系统中加入了关于应用使用数据的授权弹窗提示,用户在 iOS 10 系统中第一次打开应用时,会被要求对于是否授予应用联网权限进行选择。
那么这个系统的新功能会为用户带来哪些问题呢?问题主要在于,用户点击“允许”之前,所有网络请求都是被禁止的。具体有两种表现:
1、少部分用户根本不显示弹框,所以网络请求一直被禁止。不幸的是,苹果这个功能可能出得太仓促,并没有给开发者提供相应的 API。所以,我们没办法检测到用户点击“允许”或“不允许”网络请求的回调,也没法检测到当前用户是否授权的状态。只能通过一些特殊处理,来尽量减小对用户的影响。针对这部分用户,只能通过客服引导。
解决办法:在「设置 - 蜂窝移动网络」内打开「无线局域网助理」开关,再进入无法联网的 App,会弹出提示框。解决之后,就可以关掉助理开关。
2、对于绝大部分用户,弹框会正确显示;然而从 app 启动到用户点击“允许”需要一段时间,在这段时间内发出的网络请求全都会直接失败,导致空白界面。
解决办法:
1)监听网络状态,在用户允许数据请求后,加载数据。因为该方法监听的网络状态,不能区分手机 是没有联网 or 用户没有允许联网权限,因此只给了用户提示,并没有引导用户跳转设置。若有好的解决方案,欢迎告知。
做法:采用AFN的Reachability
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
[manager startMonitoring];//开始监听
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
if (status == AFNetworkReachabilityStatusUnknown||status ==
AFNetworkReachabilityStatusNotReachable) {
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示"
message:@"您的网络好像不太给力,请检查 系统-设置 是否开启蜂窝数据或者无
线局域网" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定", nil];
[alert show];
}else if (status==AFNetworkReachabilityStatusReachableViaWWAN||status==AFNetworkReachabilityStatusReachableViaWiFi){
//请求数据
}
}];
2)允许用户手动重新请求。出现数据空白时,如果在空白页面上有“重新加载”的按钮,也可以让用户体验好一些。
3)在引导页结束后开始请求,此时用户已经同意开启数据访问权限,数据可以访问成功,也可以解决问题。
出现的问题:
我用的是监听网络状况,但是Block会调用两次,所以未联网提示会弹两次,没有查找出问题根源,暂时做一下记录。有了解的希望给我回复。
借鉴文章:http://www.jianshu.com/p/a2af8e3dcaa3
http://www.cocoachina.com/ios/20161206/18304.html