亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

實現檢測iOS14本地網絡權限的方法

發布時間:2020-11-03 16:43:25 來源:億速云 閱讀:609 作者:Leah 欄目:開發技術

實現檢測iOS14本地網絡權限的方法?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

什么是本地網絡?

這里的本地網絡其實就是我們常說的局域網,是將設備接入路由器以后形成的網絡,設備可以通過這張網絡互相通信,如我們的設備發現、設備綁定、局域網優先等功能都是使用的本地網絡。

從 iOS 13 開始,應用想要獲得當前連接到的 Wi-Fi 名稱,那就必須要獲得定位權限。因為通過識別 Wi-Fi 名稱, 應用就能輕松地在你和周圍的人之間建立大數據網絡。但是不給定位權限不代表應用就沒有辦法跟蹤你了,因為應用可以通過本地網絡里的設備進行跟蹤。

為什么需要向用戶申請權限?

和iOS 13獲取WiFi名稱需要通過定位權限類似,蘋果加強了對用戶隱私安全權限,這里也是類似的問題。在過去的 iOS 版本中,應用可以隨意掃描本地網絡中的設備,因此應用就可以很輕松地得到本地網絡里所有設備的名稱和 MAC 地址。MAC 地址是一種確認網絡設備位置的地址,每個網卡都有一個唯一的 MAC 地址,加上 MAC 地址也具有唯一性,設備廠商會按照一定的規律分配 MAC,所以不同的局域網都是獨一無二可以識別的。比方說,你從線下渠道買了個新相機,拍完照片利用相機自帶的 Wi-Fi 將照片導入到手機上。這時候帶有某個推廣模塊的應用對局域網發起了一次掃描,識別到了一個新的設備,推廣模塊會將相機的 MAC 地址上傳了云端,進行簡單的識別對比以后,很容易知道這個 MAC 地址屬于相機。這樣帶有推廣模塊的應用都會在畫像里給你加上「相機用戶」這樣的標簽,當你下次打開帶有同一個推廣模塊的購物應用時,你就會看到推薦了一堆和相機有關的東西。

那些應用需要使用本地網絡?

  • 利用本地網絡進行設備發現
  • 利用本地網絡進行數據傳輸
  • 網絡調試工具

影響范圍

主要影響無法使用Socket或者Bonjour做一些局域網的發現,數據傳輸。

對局域網應用如:智能家居類,局域網游戲,網絡測試工具等等。本人測試了下其實也沒有那么大,因為發現這個開關,App下次啟動后可能不會生效,暫時未定位原因。

怎么解決?

相信很多人都很奇怪為什么不整個權限申請或狀態查詢的接口,在翻了一些資料后發現,居然真的沒有。 鏈接:https://developer.apple.com/forums/tags/wwdc20-10110

很無奈!

大部分應用使用局域一般使用Socket或者Bonjour做一些局域的發現,數據傳輸。說在調用的時候會出現code:65 desc:no route to host。這是其實就是所謂的無本地網絡權限。但是我在測試時發現有時候即使是關掉本地網絡權限的開關,也能正常的使用UDP、TCP。簡直不敢信!難道iOS 14也會想iOS 13一開始出來一樣各種坑滿天飛?

這里的思路是

  • 通過接口獲取本機的IP地址
  • 使用(SimplePing)來ping手機的IP

整個流程的大概耗時在0.13-0.2秒之間,大部分在0.17秒左右。可能耗時還能接受。但是不知道某些路由器是否可以設置禁止ping。如果有那就炸裂了。 下面上簡單的代碼

- (void)viewDidLoad {
  [super viewDidLoad];
  // Do any additional setup after loading the view.
  NSDictionary *router = [LDSRouterInfo getRouterInfo];
  pinger = [[SimplePing alloc] initWithHostName:router[@"ip"]];
  pinger.delegate = self;
  [self->pinger start];
  
}
- (void)simplePing:(SimplePing *)pinger didStartWithAddress:(NSData *)address {
  if (timer) {
    return;
  }
  timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_main_queue());
  dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 2 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);
  dispatch_source_set_event_handler(timer, ^{
    [pinger sendPingWithData:nil];
  });
  dispatch_resume(timer);
}

- (void)simplePing:(SimplePing *)pinger didSendPacket:(NSData *)packet sequenceNumber:(uint16_t)sequenceNumber {
  NSLog(@"可以使用局域網");
}

- (void)simplePing:(SimplePing *)pinger didFailToSendPacket:(NSData *)packet sequenceNumber:(uint16_t)sequenceNumber error:(NSError *)error {
  if (error.code == 65) {//no route to host
    NSLog(@"不可以使用局域網");
  }
}

友情提示

  • 調上面接口可以觸發首次啟動本地網絡權限的系統彈窗
  • 不知道某些路由器是否可以設置禁止ping
  • 整理流程在iPhone 6sp耗時130-200毫秒之間。平均值在160毫秒左右
  • 關于實現檢測iOS14本地網絡權限的方法問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

探索| 博罗县| 桃源县| 石首市| 汝阳县| 长泰县| 普兰县| 加查县| 灵石县| 石首市| 崇明县| 宕昌县| 丰县| 和静县| 翁牛特旗| 油尖旺区| 延津县| 乐都县| 靖江市| 武鸣县| 靖边县| 延庆县| 嘉兴市| 鄂托克前旗| 海淀区| 观塘区| 宁明县| 平顶山市| 丰原市| 吉隆县| 上蔡县| 牡丹江市| 北票市| 尉犁县| 东安县| 杭州市| 金川县| 杭锦后旗| 武安市| 蓬莱市| 麻阳|