2010-10-27 12 views
17

Supponendo che ciò sia possibile, vorrei che la mia applicazione iOS, in background, esegua il polling di un server (ovvero, recupera il contenuto di un URL ogni 30 minuti e informa l'utente se contiene qualcosa "interessante"), essenzialmente in un modo simile al modo in cui il client di posta elettronica integrato funziona presumibilmente se non si stanno utilizzando le notifiche push.Modo corretto per eseguire il polling del server sullo sfondo

Ora, dalla mia lettura fino ad ora (io sono un programmatore esperto, ma nuova per iOS), penso che ci possono essere due potenziali modi per farlo:

  • Metodo 1: In applicationDidEnterBackground :, avviare un'attività in background che esegue il polling periodico;
  • Metodo 2: inviare la propria app a UILocalNotification senza testo visibile all'utente, ma che serve semplicemente a riattivare l'app in X minuti per eseguire il polling (e quindi inviare se stessa un'altra notifica per il tim successivo ecc.).

Vedo nella documentazione Apple di Scheduling, Registering, and Handling Notifications, in realtà sembrano avere un esempio di usign Metodo 1 (il loro esempio di "chat", Listato 2-2). Ma ciò che sorprende di questo metodo è che sembra semplicemente sedersi in un ciclo continuo facendo il sondaggio, senza il sonno intermedio; su piattaforme con cui ho più familiarità, sarebbe sconsigliabile e masterizzerebbe la CPU.

Così sottoparti della mia domanda sono essenzialmente: - è il metodo 2 possibile (o must un UILocalNotification provocano sempre un avviso visibile all'utente, che non è quello che voglio), e se così è il metodo consigliato per Fai questo? - Se il modo per farlo è il Metodo 1, è l'esempio di "chat" di Apple di stare in un loop continuo in realtà OK (ad esempio, iOS raziona la CPU in modo che non si tratti di un problema), e se no qual è il modo in iOS per dire al processo in background di "dormire per X secondi/minuti"? E se il ciclo continuo di Apple è OK per qualsiasi motivo, quale sarebbe quindi il modo di scandire gli intervalli tra il polling?

N.B. Apprezzo che essere in grado di eseguire in background è essenzialmente una funzionalità di iOS 4. Non mi dispiace se la mia app funzionerà solo su iOS 4.

risposta

14

Quello che vuoi fare, non è coperto dalle funzionalità di multitasking di iOS4. Esistono solo alcuni tipi di applicazioni che possono essere eseguite in background per lunghi periodi di tempo (più di 10 minuti) e le applicazioni di rete generiche non sono tra queste.

Tuttavia, non tutto è perduto. Cosa puoi fare e cosa ti credo dovrebbe do è utilizzare le notifiche push. Sul tuo server, ti colleghi al servizio di notifica push di Apple, l'utente si registra per le notifiche push e tu sai quali sono i "dati interessanti" o ti dicono. Quando tali dati sono disponibili, li invii immediatamente all'utente tramite una notifica push.

Fornisce un'esperienza utente migliore e l'app non deve essere eseguita in background. iOS gestirà la consegna della notifica push. Se eseguono lo swipe per sbloccare il telefono quando ricevono la notifica, la tua app si aprirà e, in quel momento, potrai caricare tali informazioni utili nella tua app.

Il metodo 1 non funziona a lungo termine, anche se si riesce a sospendere l'input per un po ', e questo è il motivo i tre tipi di applicazioni a cui è consentito rimanere in esecuzione. Dopo 10 minuti, il sistema operativo ti sospenderà.

Il tuo metodo 2 non funzionerà affatto.Tutte le notifiche locali presentano una visualizzazione di avviso per gli utenti.

+0

Grazie - questo è in linea con quello che ho letto (sfortunatamente). Mi chiedo perché Apple mostri un esempio di polling di un server di chat in background in quel caso. Il problema principale con le notifiche push per me è che volevo mantenere le informazioni di accesso riservate del client sul client, ma sembra che questo non sia possibile. È interessante notare che il client di posta integrato dell'iPhone è autorizzato a violare questa regola, quindi? –

+0

Utilizzare un diverso meccanismo di autenticazione/autorizzazione. Cose come OAuth o Whatnot. In secondo luogo, non sono sicuro di quale esempio stai indicando, ma la cosa principale che potrebbe mostrare sono i servizi basati sulla posizione in background e il client "chat". Non lo so. – jer

3

Assumendo questo è possibile ...

Purtroppo questo è un presupposto errato (!).

Non è possibile farlo utilizzando il "multi tasking" su iPhone, in quanto consente solo alcuni tipi di elaborazione in background (GPS, VoIP, musica). Per fare ciò che vuoi, devi eseguire il lavoro su un server e utilizzare le notifiche push.

Problemi correlati