簡體   English   中英

iOS 13 如何檢查用戶只給定始終允許位置權限

[英]iOS 13 How to check user is given only Always allow location permission

在我的應用程序中,我想檢查用戶是否被授予“始終允許”的位置權限。 因為我在進行位置共享,就像 WhatsApp 位置實時共享一樣。

實際上測試用例是,當我們在應用程序設置中將位置權限狀態更改為“使用應用程序時”並檢查應用程序內按鈕單擊的狀態時,我得到“始終授權”值。

  func isAlwaysPermissionGranted() -> Bool{
    let aStatus = CLLocationManager.authorizationStatus()
    if aStatus == .authorizedAlways {
        return true
    }
     return false
  }

如果我們有“使用應用程序時”權限,我無法區分“使用應用程序時”和“始終”。 兩者都具有相同的枚舉值,即“authorizedAlways”。

但在 WhatsApp 中,如果我將位置權限更改為“使用應用程序時”並嘗試分享我的實時位置,WhatsApp 會在應用程序設置中顯示一個更改位置權限的警報。

我想做同樣的事情。

請幫助我在代碼級別上有所不同。

您可以像這樣在didChangeAuthorization委托方法中檢查它。

switch CLLocationManager.authorizationStatus() {
        case .notDetermined:
            //Ask for permission
            break
        case .restricted:
            // user retricted to use location service.(Ex: parental control)
            break
        case .denied:
            //user denied location service
            break
        case .authorizedAlways:
            //always allow
            break
        case .authorizedWhenInUse:
            // when in use
            break
        @unknown default:
            break
        }

您必須通過CLLocationManager.requestAlwaysAuthorization() ( doc ) 明確請求並按照Apple 文檔在委托回調中的說明進行監聽

重要的

使用authorizationStatus() 是不必要且不鼓勵的。 相反,實現 locationManager(_:didChangeAuthorization:) 委托回調來接收最新的授權狀態。

Listen in delegate 將讓您隨時了解授權狀態的任何運行時更改並進行相應處理。

實際上,我從代碼中刪除了CLLocationManager.requestAlwaysAuthorization()

如果您請求 Always Authorization,則 CLLocationManager.authorizationStatus 將變為 authorizedAlways。

我讓它就像如果應用程序想要始終訪問,用戶必須 go 進行設置並手動授予始終權限

暫無
暫無

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

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