App首次安装 - 授权网络访问的坑

本文介绍了在iOS10及以上系统中,首次安装App时可能遇到的网络权限授权弹框问题。当App进行网络请求时,会触发系统弹框,要求用户明确网络权限状态。在项目中,由于权限请求API的缺失,导致一些启动时的数据加载可能出现问题。为解决这个问题,文章提出了使用定时器进行网络检测,等待用户授权后再进行数据交互的方案,并在用户授权前通过自定义弹框引导用户解决网络问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#App首次安装 - 授权网络访问的坑

###参考链接:iOS 10 的坑:新机首次安装 app,请求网络权限“是否允许使用数据”

###1.这个弹框到底是个啥?
这里写图片描述

###2.怎么能够触发
1.首先,你得有一台国行版本的iPhone手机.
2.系统版本在iOS10以上
3.首次安装一个App时,App只要进行网络请求,网络交换.就会触发以上.
###3.是不是每次都会弹?卸载以后重装App呢?
只有在首次安装App并触发网络请求后,才会触发这个询问弹框.并且一定会让用户对该App明确一个网络权限状态(wifi/wifi+4g3g2g/notNetwork),否则这个弹框是不会消失的.

##项目中遇到的问题以及解决办法

###1.遇到的问题

  1. 项目的情况比较特殊,首先没有使用AFN,不过这也没什么关系.主要是项目App的一些数据加载和启动,必须在登陆前.一开始这些网络交换放在了didFinishLaunchingWithOptions里面.
    这会导致一个坑,就是此时Window还没有rootcontroller,所以就算触发了系统弹框有时候也不一定出现弹框,或者弹框会出现在关闭App之后.
  2. 第二个坑:由于苹果没有开方给我们对于网络权限请求的API.所以,我们也拿不到用户的点选结果,到底用户是允许了还是没允许.一般来说,只能通过不断去检测网络,来判断用户的授权情况.

###2.解决办法(怎么样优雅的避免尴尬)
敲黑板
首先,在真正的数据加载/网络交换之前.使用定时器去不断的去发起网络检测.只有等到用户授权了,再次检测到网络连通以后,才去真正的做数据交互.
如果检测到网络未连接(其中有坑,网络检测有AFN/Reachability,但问题是,在用户决定授权前,检测返回的结果也是无网络,不像相机/相册等权限的枚举,有个未决的状态),那么就让定时器继续不断发起网络检测.

那么问题来了:
用户不允许网络行为之后,AFN/Reachability返回的结果依然是无网络连接.

####解决办法:
这里,在定时器之前,先自定义一个弹框提示,此弹框必然弹出,该弹框的作用是提示用户,引导用户跳转设置去自行解决网络问题
再用户选择授权/拒绝授权后,检测网络连接情况,若已经连接,则进行数据交互且移除自定义的弹框,若用户决绝授权,则显示此弹框

注意,国行手机系统弹框必然会覆盖在所有弹框之上

- (void)checkNetwork{
   
    
    //网络状态预判断
    netWork = [[
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值