重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
iOS开发避免不开系统权限的问题,如何在APP中以更加友好的方式向用户展示系统权限,似乎也是开发过程中指的深思的一件事。
成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于网站设计、做网站、定州网络推广、微信小程序、定州网络营销、定州企业策划、定州品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联公司为所有大学生创业者提供定州建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com
那如何提高用户获取权限的通过率呢?以下几种方式或许是不错的尝试:
上面的只是一些尝试,与本文的主要讲述内容关系不大,接下来我们主要来看一下常用的一些系统权限的状态获取以及主动唤起权限请求的方法。
相机权限
相册权限
日历权限
麦克风权限
推送权限
定位权限
提醒事项权限
通讯录权限
互联网权限
蓝牙权限
引入头文件 #import AVFoundation/AVFoundation.h
引入头文件 #import Photos/Photos.h
引入头文件 #import EventKit/EventKit.h
引入头文件 #import AVFoundation/AVFoundation.h
引入头文件 #import UserNotifications/UserNotifications.h
引入头文件 #import CoreLocation/CoreLocation.h
封装方法调用
TenLocationManager.h
TenLocationManager.m
引入头文件 #import EventKit/EventKit.h
引入头文件
iOS 9.0前 #import AddressBook/AddressBook.h
iOS 9.0后 #import Contacts/Contacts.h
引入头文件 #import CoreTelephony/CTCellularData.h
系统未提供接口供开发者手动请求网络权限,iOS10以上系统,应用首次请求网络会自动弹出,一个应用只弹出一次,卸载也不会重新弹出
引入头文件 #import CoreBluetooth/CoreBluetooth.h
TenBluetoothManager.h
TenBluetoothManager.m
苹果浏览器开网络权限的方法:首先,请大家在自己的手机中找到【设置】图标,点击进入主界面。第二步,请大家翻动界面,然后点击选择目标软件。第三步,此时我们来到了的软件权限设置页面,其中有是否允许访问照片、相机、通讯录等选项。
第四步,我们需要选择屏幕中的【位置】按钮,然后点击【永不】选项,我们还能设置“使用应用期间”即可。第五步,此时请选择屏幕中的【允许通知】选项,进行相关设置。
Safari是一款由苹果开发的网页浏览器,是各类苹果设备(如Mac、iPhone、iPad、iPod Touch)的默认浏览器。Safari使用WebKit浏览器引擎。
Safari,作为苹果计算机的操作系统macOS中的浏览器,它用来取代之前的Internet Explorer for Mac。Safari以惊人速度渲染网页。与Mac及iPod touch、iPhone、iPad兼容。让最爱网站一目了然。聪明的它还会检查拼写和语法。
一开始以为是用户网络情况不好,但随着越来越多的用户报告这个问题,我意识到这并不是偶然情况。但是并非所有用户都如此。
而且卸载掉之后,如果再装,也不会出现这现象。问题只会出现在这台设备第一次安装、第一次启动的情况下。如果把手机抹掉、重置,问题还能重现。
在iOS 14系统中苹果新增加了本地网络的授权,本地网络(Local Network)是在当app使用Bonjour服务或者访问本地局域网时需要用户授权,如:
Network.framework(NWBrowser,NWListener.Service)
Foundation(NetService)
MultipeerConnectivity(蓝牙)
Dnssd(发现,发布和解析局域网或广域网上的网络服务)
Bonjour主要做本地通信和智能交互的。
通常我们是通过 NSNetService 和 NSNetServiceBrowser 来使用 Bonjour 的,前者用于建立与发布 service,后者用于监听查询网络上的 service。
在我们的项目中因为使用了第三方KTVCocoaHTTPServer,在查看其中源码发现这个库中使用了NSNetService:
因此在用户第一次启动项目是会弹出本地网络授权的提示。
验证环境:
iPad iOS 14
Xcode 11
通过把本地网路权限关闭去验证是否对项目有影响:
1、我们项目之所以会提示本地网络授权是因为KTVHTTPCache依赖于KTVCocoaHTTPServer,是因为KTVHTTPCache使用的音视频缓存方案:本地实现http service。
在iOS本地开启Local Server服务,然后使用播放控件请求本地Local Server服务,本地的服务再不断请求视频地址获取视频流,本地服务请求的过程中把视频缓存到本地,大体的思路是这样的。而实现loacl Service要基于Bonjour库,通过 Bonjour,一个应用程序 publish 一个网络服务 service,然后网络中的其他程序就能自动发现这个 service,从而可以向这个 service 查询其 ip 和 port,然后通过获得的 ip 和 port 建立 socket 链接进行通信。通常我们是通过 NSNetService 和 NSNetServiceBrowser 来使用 Bonjour 的,前者用于建立与发布 service,后者用于监听查询网络上的 service,因此在iOS14设备上边提示了本地网路授权。
2、为了验证关闭本地网络授权是否会对项目有所影响,先找到KTVHTTPCache库在项目中的缓存目录:tmp-KTVHTTPCache,最新安装的app并没有任何缓存,然后运行app,播放视频再次查看缓存目录下有了视频缓存,目前调研结果是关闭本地网络权限并不会对我们项目产生影响。
使用另外一种方案:
使用IOS原生API ,使用 AVAssetResourceLoader,在不改变 AVPlayer API 的情况下,对播放的音视频进行缓存。
这种方案只能是使用AVPlayer才可以,使用第三方播放器除非它也暴露出了类似于AVAssetResourceLoader这样的协议。
相关三方很多 VIMediaCache
这种方案测试不会提示本地网络授权管理
iOS14新增加本地网络权限 Privacy - Local Network Usage Description
如有本地网络使用场景需要在 info.plist 中增加 Bonjour services 字段(如投屏加入 _leboremote._tcp )
查看使用本地网络的三方库方法:在项目目录下使用 grep -r SimplePing . 命令即可
Apple官方无具体API查询Local Network权限,这里采用建立定时器对本地网络请求,如果请求不通则无Local Network权限。需要使用Ping库( )具体见下: