![](/img/trans.png)
[英]How to get the user's current city name without using the core location service?
[英]How to get user's current location without asking for permission?
誰能告訴我如何在不征得用戶許可的情況下獲取用戶的當前位置緯度/經度信息? 喜歡自動獲取用戶的位置? 提前致謝。 什雷亞
來自蘋果的文檔
重要提示:除了不可用的硬件外,用戶還可以選擇拒絕應用程序訪問位置服務數據。 在應用程序的初始使用期間,Core Location 框架會提示用戶確認使用位置服務是可以接受的。 如果用戶拒絕該請求,則 CLLocationManager 對象在以后的請求中向其委托報告一個適當的錯誤。 您還可以使用 authorizationStatus 方法檢查應用程序的顯式授權狀態。
所以蘋果不允許未經用戶許可使用 CoreLocation 框架。 如果不使用 CoreLocation 框架,我認為沒有其他方法,至少使用公共 API..
我不建議嘗試繞過 Apple 的 TOS 關於獲得用戶為應用啟用 CoreLocation 的許可。 這似乎是讓您的應用被拒絕的可靠方法。 蘋果可能對這類東西很敏感。
我設法使用以下方法在不要求位置權限的情況下到達該國家:
import MapKit
class CountryDectectorViewController: UIViewController {
var didDetectCountryCode: ((String?) -> Void)?
override func viewDidLoad() {
super.viewDidLoad()
// Map view setup
let mapView = MKMapView()
view.addSubview(mapView)
mapView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
mapView.topAnchor.constraint(equalTo: view.topAnchor),
mapView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
mapView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
mapView.trailingAnchor.constraint(equalTo: view.trailingAnchor)
])
mapView.layoutIfNeeded()
// Reverse geocoding map region center
let location = CLLocation(
latitude: mapView.region.center.latitude,
longitude: mapView.region.center.longitude
)
CLGeocoder().reverseGeocodeLocation(location) { placemarks, _ in
self.didDetectCountryCode?(placemarks?.first?.isoCountryCode)
}
}
}
然后可以使用以下方法獲得 ISO 國家代碼:
let controller = CountryDectectorViewController()
controller.didDetectCountryCode = { countryCode in
print(countryCode)
}
controller.loadViewIfNeeded()
一些上下文
我意識到 UIKit 已經有了這些信息,因為每次顯示MKMapView
時,該區域都會自動設置為適合當前用戶的國家/地區。 使用這個假設,我需要找到一個解決方案來加載地圖而不顯示它,然后對中心坐標進行反向地理編碼以識別國家。
考慮到我發現的以下限制,我實施了這個解決方案:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.