iOS開發筆記之五十五——關於LocationManager那點事

定位服務CLLocationManager是很多APP常用的,之前有做過點評和美團App的定位邏輯梳理,總結了幾點隨手筆記。

1、CLLocationManager是蘋果GPS定位的系統方法,它的大致原理是依賴手機上安裝的GPS接收器,美國發射了多個繞地球運行的衛星,使用GPS接收器可以輕鬆找到自己的位置。然而,由於GPS信號對外界環境也有依賴,因此在室內或其他衛星無法穿透的地方(例如穿山隧道、地鐵等)可能不起作用,如果用戶坐在飛機上或者開啓飛行模式,都無法接收GPS信息。甚至在糟糕的天氣也會出現較高概率的- (void)locationManager:didFailWithError:回調。

2、在實際開發中,如果LocationManager回調提供的經緯度不能滿足你對位置信息的要求,往往還需要境經過調接口將經緯度轉化爲詳細的城市或位置等信息(如果你對位置信息要求不是很高,你也可以在App本地寫個類似地理圍欄的東西)。當然,我相信你不會直接把你的接口調用寫在- (void)locationManager:didUpdateToLocation:fromLocation:回調裏去的。

3、從蘋果的官方文檔中,我們應該能隱約嗅到CLLocationManager是一個比較“耗電”傢伙,所以如果你沒有location-updates的需求,建議你及時去做stopUpdatingLocation()操作。如果你有location-updates的需求,建議你按需設置desiredAccuracy和distanceFilter的值,當然精度越高,越耗電。也可以使用蘋果推薦的帶有時延的allowDeferredLocationUpdates方法。

4、如果你想要實時獲取用戶上報的經緯度,哪怕App已經被切到後臺或者被kill掉,請設置Xcode->Capabilites->Background Modes->勾選Location updates。當然,對於蘋果這種注重用戶隱私的公司,肯定不會輕易讓你去這麼

"隨意"獲取用戶的實時位置的,所以這一步第一次設置時會被蘋果嚴格審覈的。

5、CLLocationManager並不是獲取位置信息的唯一途徑,蘋果文檔也指出,wifi或者cell radios等,另外如果在國外wifi(ip定位)獲取的位置信息往往不是很準的。

6、定位信息的獲取往往會很慢,或者一直fail,所以與App的UI應該是異步操作。即使定位數據能夠順利拿到,請記住,它也並不一定可靠。



發佈了87 篇原創文章 · 獲贊 20 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章