iOS 14 以上系統(tǒng)導(dǎo)致WiFi名稱(chēng)獲取不到的情況

1. 問(wèn)題

在 iOS14 中如果不允許精確定位,那么就獲取不到WiFi的名稱(chēng)了屹逛。

我的項(xiàng)目中獲取WiFi名稱(chēng)的方式:

+ (NSString *)wifiName {
    NSArray *interfaces = CFBridgingRelease(CNCopySupportedInterfaces());
    id info = nil;
    for (NSString *interfaceName in interfaces) {
        info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((CFStringRef)interfaceName);
        if (info) {
            break;
        }
    }
    NSDictionary *infoDic = (NSDictionary *)info;
    NSString *ssid = [infoDic objectForKey:@"SSID"]; // WiFi的名稱(chēng)
    NSString *bssid = [infoDic objectForKey:@"BSSID"]; // WiFi的mac地址
    NSLog(@"WiFi SSID = %@, MAC = %@", ssid, bssid);
    return ssid;
}

2. 解決

不允許精確定位就獲取不到WiFi名稱(chēng)疾渣,那么只有在獲取WiFi名稱(chēng)的時(shí)候向用戶(hù)申請(qǐng)臨時(shí)開(kāi)啟一次精確位置權(quán)限了拴魄。
???????? Demo地址:LocationDemo

2.1 申請(qǐng)權(quán)限需要調(diào)用- (void)requestTemporaryFullAccuracyAuthorizationWithPurposeKey:(NSString *)purposeKey 方法冗茸。

??:該方法起作用的前提是用戶(hù)已經(jīng)允許了定位席镀,即授權(quán)狀態(tài)不是 kCLAuthorizationStatusNotDeterminedkCLAuthorizationStatusRestrictedkCLAuthorizationStatusDenied

2.2 在申請(qǐng)臨時(shí)開(kāi)啟一次精確位置權(quán)限前夏漱,需要在Info.plist中進(jìn)行配置豪诲。

2.2.1 Info.plist 中的配置
  • 添加項(xiàng)目:NSLocationTemporaryUsageDescriptionDictionary,即: Privacy - Location Temporary Usage Description Dictionary麻蹋;
    在以上項(xiàng)目中添加鍵值對(duì):PurposeKey : 說(shuō)明描述跛溉,針對(duì)不同的使用場(chǎng)景焊切,可以添加多個(gè)鍵值對(duì)扮授。例如:
WantsToGetWiFiSSID : Your precise location will be used to get the current Wi-Fi SSID.
WantsToNavigate    : Your precise location will be used to calculate a route and allow you to use turn-by-turn directions.
2148150-600b44771094cb1f.png
2.2.2 說(shuō)明描述的國(guó)際化
  • 需要在InfoPlist.strings中添加PurposeKey對(duì)應(yīng)的國(guó)際化內(nèi)容,例如:
WantsToGetWiFiSSID = "Your precise location will be used to get the current Wi-Fi SSID.";
  • 如果未提供國(guó)際化內(nèi)容专肪,則使用Info.plist中的說(shuō)明描述刹勃;

2.3 代碼實(shí)現(xiàn)

1?? 申請(qǐng)臨時(shí)開(kāi)啟一次精確位置權(quán)限:
if (@available(iOS 14.0, *)) {
    BOOL isFullAccuracy = self.locationManager.accuracyAuthorization == CLAccuracyAuthorizationFullAccuracy;
    if (!isFullAccuracy) {
        // 向用戶(hù)申請(qǐng)臨時(shí)開(kāi)啟一次精確位置權(quán)限
        [self.locationManager requestTemporaryFullAccuracyAuthorizationWithPurposeKey:@"WantsToGetWiFiSSID"];
    }
}
2?? 在授權(quán)狀態(tài)改變的代理方法中再次獲取WiFi名稱(chēng),更新WiFi名稱(chēng)的顯示:
- (void)locationManagerDidChangeAuthorization:(CLLocationManager *)manager API_AVAILABLE(ios(14.0)) {
    // 1. 定位權(quán)限狀態(tài)
    CLAuthorizationStatus status = manager.authorizationStatus;
    
    // 2. 精確定位權(quán)限狀態(tài)
    CLAccuracyAuthorization accuracyStatus = manager.accuracyAuthorization;
    if (accuracyStatus == CLAccuracyAuthorizationFullAccuracy) {
        NSLog(@"精確定位已開(kāi)啟");
    } else {
        NSLog(@"精確定位未開(kāi)啟");
    }
    
    NSString *wifiName = [ViewController wifiName];
    self.nameLabel.text = [NSString stringWithFormat:@"WiFi名稱(chēng): %@", wifiName];
}

2.4 臨時(shí)獲取的精確位置權(quán)限說(shuō)明

2.4.1 權(quán)限會(huì)自動(dòng)過(guò)期嚎尤,當(dāng)用戶(hù)在使用App時(shí)(如App在前臺(tái))不會(huì)過(guò)期荔仁。
我的測(cè)試情況:

  • 前臺(tái) --> 后臺(tái)(大概10s內(nèi)) --> 前臺(tái),不會(huì)過(guò)期芽死;
  • 前臺(tái) --> 后臺(tái)(超過(guò)大概10s) --> 前臺(tái)乏梁,過(guò)期;

2.4.2 App開(kāi)啟了持續(xù)的后臺(tái)定位关贵,不會(huì)過(guò)期遇骑。

  • ??? 添加后臺(tái)定位的配置
    在Xcode的 Capability 中配置 Background ModesLocation updates

With UIBackgroundModes set to include "location" in Info.plist, you must also set this property to YES at runtime whenever calling -startUpdatingLocation with the intent to continue in the background.

  • ??? 允許后臺(tái)定位:self.locationManager.allowsBackgroundLocationUpdates = YES;

重要提示:Setting this property to YES when UIBackgroundModes does not include "location" is a fatal error.即:允許后臺(tái)定位的前提是在Capability 中配置了 Background ModesLocation updates揖曾,否則會(huì)產(chǎn)生致命錯(cuò)誤落萎。
如果已在Capability中配置好了,但未允許后臺(tái)定位炭剪,則不會(huì)在后臺(tái)進(jìn)行定位练链,也不會(huì)產(chǎn)生錯(cuò)誤。

3. iOS14 CLLocationManager 類(lèi)中棄用的方法

  • 類(lèi)方法[CLLocationManager authorizationStatus]已棄用奴拦,需調(diào)用實(shí)例屬性: self.locationManager.authorizationStatus
  • 授權(quán)狀態(tài)改變的代理方法的棄用:locationManager:didChangeAuthorizationStatus: --> locationManagerDidChangeAuthorization:
/*
 *  locationManager:didChangeAuthorizationStatus:
 *
 *  Discussion:
 *    Invoked when the authorization status changes for this application.
 */
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status API_DEPRECATED_WITH_REPLACEMENT("-locationManagerDidChangeAuthorization:", ios(4.2, 14.0), macos(10.7, 11.0), watchos(1.0, 7.0), tvos(9.0, 14.0));

/*
 *  locationManagerDidChangeAuthorization:
 *
 *  Discussion:
 *    Invoked when either the authorizationStatus or
 *    accuracyAuthorization properties change
 */
- (void)locationManagerDidChangeAuthorization:(CLLocationManager *)manager API_AVAILABLE(ios(14.0), macos(11.0), watchos(7.0), tvos(14.0));

4. 定位權(quán)限說(shuō)明

高德開(kāi)放平臺(tái)的文檔定位權(quán)限說(shuō)明 中詳細(xì)描述了 iOS 8.0 - iOS 14.0 前臺(tái)定位與后臺(tái)定位的配置情況媒鼓。

參考鏈接,非喜勿噴错妖,歡迎點(diǎn)贊留言~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末隶糕,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子站玄,更是在濱河造成了極大的恐慌枚驻,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件株旷,死亡現(xiàn)場(chǎng)離奇詭異再登,居然都是意外死亡尔邓,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)锉矢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)梯嗽,“玉大人,你說(shuō)我怎么就攤上這事沽损〉平冢” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵绵估,是天一觀(guān)的道長(zhǎng)炎疆。 經(jīng)常有香客問(wèn)我,道長(zhǎng)国裳,這世上最難降的妖魔是什么形入? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮缝左,結(jié)果婚禮上亿遂,老公的妹妹穿的比我還像新娘。我一直安慰自己渺杉,他們只是感情好蛇数,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著是越,像睡著了一般耳舅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上英妓,一...
    開(kāi)封第一講書(shū)人閱讀 49,185評(píng)論 1 284
  • 那天挽放,我揣著相機(jī)與錄音,去河邊找鬼蔓纠。 笑死辑畦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的腿倚。 我是一名探鬼主播纯出,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼敷燎!你這毒婦竟也來(lái)了暂筝?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤硬贯,失蹤者是張志新(化名)和其女友劉穎焕襟,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體饭豹,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鸵赖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年务漩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片它褪。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡饵骨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出茫打,到底是詐尸還是另有隱情居触,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布老赤,位于F島的核電站轮洋,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏诗越。R本人自食惡果不足惜砖瞧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一息堂、第九天 我趴在偏房一處隱蔽的房頂上張望嚷狞。 院中可真熱鬧,春花似錦荣堰、人聲如沸床未。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)薇搁。三九已至,卻和暖如春渡八,著一層夾襖步出監(jiān)牢的瞬間啃洋,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工屎鳍, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宏娄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓逮壁,卻偏偏與公主長(zhǎng)得像孵坚,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子窥淆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容