2013-04-01 20 views
7

È possibile quando l'app non è in esecuzione ma l'utente è ancora in grado di ricevere una notifica push quando si trova in prossimità di una determinata località. Ciò richiederà il controllo della latitudine e della longitudine attuali dell'utente (anche l'app non è in esecuzione).notifica push basata sulla posizione quando l'app non è in esecuzione?

Se è possibile, puoi dare alcune linee guida su come posso ottenerlo?

+2

Leggere "Avvio del servizio di cambio di posizione significativo" in questo documento -> http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html – borrrden

risposta

5

Ci sono due metodi che è possibile fare uso di per monitorare posizione dell'utente anche quando l'applicazione non è in esecuzione:

  1. Significativo-centro di assistenza cambiamento.

    Chiamare il metodo startMonitoringSignificantLocationChanges in un'istanza CLLocationManager. Ciò contribuirà in modo significativo al risparmio energetico ma non fornisce un'elevata precisione rispetto al secondo metodo riportato di seguito.

    È non lo fanno necessità di impostare la chiave location in UIBackgroundModes se si opta per questo metodo.

  2. Servizio posizione standard.

    Chiamare il metodo startUpdatingLocation in un'istanza CLLocationManager. Questo richiede molta potenza del dispositivo, ma offre una maggiore precisione. Ricorda di impostare la chiave location in UIBackgroundModes per accertarti che il monitoraggio funzioni ancora anche se l'app viene uccisa.

È possibile utilizzare uno dei metodi precedenti. Io uso il primo metodo combinato con Region Monitoring per attivare la notifica locale.

Si può dare un'occhiata al seguente documentazione di Apple per spiegazioni più approfondite ed esempi:

http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html

+0

Servizio di posizione standard gli eventi non rilanceranno l'app, se è stata uccisa. 'Il servizio di localizzazione standard consegna gli eventi normalmente mentre un'app è in esecuzione in primo piano. Quando la tua app è in background, questo servizio offre eventi solo quando la modalità di aggiornamento degli aggiornamenti di posizione è abilitata per l'app. Questo servizio non riavvia le app iOS che sono state interrotte. Tratto da [qui] (https://developer.apple.com/reference/corelocation/cllocationmanager) – fspirit

0

Hai bisogno di fare 2 cose:

  1. startMonitoringSignificantLocationChanges con il CLLocationManager. Questo è dal codice. Probabilmente vuoi ascoltare la notifica e fare qualsiasi cosa con le informazioni che stai ricevendo. Tuttavia, se l'app non è in esecuzione, non otterrete queste informazioni a meno che non facciate due:
  2. In funzionalità: abilita Modi di background e Modalità: Aggiornamenti di posizione. In questo modo, ritengo che riceverai sempre le notifiche, anche se la tua app si scollega dall'elenco inattivo.

Tuttavia, l'utente può ancora disattivarlo (Impostazioni-> Generale-> Aggiornamento app in background).

0

Puoi farlo quando l'app è in background. innanzitutto..callare CLLocationManager deleagte ogni volta che l'app passa allo sfondo. Ogni volta che il dispositivo ottiene una nuova latitudine e longitudine. Questo deleagte verrà licenziato. - (void) locationManager: (CLLocationManager *) manager didUpdateLocations: (NSArray *) posizioni; Ora chiama un webservice e aggiorna la posizione corrente. Quindi inviare una notifica push.

3

Regione (CLRegion) in base notifiche anche quando l'applicazione non è in esecuzione a tutti

Bene, questa risposta non è una veloce ma Apple ha introdotto nuovo concetto di UILocalNotification. Non è necessario inviare una notifica push, iOS mostrerà automaticamente una notifica locale quando l'utente entra/esce dall'area geografica CLRegion. Da iOS 8 e versioni successive, è possibile pianificare una notifica locale basata sulla posizione non impostando la proprietà fireDate.

let localNotification = UILocalNotification() 
    localNotification.alertTitle = "Hi there" 
    localNotification.alertBody = "you are here" 

    let region = CLCircularRegion(center: CLLocationCoordinate2D(latitude: 4.254, longitude: 88.25), radius: CLLocationDistance(100), identifier: "") 
    region.notifyOnEntry = true 
    region.notifyOnExit = false 
    localNotification.region = region  

    localNotification.timeZone = NSTimeZone.localTimeZone() 
    localNotification.soundName = UILocalNotificationDefaultSoundName 

    UIApplication.sharedApplication().scheduleLocalNotification(localNotification) 

Qui ci sono ulteriori dettagli da Apple.

+0

possiamo fare una notifica silenziosa in modo che possiamo eseguire il codice? –