簡體   English   中英

如何在不請求許可的情況下獲取用戶的當前位置?

[英]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時,該區域都會自動設置為適合當前用戶的國家/地區。 使用這個假設,我需要找到一個解決方案來加載地圖而不顯示它,然后對中心坐標進行反向地理編碼以識別國家。

考慮到我發現的以下限制,我實施了這個解決方案:

  • 理想情況下不要要求用戶權限
  • 設備區域設置不被視為可靠的替代方案
  • 檢測 sim 運營商實際上返回原始運營商國家,而不是當前連接的運營商(通過漫游)
  • 使用最近變得越來越流行的 VPN 可以輕松地通過 IP 檢索國家/地區

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM