美文网首页
iOS 网络授权检测组件(适配iOS16以上)

iOS 网络授权检测组件(适配iOS16以上)

作者: lanlinxl | 来源:发表于2022-12-14 17:54 被阅读0次

目录

1.需求背景
2.需要解决的问题
3.核心代码部分
4.使用示例
5.组件地址

1. 需求背景

  • 随着iOS16.0更新,现在app首次安装启动,第一件事就是提示网络授权,但是很多用户会不小心点击到仅限无限局域网/不允许(有很多用户并不像互联网工作者对APP很熟悉,可能都不知道发生了什么),近期也是有很多用户反馈手机有网络但是无法登录问题,针对这方面问题本文将详细讲解如何解决
  • 组件Swift和OC版本都有,本文使用swift作为示例:
Snipaste_2022-12-15_17-37-43.png

2. 需要解决的问题

  1. 点击不允许,会返回未授权状态,引导用户去设置
  2. 点击仅无线局域网,设备如果是wifi状态能正常使用,切换到蜂窝状态则提示未授权
  3. 能判断网络不可用是设备无网/飞行模式还是因为未授权网路
  4. 能实时监控授权状态变化
  5. 进入前后台检测授权状态
  6. 提示框设置引导

3. 核心代码部分

  • 主要设计思路使用一个单例类去实现,并对外有如下方法:
Snipaste_2022-12-15_17-53-18.png
Snipaste_2022-12-15_17-52-58.png
  • 下面看看start方法里面做了什么
Snipaste_2022-12-15_17-52-19.png

从上图可以看出,除了一些基本配置,主要调用了两个方法startReachabilityNotifier,startCellularDataNotifier,主要是对网络切换、授权切换的监听

  • 我们看看startReachabilityNotifier方法做了什么:
Snipaste_2022-12-15_17-51-10.png

主要也是用户网络出现动态切换的时候,会有一个回调,然后接着调用startCheck方法

  • 再看看startCellularDataNotifier方法:
Snipaste_2022-12-15_17-50-22.png

CTCellularData对象监听用户授权的状态,也会调用startCheck方法

  • 看看startCheck方法主要做了啥
Snipaste_2022-12-15_17-48-47.png

如上图主要有3个方法:

  • 先判断用户当前网络是否可用:
  • currentReachable() 方法实现: Snipaste_2022-12-15_17-44-03.png
  • 当授权状态为restricted时,表示当前网络已经不可用了,但是不能判断时飞行模式真的没网还是因为用户没授权导致的,所以需要使用下面两个方法结合判断:
  • isUseWifiConnect()方法实现:能获取到wifi地址 表示当前在wifi状态 Snipaste_2022-12-15_17-43-23.png
  • isUseWWANConnect()方法实现: Snipaste_2022-12-15_17-44-49.png
  • 进入前台和和退到后台也会再次检测当前的授权情况和网络情况:
Snipaste_2022-12-15_17-42-20.png
  • 当检测到未授权时,弹出提示框让用户去设置:

我这里自定义了一个弹框,需要注意的是我没有使用rootViewController去present出来,因为APP启动就会present一个协议弹框或者其他弹框,这时候后面需要展示的授权弹框present不出来了,直接将view加在window上应该更好

Snipaste_2022-12-15_17-41-21.png

4. 使用示例

  • 外部调用:
Snipaste_2022-12-15_17-40-27.png
  • Demo测试效果:
86d5e41e6ae9783b4f695aea9054bbc7.gif

5. 组件地址

我在github上传了两种语言的组件,已集成cocopods ,可以直接通过pod导入项目中:

Swift版本:
LLNetworkAccessibility-Swift

OC版本:
LLNetworkAccessibility-OC

相关文章

  • WidgetKit&ActivityKit

    1、概念 1.1 在主屏幕、通知中心、锁屏界面(iOS16)显示的小组件1.2 小组件的样式大小是固定的,iOS下...

  • iOS16适配

    开启开发者模式 iOS升级后手机默认是未打开开发者模式的,这时候会出现如下问题: Xcode 14连接真机时,发现...

  • iOS16适配

    Q1: A:iOS16中,将无法再通过_statusBarWindow获取到状态栏window,注释或切换其他方式...

  • ios 检测app是否授权网络

    当我们第一次下载一个全新app的时候,打开app会提示一些授权弹窗,最主要的就是网络,有的用户点击不允许使用网络,...

  • 检测 iOS 系统网络权限被关闭

    检测 iOS 系统网络权限被关闭 检测 iOS 系统网络权限被关闭

  • iOS16适配:APP切换横竖屏问题

    iOS16之前切换横竖屏使用的是UIDevice的setValue:forKey:方法进行切换。但在iOS16后不...

  • iOS 授权检测

    1.[iOS]开发检测是否开启定位:需要导入: 代码如下: 2.[ios]开发检测是否允许消息推送:需要导入: 代...

  • iOS16 beta8 描述文件官方地址下载

    iOS16 Beta8 开发者测试版 iOS16 Beta8版 描述文件下载[https://download.d...

  • iOS下的实际网络连接状态检测

    iOS下的实际网络连接状态检测 iOS下的实际网络连接状态检测

  • iOS 16锁屏小组件怎么能动起来?

    iOS16系统出来后,迫切的升级了!体验了下新的锁屏小组件,还下载了些做组件的APP,相对于14上的屏幕组...

网友评论

      本文标题:iOS 网络授权检测组件(适配iOS16以上)

      本文链接:https://www.haomeiwen.com/subject/zdrlqdtx.html