iOS10 优化APP首次安装网络权限提示方案
我刚经历了一场末日(停电),特别是在你想写文档的时候。。。
言归正传,今天的问题是解决iOS10系统下首次按钮APP弹出的网络权限提示所带来了问题以及优化。
起因
问题
解决
1.根据CTCellularData类获取网络权限状态以及监听状态改变回调(推荐)
- - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
- // Override point for customization after application launch.
- //1.获取网络权限 根绝权限进行人机交互
- if (__IPHONE_10_0) {
- [self networkStatus:application didFinishLaunchingWithOptions:launchOptions];
- }else {
- //2.2已经开启网络权限 监听网络状态
- [self addReachabilityManager:application didFinishLaunchingWithOptions:launchOptions];
- }
- //初始化window
- self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
- [self.window setBackgroundColor:[UIColor whiteColor]];
- // //创建UI
- [self createWindowRootWithType:2];
- [self.window makeKeyAndVisible];
- return YES;
- }
- /*
- CTCellularData在iOS9之前是私有类,权限设置是iOS10开始的,所以App Store审核没有问题
- 获取网络权限状态
- */
- - (void)networkStatus:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
- //2.根据权限执行相应的交互
- CTCellularData *cellularData = [[CTCellularData alloc] init];
- /*
- 此函数会在网络权限改变时再次调用
- */
- cellularData.cellularDataRestrictionDidUpdateNotifier = ^(CTCellularDataRestrictedState state) {
- switch (state) {
- case kCTCellularDataRestricted:
- NSLog(@"Restricted");
- //2.1权限关闭的情况下 再次请求网络数据会弹出设置网络提示
- [self getAppInfo];
- break;
- case kCTCellularDataNotRestricted:
- NSLog(@"NotRestricted");
- //2.2已经开启网络权限 监听网络状态
- [self addReachabilityManager:application didFinishLaunchingWithOptions:launchOptions];
- // [self getInfo_application:application didFinishLaunchingWithOptions:launchOptions];
- break;
- case kCTCellularDataRestrictedStateUnknown:
- NSLog(@"Unknown");
- //2.3未知情况 (还没有遇到推测是有网络但是连接不正常的情况下)
- [self getAppInfo];
- break;
- default:
- break;
- }
- };
- }
- /**
- 实时检查当前网络状态
- */
- - (void)addReachabilityManager:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
- AFNetworkReachabilityManager *afNetworkReachabilityManager = [AFNetworkReachabilityManager sharedManager];
- //这个可以放在需要侦听的页面
- // [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(afNetworkStatusChanged:) name:AFNetworkingReachabilityDidChangeNotification object:nil];
- [afNetworkReachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
- switch (status) {
- case AFNetworkReachabilityStatusNotReachable:{
- NSLog(@"网络不通:%@",@(status) );
- break;
- }
- case AFNetworkReachabilityStatusReachableViaWiFi:{
- NSLog(@"网络通过WIFI连接:%@",@(status));
- if (self.mallConfigModel == nil) {
- [self getInfo_application:application didFinishLaunchingWithOptions:launchOptions];
- }
- break;
- }
- case AFNetworkReachabilityStatusReachableViaWWAN:{
- NSLog(@"网络通过无线连接:%@",@(status) );
- if (self.mallConfigModel == nil) {
- [self getInfo_application:application didFinishLaunchingWithOptions:launchOptions];
- }
- break;
- }
- default:
- break;
- }
- }];
- [afNetworkReachabilityManager startMonitoring]; //开启网络监视器;
- }
- - (void)getInfo_application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
- //第三方库初始化
- [self initValueThirdParty:application didFinishLaunchingWithOptions:launchOptions];
- // //获取初始信息
- [self initData];
- //添加通知
- [self addNotification];
- }
这样也同时解决了用户如果选择不允许和限制两种情况,在用户没有统一联网的情况下,APP会显示没有网络的UI,重新进入APP会调用在不允许状态下会调用一个测试接口,APP会自动弹出重新选择网络权限以及说明的弹窗,进入设置修改过APP联网权限以后选择回到APP就会触发cellularDataRestrictionDidUpdateNotifier,在回调里进行相应的人机交互就可以了。
2.延迟请求
总结
iOS10 优化APP首次安装网络权限提示方案的更多相关文章
- iOS 10 的坑:新机首次安装 app,请求网络权限“是否允许使用数据”(转)
症状 iOS 10 之后,陆陆续续地有用户联系我们,说新机第一次安装.第一次启动的时候,app 首屏一片空白,完全没数据.kill 掉重新打开就好了. 一开始以为是用户网络情况不好,但随着越来越多的用 ...
- Jenkins无法安装插件或首次安装插件界面提示Offline
一.首先点击系统管理 二.点击插件管理 三.选择高级管理 四.将升级站点中的https改成http即可
- iOS10网络权限数据
参考地址:1.http://www.cocoachina.com/ios/20180723/24274.html https://blog.csdn.net/wang_bo_justone/art ...
- 检测 iOS 系统网络权限被关闭
背景 一直都有用户反馈无法正常联网的问题,经过定位,发现很大一部分用户是因为网络权限被系统关闭,经过资料搜集和排除发现根本原因是: 第一次打开 app 不能访问网络,无任何提示 第一次打开 app 直 ...
- IOS中如何判断APP是否安装后首次运行或升级后首次运行
对于是否为首次安装的App可以使用如下方法来判断 [[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"] ...
- 百度APP移动端网络深度优化实践分享(二):网络连接优化篇
本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<二>连接优化>,感谢原作者的无私分享. 一.前言 在<百度APP移动端网 ...
- 百度APP移动端网络深度优化实践分享(一):DNS优化篇
本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<一>DNS优化>,感谢原作者的无私分享. 一.前言 网络优化是客户端几大技术方 ...
- 百度APP移动端网络深度优化实践分享(三):移动端弱网优化篇
本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<三>弱网优化>,感谢原作者的无私分享. 一.前言 网络优化解决的核心问题有三个 ...
- app的安装与卸载测试点
安装 1)软件在不同操作系统(Palm OS.Symbian.Linux.Android.iOS.Black Berry OS .Windows Phone )下安装是否正常. 2)软件安装后的是否能 ...
随机推荐
- <Redis> 入门二 五种数据类型的操作、通用key的操作、发布订阅
文档参考:http://www.redis.net.cn/ string - > key value 简单的keyvalue,常规计数:例如微博数,粉丝数 set -> key v ...
- ceph集群
ceph集群部署 ceph理解: Ceph是一个分布式存储,可以提供对象存储.块存储和文件存储,其中对象存储和块存储可以很好地和各大云平台集成.其他具体介绍可见官网简介:http://docs.cep ...
- Buffer.isBuffer()详解
Buffer.isBuffer(obj) obj {Object} 返回:{Boolean} 如果 obj 是一个 Buffer 则返回 true.
- 【已解决】ERROR: bootstrap checks failed memory locking requested for elasticsearch process but memory is not locked
官网说明: elasticsearch官网建议生产环境需要设置bootstrap.memory_lock: true 官网的解释 是:发生系统swapping的时候ES节点的性能会非常差,也会影响节点 ...
- CC3200 TI 笔记
I2C I2C总线是由Philips公司开发的一种简单.双向二线制同步串行总线.它只需要两根线即可在连接于总线上的器件之间传送信息. I2S I2S(Inter-IC Sound)总线, 又称 集成电 ...
- Webdriver元素定位2(XPath)
XPath即为XML路径语言,它是一种用来确定XML文档中某部分位置的语言.XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力. 绝对路径定位 案例:在百度首页搜索框输入selenium ...
- hihoCode #1151 : 骨牌覆盖问题·二
#1151 : 骨牌覆盖问题·二 Time Limit:10000ms Case Time Limit:1000ms Memory Limit:256MB 描述 上一周我们研究了2xN的骨牌问题,这一 ...
- 前端开发:HTML
静态页面: 没有与用户进行交互,而仅仅是用户浏览的一个网页 动态网页:就是用户不仅仅可以浏览网页,还可以与服务器交互 Web前端应用场景:公司官网(在PC通过浏览器访问公司网站).移动端网页(在手机上 ...
- centos6.4下安装mysql
一.mysql简介 说到数据库,我们大多想到的是关系型数据库,比如mysql.oracle.sqlserver等等,这些数据库软件在windows上安装都非常的方便,在Linux上如果要安装数据库,咱 ...
- 2018/2/15 ES Beats的学习笔记
Beats其实是几种服务的统称(你也可以把收集到的数据存储到别的数据源,不一定非要ES),这几种服务分别是: 1.PacketBeat 通过抓包的方式来监控一些服务.如:HTTP,DNS,Redis, ...