2013-01-08 5 views
40

ciò che intendo è lavorare in completo background, ad es. anche lo schermo è spento, l'app è in esecuzione e può inviare notifiche con un suono.L'app di PhoneGap può funzionare in background?

La mia app è utilizzata per osservare le variazioni di prezzo. Ci sarà un avviso con un suono quando un prezzo cambia.

Quindi, la risposta dovrebbe essere sì o no? Grazie.

+0

prova anche questo plugin - https://github.com/katzer/cordova-plugin-background-mode –

risposta

47
+0

wait. Tutti e 3 i link forniscono soluzioni ad Android. Che ne dici di un altro sistema operativo mobile supportato da PhoneGap, come iOS e Blackberry OS? – Raptor

+1

@Shivan Raptor: guarda i link in aggiornamento nella risposta –

+18

I link non sono una buona risposta, in quanto potrebbero indebolirsi. dovresti pubblicare un breve riassunto di cosa c'è nel link. – brainray

28

Poiché ci fu un'altra soluzione possibile con iOS 7, sarò fornire una risposta supplementare per gli utenti di iOS 7 e oltre.

La nuova funzione Background Fetch consente di aggiornare regolarmente il contenuto di un'app in background. L'intervallo di tempo del recupero non può essere impostato dall'utente, ma è impostato piuttosto da iOS in base alle statistiche dell'utente (utilizzo dell'app, ecc.).

Questa nuova funzionalità è accessibile tramite PhoneGap/Cordova tramite plug-in: fortunatamente è già disponibile lo been developed a plugin. È possibile installarlo sul progetto di Cordova da

cordova plugin add https://github.com/christocracy/cordova-plugin-background-fetch.git 

In combinazione con un plugin che fornisce l'accesso a iOS's local notifications, questo funziona a meraviglia. È stato anche sviluppato un tale plugin, ad esempio this one. installarlo sul progetto di Cordova da

cordova plugin add https://github.com/katzer/cordova-plugin-local-notifications.git 

Questi plugin possono essere combinati nel codice javascript, per eseguire attività in background:

function onDeviceReady() { 
    var Fetcher = window.plugins.backgroundFetch; 

    // Your background-fetch handler. 
    var fetchCallback = function() { 
     console.log('BackgroundFetch initiated'); 

     // perform your ajax request to server here 
     $.get({ 
      url: '/heartbeat.json', 
      callback: function(response) { 
       // process your response and whatnot. 

       window.plugin.notification.local.add({ message: 'Just fetched!' }); //local notification 
       Fetcher.finish(); // <-- N.B. You MUST called #finish so that native-side can signal completion of the background-thread to the os. 
      } 
     }); 
    } 
    Fetcher.configure(fetchCallback); 
} 

Questo plugin recupero sta usando il valore UIApplicationBackgroundFetchIntervalMinimum per l'intervallo di recupero , questo si traduce nella periodicità di recupero più veloce possibile.

+4

E per quanto riguarda Android? Perché la maggior parte dei plugin sono scritti per una singola piattaforma invece delle principali 3 piattaforme? – andreszs

+0

@Andrew Immagino che la risposta alla tua domanda sia che ognuna delle piattaforme gestisce i processi in background in modi completamente diversi e la creazione di un singolo plugin sarebbe piuttosto faticosa e richiede una vasta conoscenza. Sono sicuro che arriverà, lo voglio anche io! –

+0

Gli utenti Android dovrebbero usare [questo plugin] (https://github.com/katzer/cordova-plugin-background-mode). Ho sentito che utilizzarlo su iOS probabilmente farà rifiutare la tua app nel processo di revisione se non la stai utilizzando per la geolocalizzazione, ecc. – Clawish

0

Se si costruisce cordova per iOS 7 + e si è pronti ad uscire dal codice generico in xcode, è possibile aggiungere "modalità di background richieste" al file .plist del proprio build ios e non verrà sovrascritto da una nuova build.

ad es. Ho scelto l'opzione "Scarica contenuti app dalla rete"

Tutto quello che devi fare è assicurarti che la tua app colpisca il mondo esterno ogni pochi minuti (sto utilizzando Firebase, quindi ottengo il valore di un nodo fittizio) .

Non ho ancora inviato all'App Store, ma non vedo come dovrebbe fallire se la richiesta non è troppo frequente (ho capito che le app hanno circa 10 minuti in background prima di essere sospese) e le risorse che le app in background/a riposo non sono onerose.

Ciò ottiene la risoluzione di questo problema in un paio di righe nel codice.