十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
在iOS 14系統(tǒng)中蘋果新增加了本地網(wǎng)絡(luò)的授權(quán),本地網(wǎng)絡(luò)(Local Network)是在當(dāng)app使用Bonjour服務(wù)或者訪問本地局域網(wǎng)時(shí)需要用戶授權(quán),如:
公司主營(yíng)業(yè)務(wù):成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出婁星免費(fèi)做網(wǎng)站回饋大家。
Network.framework(NWBrowser,NWListener.Service)
Foundation(NetService)
MultipeerConnectivity(藍(lán)牙)
Dnssd(發(fā)現(xiàn),發(fā)布和解析局域網(wǎng)或廣域網(wǎng)上的網(wǎng)絡(luò)服務(wù))
Bonjour主要做本地通信和智能交互的。
通常我們是通過 NSNetService 和 NSNetServiceBrowser 來使用 Bonjour 的,前者用于建立與發(fā)布 service,后者用于監(jiān)聽查詢網(wǎng)絡(luò)上的 service。
在我們的項(xiàng)目中因?yàn)槭褂昧说谌終TVCocoaHTTPServer,在查看其中源碼發(fā)現(xiàn)這個(gè)庫中使用了NSNetService:
因此在用戶第一次啟動(dòng)項(xiàng)目是會(huì)彈出本地網(wǎng)絡(luò)授權(quán)的提示。
驗(yàn)證環(huán)境:
iPad iOS 14
Xcode 11
通過把本地網(wǎng)路權(quán)限關(guān)閉去驗(yàn)證是否對(duì)項(xiàng)目有影響:
1、我們項(xiàng)目之所以會(huì)提示本地網(wǎng)絡(luò)授權(quán)是因?yàn)镵TVHTTPCache依賴于KTVCocoaHTTPServer,是因?yàn)镵TVHTTPCache使用的音視頻緩存方案:本地實(shí)現(xiàn)http service。
在iOS本地開啟Local Server服務(wù),然后使用播放控件請(qǐng)求本地Local Server服務(wù),本地的服務(wù)再不斷請(qǐng)求視頻地址獲取視頻流,本地服務(wù)請(qǐng)求的過程中把視頻緩存到本地,大體的思路是這樣的。而實(shí)現(xiàn)loacl Service要基于Bonjour庫,通過 Bonjour,一個(gè)應(yīng)用程序 publish 一個(gè)網(wǎng)絡(luò)服務(wù) service,然后網(wǎng)絡(luò)中的其他程序就能自動(dòng)發(fā)現(xiàn)這個(gè) service,從而可以向這個(gè) service 查詢其 ip 和 port,然后通過獲得的 ip 和 port 建立 socket 鏈接進(jìn)行通信。通常我們是通過 NSNetService 和 NSNetServiceBrowser 來使用 Bonjour 的,前者用于建立與發(fā)布 service,后者用于監(jiān)聽查詢網(wǎng)絡(luò)上的 service,因此在iOS14設(shè)備上邊提示了本地網(wǎng)路授權(quán)。
2、為了驗(yàn)證關(guān)閉本地網(wǎng)絡(luò)授權(quán)是否會(huì)對(duì)項(xiàng)目有所影響,先找到KTVHTTPCache庫在項(xiàng)目中的緩存目錄:tmp-KTVHTTPCache,最新安裝的app并沒有任何緩存,然后運(yùn)行app,播放視頻再次查看緩存目錄下有了視頻緩存,目前調(diào)研結(jié)果是關(guān)閉本地網(wǎng)絡(luò)權(quán)限并不會(huì)對(duì)我們項(xiàng)目產(chǎn)生影響。
使用另外一種方案:
使用IOS原生API ,使用 AVAssetResourceLoader,在不改變 AVPlayer API 的情況下,對(duì)播放的音視頻進(jìn)行緩存。
這種方案只能是使用AVPlayer才可以,使用第三方播放器除非它也暴露出了類似于AVAssetResourceLoader這樣的協(xié)議。
相關(guān)三方很多 VIMediaCache
這種方案測(cè)試不會(huì)提示本地網(wǎng)絡(luò)授權(quán)管理
We noticed that your app requests the user’s consent to access the local network information, but doesn’t sufficiently explain the use of the local network information in the purpose string.
? iOS14 當(dāng) App 要使用 Bonjour 服務(wù)時(shí)或者訪問本地局域網(wǎng),使用 mDNS 服務(wù)等,都需要授權(quán),開發(fā)者需要在 Info.plist 中詳細(xì)描述使用的為哪種服務(wù)以及用途.
? 如果應(yīng)用中需要使用 LocalNetwork 需要在 Info.plist 中配置 Privacy - Local Network Usage Description
蘋果官方文檔說明
解決辦法:
1.Privacy - Local Network Usage Description : "xx"不會(huì)連接到您所用網(wǎng)絡(luò)上的設(shè)備,只會(huì)檢測(cè)與您本地網(wǎng)關(guān)的連通性.用戶也可以在 iOS 設(shè)備的設(shè)置-隱私-本地網(wǎng)絡(luò)界面修改 app 的權(quán)限設(shè)置。
2.更新相關(guān)用到此隱私的SDK,一般SDK都已經(jīng)更新關(guān)閉了此權(quán)限
開啟蘋果AppStore訪問網(wǎng)絡(luò)的權(quán)限:
1、在手機(jī)桌面找到”設(shè)置“選項(xiàng),點(diǎn)擊進(jìn)入設(shè)置。
2、在設(shè)置界面找到”蜂窩移動(dòng)網(wǎng)絡(luò)“選項(xiàng),點(diǎn)擊進(jìn)入。
3、在蜂窩移動(dòng)網(wǎng)絡(luò)設(shè)置界面下方選擇一款軟件,并點(diǎn)擊。
4、在跳轉(zhuǎn)的頁面即可對(duì)此軟件設(shè)置訪問網(wǎng)絡(luò)權(quán)限。
iOS開發(fā)避免不開系統(tǒng)權(quán)限的問題,如何在APP中以更加友好的方式向用戶展示系統(tǒng)權(quán)限,似乎也是開發(fā)過程中指的深思的一件事。
那如何提高用戶獲取權(quán)限的通過率呢?以下幾種方式或許是不錯(cuò)的嘗試:
上面的只是一些嘗試,與本文的主要講述內(nèi)容關(guān)系不大,接下來我們主要來看一下常用的一些系統(tǒng)權(quán)限的狀態(tài)獲取以及主動(dòng)喚起權(quán)限請(qǐng)求的方法。
相機(jī)權(quán)限
相冊(cè)權(quán)限
日歷權(quán)限
麥克風(fēng)權(quán)限
推送權(quán)限
定位權(quán)限
提醒事項(xiàng)權(quán)限
通訊錄權(quán)限
互聯(lián)網(wǎng)權(quán)限
藍(lán)牙權(quán)限
引入頭文件 #import AVFoundation/AVFoundation.h
引入頭文件 #import Photos/Photos.h
引入頭文件 #import EventKit/EventKit.h
引入頭文件 #import AVFoundation/AVFoundation.h
引入頭文件 #import UserNotifications/UserNotifications.h
引入頭文件 #import CoreLocation/CoreLocation.h
封裝方法調(diào)用
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
系統(tǒng)未提供接口供開發(fā)者手動(dòng)請(qǐng)求網(wǎng)絡(luò)權(quán)限,iOS10以上系統(tǒng),應(yīng)用首次請(qǐng)求網(wǎng)絡(luò)會(huì)自動(dòng)彈出,一個(gè)應(yīng)用只彈出一次,卸載也不會(huì)重新彈出
引入頭文件 #import CoreBluetooth/CoreBluetooth.h
TenBluetoothManager.h
TenBluetoothManager.m