#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 = [[SDNetwork alloc] init];netWorkType = [netWork integerWithNetworkType];/**第一次网络状态返回, 弹出自定义提示 - (避免由于一直无法检测到网络而无交互导致用户误解)*第一次网络状态返回,or国行手机网络权限导致无网络/or用户飞行模式/or用户曾主动关闭网络*均弹出友好提示 - 引导用户尝试解决网络问题.*首次安装App,该弹出会被 国行手机权限询问弹框所遮挡,待用户决定App是否使用网络后,再去引导用户进行设置*/if (netWorkType == 0) {// 引导用户去系统设置[[SDAlertView shareAlert] showDialog:@"无网络连接" message:@"1.检查是否触发了飞行模式,关闭即可 \n\n2.检查是否关闭了网络权限,请授权杉德宝访问网络,操作方法(设置-蜂窝移动网络-杉德宝)" leftBtnString:@"退出杉德宝" rightBtnString:@"去设置" leftBlock:^{[Tool exitApplication:self];} rightBlock:^{[Tool openUrl:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];[Tool exitApplication:self];}];}//定时器timer = [NSTimer timerWithTimeInterval:1.f target:self selector:@selector(netWorkRequest) userInfo:nil repeats:YES];[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
}- (void)netWorkRequest{/**检测网络状态 - 无网络*继续执行定时器*/if (netWorkType == 0) {NSLog(@"检测到无网络/未决,继续检测");netWorkType = [netWork integerWithNetworkType];}/**检测网络状态 - 有网络*定时器停止*隐藏之前弹出的 @"无网络连接" 提示弹框*执行大Loading*/else{if (timer) {[timer invalidate];timer = nil;[[SDAlertView shareAlert] hideDialogAnimation:NO];NSLog(@"检测到有网络,执行大Loading");dispatch_async(dispatch_get_global_queue(DISPATCH_TARGET_QUEUE_DEFAULT, 0), ^{[self BigLoading];});}}}

App首次安装 - 授权网络访问的坑相关推荐

  1. 安装minikube网络访问问题解决

    安装minikube网络访问问题解决 国内运行 minikube start出现网络下载问题,使用国内的镜像仓库代理即可,需要注意将镜像代理设置为cn. minikube start --image- ...

  2. iOS10 优化APP首次安装网络权限提示方案

    我刚经历了一场末日(停电),特别是在你想写文档的时候... 言归正传,今天的问题是解决iOS10系统下首次按钮APP弹出的网络权限提示所带来了问题以及优化. 起因 查了相关文章知道由于大陆工信部出台的 ...

  3. nginx服务器远程无法访问,nginx首次安装远程无法访问

    因为是问题.花时间.所以进行记录一番 (一)安装环境:虚拟机centos7系统 对于nginx在linux下的安装卸载是装了又卸,卸了又装.远程访问就是访问不了,周五的时候能访问,到后面又不能访问了. ...

  4. CentOS首次安装,网络环境配置

    1.配置文件: vi /etc/sysconfig/network-scripts/ifcfg-eth0 2.内容修改: DEVICE=eth0 HWADDR=00:0C:29:54:83:C0 TY ...

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

    这个坑最近弄得我很抓狂,不过现在基本弄清楚了.记录一下过程中我收集到的信息,分享给大家. 症状 iOS 10 之后,陆陆续续地有用户联系我们,说新机第一次安装.第一次启动的时候,app 首屏一片空白, ...

  6. iOS 10 的坑:新机首次安装 app,请求网络权限“是否允许使用数据”_前进的火车_新浪博客...

    这个坑最近弄得我很抓狂,不过现在基本弄清楚了.记录一下过程中我收集到的信息,分享给大家. 症状 iOS 10 之后,陆陆续续地有用户联系我们,说新机第一次安装.第一次启动的时候,app 首屏一片空白, ...

  7. iOS 10 的坑:新机首次安装 app,请求网络权限“是否允许使用数据”(转)

    转载自: 文/戴仓薯(简书作者) 原文链接:http://www.jianshu.com/p/6cbde1b8b922 症状 iOS 10 之后,陆陆续续地有用户联系我们,说新机第一次安装.第一次启动 ...

  8. Android 11.0 系统默认授予app安装权限(去掉app首次运行时权限授权弹窗)

    目录 1.概述 2.系统默认授予app安装权限去掉app首次运行时权限授权弹窗功能分析

  9. android获取app用户数据,Android 原生app获取用户授权访问Autodesk云应用数据

    oAuth机制对于网站间的授权管理是很容易实现的,设置好app回调端口,当数据服务提供方拿到其用户授权,则返回授权码发送到回调端口.上一篇文章介绍了如何授权Forge app访问Autodesk 云应 ...

  10. 技巧分享:我的VM黑群晖安装及独特网络访问方案

    首发:https://post.smzdm.com/p/a0780qv0/ 前言 本来手上有一台旧笔记本(Lenovo U41-70),是16年初上学时候买的,配置一般(4G+i5-5200u+HD5 ...

最新文章

  1. containers文件夹可以删除吗_iOS14描述文件可以删除吗?iPhone删除iOS14描述文件方法...
  2. html5离线保存需要联网吗,html5 离线存储
  3. 快速对比UART、SPI、I2C通信的区别与应用
  4. 【并查集】【图论】【最小生成树】剑鱼行动(ssl 1618)
  5. 使用未初始化的内存是什么意思_他们都说JVM能实际使用的内存比-Xmx指定的少?这是为什么呢...
  6. 更改sql-2008sa密码
  7. Dapper的语法应用
  8. 快递送不上门,谁的锅?
  9. python打印国际象棋规则口诀_python输出国际象棋棋盘的实例分享
  10. oracle 表空间 归档,oracle数据库表空间及归档
  11. 基于quartz的云调度中心实现
  12. php搜索区分大小写,在php中搜索不区分大小写的xpath
  13. vue 怎么修改 confirm 的文字样式和颜色
  14. python之常用内置函数(zip和sum)
  15. 计算机笔记本怎么保存文件,怎么将电脑上的文件保存在QQ邮箱?
  16. python符号积分
  17. DevOps工具链介绍
  18. 《Uncertainty-aware Joint Salient Object and Camouflaged Object Detection》—CVPR2021—SOD+COD
  19. 有赞微商城打通对接知乎教程
  20. 67.输入若干行文本,每行以回车结束,以 ctrl+z 作为结束符,统计其行数

热门文章

  1. LDA中文文本挖掘代码分享
  2. MAC python版本选择实现版本切换
  3. c语言计算器程序代码有优先级,C语言计算器小程序(源代码+实习报告).doc
  4. c语言汉诺塔问题详解
  5. 语音聊天室 anyHouse 使用手册
  6. 计算机教育部 学科分类,教育部学科分类与代码分类查询
  7. java模拟时钟课程设计_Java课程设计时钟图形模拟
  8. java零基础自学首选黑马程序员Java入门教程笔记01
  9. ubuntu安装ulipad
  10. Extjs图书管理系统源码 智能化图书管理系统源码