iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 21
0
自我挑戰組

IOS app開發介紹系列 第 21

IOS app開發介紹 - location service

  • 分享至 

  • xImage
  •  

IOS app中如果需要定位服務,我們需要用到Core Location這個framework裡面的CLLocationManager,以下我們分為幾項來看

1. 向系統要求定位權限

2. 獲取目前的地址與經緯度

3. 給予地址轉換經緯度與郵遞區號


1. 向系統要求定位權限

IOS要求定位權限分成兩種:
a) requestWhenInUseAuthorization - 使用App期間才需要定位權限
b) requestAlwaysAuthorization - 永遠允許App有定位權限
例如我們以Google map為例,在系統設定中,我們點選Google Maps這個app,可以看到位置這個項目,再點進去我們可以看到如下的畫面:
https://ithelp.ithome.com.tw/upload/images/20181105/20111592L2Pi7Gc3gY.png

我們需要先在info.plist中去宣告app要使用定位服務(Privacy - Location When In Use Usage Description),右邊的字串是我們要讓使用者知道為什麼我們要使用定位權限的說明,如下圖:
https://ithelp.ithome.com.tw/upload/images/20181105/20111592vbWJd1dJGZ.png

因為我們只是要求在App中獲取使用者目前地址,所以我們只要用requestWhenInUseAuthorization這個function來索取定位權限,再透過CLLocationManagerDelegate中的didChangeAuthorization system callback來得知要求權限後,使用者最後是否有給予app定位權限(記住一樣要把locationManager的delegate設為目前的viewController,這樣才會執行到我們定義的didChangeAuthorization callback)

但是要求權限的對話框只有在我們app第一次要求定位服務的時候才會跳出來(p.s 對應到的 CLAuthorizationStatusnotDetermined),所以要記得在每次要使用定位服務前,如果目前使用者還沒允許使用定位權限(即CLAuthorizationStatusdeniedrestricted),則需要跳出自己客製化提示使用者開啟定位權限的對話框,並導引使用者到我們app在系統設定的項目,詳細code如下:

    func showCustomAlert() {
        let alert = UIAlertController(title: "", message: "要求定位權限", preferredStyle: UIAlertController.Style.alert)
        alert.addAction(UIAlertAction(title: "前往設定頁面", style: .default) {
            _ in
            UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!, options: [:], completionHandler: nil)

            })
        self.present(alert, animated: true, completion: nil)
    }

Note:
UIApplication.openSettingsURLString的官方說明是幫你導引到系統設定頁面,如果有你這個app的話,會再幫你開啟你的app的設定頁面
官方說明連結:
https://developer.apple.com/documentation/uikit/uiapplicationopensettingsurlstring?language=objc

完整專案在以下連結:
https://github.com/tgnivekucn/GetLocation


下一篇將講述: 2. 獲取目前的地址與經緯度


ref: https://developer.apple.com/documentation/corelocation


上一篇
IOS app開發介紹 - ViewController容器之 UITabBarController 2
下一篇
IOS app開發介紹 - location service (2)
系列文
IOS app開發介紹22
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言