Le differenze di CoreLocation tra iOS7 e iOS8 da tenere in mente

UIKit

Con iOS8 Apple ha aggiunti moltissime nuove API ed aggiornate tante altre.

Una delle classi che ha avuto una grande modifica è CoreLocation. Infatti hanno aggiunto un nuovo metodo di richiesta autorizzazione e nuove autorizzazioni.

Adesso possiamo scegliere se utilizzare CoreLocation in modo continuativo o solo durante l’uso dell’app. Abbiamo quindi due tipi di autorizzazioni:

1. kCLAuthorizationStatusAuthorizedAlways (ha lo stesso valore del vecchio kCLAuthorizationStatusAuthorized)
2. kCLAuthorizationStatusAuthorizedWhenInUse

Con AuthorizedAlways possiamo usare tutti i servizi di CoreLocation, in foreground e in background, Region Monitoring, Visit Monitoring e Significant Location Changes.
Con AuthorizedWhenInUse possiamo invece utilizzare i servizi di geolocalizzazione base solo in foreground.

Quindi dobbiamo scegliere che tipo di servizio utilizzare ed aggiungere una chiave al file Info.plist del progetto:

Con AuthorizedAlways aggiungiamo la chiave NSLocationAlwaysUsageDescription e come valore inseriamo un testo che spiega perché vogliamo utilizzare il GPS.
Con AuthorizedWhenInUse aggiungiamo la chiave NSLocationWhenInUseUsageDescription e come per la chiave precedente, aggiungiamo un testo adeguato.

Queste chiavi sono obbligatorie, se non vengono aggiunte il sistema non funzionerà.

Per richiedere l’autorizzazione all’utente quindi possiamo usare i due metodi di CLLocationManager:

- requestWhenInUseAuthorization
- requestAlwaysAuthorization

Prima di richiedere l’autorizzazione è buona prassi controllare lo stato attuale con il metodo di classe di CLLocationManager:

+ authorizationStatus

e poi, se l’utente non ha autorizzato, richiederla.

Ricodatevi che il sistema si occupa di mostrare l’alert di richiesta e decide lui quando mostrarlo e se mostrarlo.
Infatti, se provate a richiedere l’autorizzazione una seconda volta, il sistema non avviserà l’utente.

Curiosità

Potete localizzare le stringhe inserite in Info.plist creando un file di stringhe chiamato: InfoPlist.strings e localizzandolo.

Scritto il