Come evitare i rifiuti delle app iOS a causa di “Servizi in background non utilizzati correttamente”

La maggior parte delle app viene rifiutata dall’App Store con la dicitura “I servizi in background non sono stati utilizzati correttamente”. Come sviluppatore, è nostra responsabilità fornire le app con i servizi richiesti in modo efficiente e in modo appropriato .

Per accedere ai servizi di localizzazione, è necessario che CoreLocation Framework sia collegato alla nostra applicazione .

Determinare la necessità dei servizi di localizzazione nell’applicazione

Per utilizzare correttamente i servizi di localizzazione nella nostra app, dobbiamo includere la chiave UIRequiredDeviceCapabilities nel file info.plist. Il motivo per l’aggiunta della chiave UIRequiredDeviceCapabilities è specificare i requisiti della nostra app da installare in qualsiasi dispositivo iOS. In tal modo App Store impedirà agli utenti di scaricare app nei dispositivi che non hanno i requisiti elencati.

Le funzionalità di UIRequiredDeviceCapabilities (array di stringhe) sono

# 1. Servizi di localizzazione: possiamo aggiungere questa stringa per l’utilizzo dei Servizi di localizzazione in generale.

# 2. GPS: possiamo aggiungere questa stringa quando la nostra applicazione richiede l’accuratezza offerta dall’hardware GPS.

Ottenere la posizione corrente dell’utente

Il CoreLocation Framework aiuta a individuare la posizione corrente del dispositivo e utilizzare tali informazioni nella nostra applicazione.

I servizi che aiutano a ottenere la posizione corrente dell’utente sono:

# 1. Il servizio di localizzazione standard.

# 2. Il servizio di localizzazione dei cambiamenti significativi.

A partire dal servizio di localizzazione standard

Questo è un servizio generale per ottenere dati sulla posizione e tracciare la posizione in modo accurato. Siamo in grado di configurare la precisione desiderata dei dati sulla posizione nella nostra applicazione.

Per utilizzare questo servizio, dobbiamo creare un’istanza della classe CLLocationManager e configurarne le proprietà desiderateAccuracy e distanceFilter. Per iniziare a ricevere le notifiche di posizione, assegnare un delegato all’oggetto e chiamare il metodo startUpdatingLocation.

Se è già stato consegnato un aggiornamento della posizione, possiamo interrompere gli aggiornamenti della posizione chiamando stopUpdatingLocation.

Sullo sfondo:

Se i servizi di localizzazione in background sono un must per la nostra applicazione e per mantenere una buona durata della batteria per il dispositivo dell’utente, dobbiamo impostare le pause del gestore della posizioneLocationUpdatesAutomaticamente su SÌ. Quindi CoreLocation mette in pausa gli aggiornamenti della posizione quando l’utente non si sposta da nessuna parte.

Quando il gestore della posizione sospende gli aggiornamenti della posizione, notifica l’oggetto delegato chiamando il relativo metodo locationManagerDidPauseLocationUpdates:. Quando il gestore della posizione si aggiorna, chiama il metodo locationManagerDidResumeLocationUpdates: del delegato. Possiamo usare questi metodi delegati per eseguire attività o regolare il comportamento della tua app.

Avvio del servizio di localizzazione con modifiche significative

Questo servizio è un servizio alternativo per il risparmio energetico rispetto al servizio di localizzazione standard. Questo servizio utilizza i dati cellulare o Wi-Fi per determinare la posizione dell’utente. Il servizio di modifica delle posizioni significative può anche riattivare un’app iOS attualmente sospesa o non in esecuzione per fornire nuovi dati sulla posizione.

Per utilizzare il servizio di ubicazione con modifiche significative, creare un’istanza di CLLocationManagerclass, assegnargli un delegato e chiamare il metodo startMonitoringSignificantLocationChanges.

Problemi con Apple e soluzioni appropriate:

Problema 1: abbiamo riscontrato che la tua app utilizza una modalità in background ma non include funzionalità che richiedono tale modalità per l’esecuzione persistente. Questo comportamento non è conforme a AppStoreReviewGuidelines.

Abbiamo notato che la tua app dichiara il supporto per la posizione nella chiave UIBackgroundModes nel tuo Info.plist ma non include funzionalità che richiedono una posizione persistente.

Sarebbe opportuno aggiungere funzionalità che richiedono l’uso persistente degli aggiornamenti di posizione in tempo reale mentre l’app è in background o rimuovere l’impostazione di “posizione” dalla chiave UIBackgroundModes. Se l’applicazione non richiede aggiornamenti di posizione persistenti e in tempo reale, si consiglia di utilizzare il servizio di localizzazione a modifica significativa o il servizio di localizzazione di monitoraggio dell’area.

Per ulteriori informazioni su queste opzioni, consultare le sezioni “Avvio del servizio di modifica delle posizioni significative” e “Monitoraggio delle aree basate sulla forma” nella Guida alla programmazione della posizione.

Soluzione:

Puoi includere la funzionalità e i metodi per i servizi di localizzazione se la tua app necessita di servizi di localizzazione o rimuovere gli aggiornamenti di posizione dalla chiave UIBackgroundMode in plist, in modo che l’app venga approvata dall’App Store.

Problema 2: abbiamo riscontrato che la tua app utilizza una modalità in background ma non include la seguente dichiarazione di non responsabilità relativa all’uso della batteria nella descrizione dell’applicazione:

“L’uso continuato del GPS in background può ridurre drasticamente la durata della batteria.”

Soluzione:  

Se vogliamo utilizzare i servizi di localizzazione standard continuamente in primo piano o in background, nella descrizione dell’app dobbiamo menzionare che “L’uso continuo del GPS farà asciugare la batteria”. In questo modo l’app verrà approvata dall’App Store.

Lascia un commento