Swift Academy · Oppitunti

Sijaintiluvan pyytäminen

Käsittele käyttöoikeudet ja yksityisyys oikein.

Oppitunti 1/413 vaihetta

Sijaintiluvan pyytäminen on ilmainen Swift Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Swift Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Swift Academy-kurssilla on yhteensä 4 oppituntia.

Miksi sijainti vaatii käyttöoikeuden

Apple-alustoilla käyttäjän sijainnin käyttäminen on yksityisyyden kannalta arkaluonteinen toiminto. Sovelluksen on pyydettävä käyttöoikeutta nimenomaisesti, ennen kuin Core Location toimittaa koordinaatteja. Järjestelmä näyttää käyttöoikeusikkunan ensimmäisellä pyyntökerralla.

  • Käyttäjä myöntää käyttöoikeuden sovelluskohtaisesti.
  • Sitä ei voi ohittaa ohjelmallisesti.
import CoreLocation

let manager = CLLocationManager()

Info.plistin käyttökuvausavaimet

Ennen käyttöoikeuden pyytämistä teidän on lisättävä käyttökuvaus-merkkijono tiedostoon Info.plist. Nämä merkkijonot näytetään käyttäjälle käyttöoikeusikkunassa. Kaksi tärkeintä avainta ovat:

  • NSLocationWhenInUseUsageDescription — käyttöön vain etualalla.
  • NSLocationAlwaysAndWhenInUseUsageDescription — myös taustakäyttöön.

Oikean avaimen puuttuminen aiheuttaa pyynnön hiljaisen epäonnistumisen tai kaatumisen.

<!-- Info.plist -->
<key>NSLocationWhenInUseUsageDescription</key>
<string>We use your location to show nearby places.</string>

CLLocationManagerin luominen

CLLocationManager on paikannuspalveluita koordinoiva keskeinen olio. Luokaa siitä yksi instanssi, säilyttäkää siihen vahva viittaus ja määrittäkää delegaatti vastaanottamaan takaisinkutsut.

final class LocationService: NSObject {
    let manager = CLLocationManager()

    override init() {
        super.init()
        manager.delegate = self
    }
}

Käytön aikana -käyttöoikeuden pyytäminen

Kutsukaa requestWhenInUseAuthorization()-metodia pyytääksenne käyttöoikeutta sovelluksen ollessa käytössä. Järjestelmä näyttää valintaikkunan vain kerran, minkä jälkeen valinta muistetaan. Jos käyttöoikeus on jo ratkaistu, kutsu ei tee mitään.

func requestPermission() {
    manager.requestWhenInUseAuthorization()
}

Aina-käyttöoikeuden pyytäminen

Taustapäivityksiä varten (geofencing, jatkuva seuranta) kutsukaa requestAlwaysAuthorization()-metodia. Apple edellyttää, että hankitte ensin käytön aikana -käyttöoikeuden ja laajennatte sen jälkeen käyttöoikeuden Aina-tilaan. Käyttäkää tätä harkiten ja perustelkaa se käyttökuvauksessa.

func requestAlways() {
    manager.requestAlwaysAuthorization()
}

Käyttöoikeuden tilan lukeminen

Nykyinen käyttöoikeuden tila on ominaisuudessa manager.authorizationStatus (iOS 14:stä lähtien käytettävissä oleva instanssiominaisuus). Mahdollisia arvoja ovat esimerkiksi .notDetermined, .denied, .restricted, .authorizedWhenInUse ja .authorizedAlways.

let status = manager.authorizationStatus
switch status {
case .notDetermined: print("Ask the user")
case .denied, .restricted: print("No access")
case .authorizedWhenInUse, .authorizedAlways: print("Good to go")
@unknown default: break
}

CLLocationManagerDelegate-delegaatti

Käyttöoikeuden muutokset toimitetaan asynkronisesti delegaatin kautta. Toteuttakaa locationManagerDidChangeAuthorization(_:), jotta voitte reagoida käyttäjän valintaan. Älkää koskaan olettako, että käyttöoikeus myönnetään heti pyynnön tekemisen jälkeen.

extension LocationService: CLLocationManagerDelegate {
    func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
        switch manager.authorizationStatus {
        case .authorizedWhenInUse, .authorizedAlways:
            manager.startUpdatingLocation()
        default:
            print("Not authorized")
        }
    }
}

Evätyn tai rajoitetun käyttöoikeuden käsittely

Jos käyttäjä kieltää käyttöoikeuden, ette voi pyytää sitä uudelleen. Tunnistakaa sen sijaan .denied ja ohjatkaa käyttäjä Settings-asetuksiin. .restricted tarkoittaa, että lapsilukko tai MDM-profiili estää käytön eikä tilannetta voi myöskään korjata sovelluksessa.

func handle(_ status: CLAuthorizationStatus) {
    if status == .denied {
        // Deep-link the user to Settings > Privacy > Location
        print("Open Settings to enable location")
    }
}

Tarkkuuskäyttöoikeus (täsmällinen vai rajoitettu)

iOS 14:stä lähtien käyttäjä voi myöntää vain rajoitetun (likimääräisen) tarkkuuden. Tarkistakaa manager.accuracyAuthorization. Jos tarvitsette todella tarkkoja tietoja, esimerkiksi vaiheittaista navigointia varten, kutsukaa requestTemporaryFullAccuracyAuthorization(withPurposeKey:)-metodia avaimella, joka on määritetty tiedostossa Info.plist.

if manager.accuracyAuthorization == .reducedAccuracy {
    manager.requestTemporaryFullAccuracyAuthorization(
        withPurposeKey: "PreciseForNavigation"
    )
}

Sijaintipalveluiden käytössäolon tarkistaminen

Sovelluskohtaisen käyttöoikeuden lisäksi koko laitteen sijaintipalveluiden kytkin voi olla pois käytöstä. Tarkistakaa CLLocationManager.locationServicesEnabled() taustajonossa, sillä sen kutsuminen pääsäikeessä voi estää suorituksen. Jos palvelut on poistettu käytöstä, mikään sovellus ei vastaanota sijaintia.

DispatchQueue.global().async {
    if CLLocationManager.locationServicesEnabled() {
        print("System location is on")
    } else {
        print("System location is off")
    }
}

Täydellinen käyttöoikeusprosessi

Yhdistetään nämä: luokaa manageri, määrittäkää delegaatti, pyytäkää käytön aikana -käyttöoikeutta ja käynnistäkää sitten päivitykset käyttöoikeuden takaisinkutsun sisällä. Tämä on vakiintunut malli kaikille sijaintia hyödyntäville toiminnoille.

final class LocationService: NSObject, CLLocationManagerDelegate {
    let manager = CLLocationManager()
    override init() {
        super.init()
        manager.delegate = self
        manager.requestWhenInUseAuthorization()
    }
    func locationManagerDidChangeAuthorization(_ m: CLLocationManager) {
        if m.authorizationStatus == .authorizedWhenInUse {
            m.startUpdatingLocation()
        }
    }
}

Pikatarkistus: käyttöoikeus

Testatkaa, miten hyvin hallitsette käyttöoikeusprosessin.

Kertaus: Käyttöoikeuden pyytäminen

Opitte pyytämään sijainnin käyttöoikeutta turvallisesti:

  • Lisätkää NSLocationWhenInUseUsageDescription ja tarvittaessa Always-versio tiedostoon Info.plist.
  • Luokaa CLLocationManager, säilyttäkää siihen vahva viittaus ja määrittäkää sen delegaatti.
  • Kutsukaa requestWhenInUseAuthorization()-metodia ja laajentakaa käyttöoikeus Aina-tilaan vain tarvittaessa.
  • Reagoikaa metodissa locationManagerDidChangeAuthorization(_:) ja käsitelkää evätyn, rajoitetun ja rajoitetun tarkkuuden tilanteet.
Aloita maksutta

Opi Swift tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
122
Oppitunnit
409

Usein kysytyt kysymykset

Onko oppitunti ”Sijaintiluvan pyytäminen” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “Sijaintiluvan pyytäminen”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Swift Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Sijaintiluvan pyytäminen”?

Käsittele käyttöoikeudet ja yksityisyys oikein. Harjoittelet Swift Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Swift Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Swift Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Sijaintiluvan pyytäminen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Swift Academy-oppitunnilla?

Kyllä. Jokainen Swift Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Sijaintiluvan pyytäminen
  2. Käyttäjän sijainnin hakeminen
  3. Karttojen näyttäminen SwiftUIssa
  4. Geokoodaus ja alueet
← Takaisin: Swift Academy