2013-01-08 19 views
40

co mam na myśli, to praca w całkowicie tle, np. nawet ekran jest wyłączony, aplikacja działa i może wysyłać powiadomienia z dźwiękiem.Czy aplikacja phonegap działa w tle?

Moja aplikacja służy do oglądania zmian cen. Po zmianie ceny nastąpi alarm dźwiękowy.

Odpowiedź brzmi "tak" lub "nie"? Dzięki.

+0

spróbuj także tej wtyczki - https://github.com/katzer/cordova-plugin-background-mode –

Odpowiedz

47
+0

czekać. Wszystkie 3 linki zapewniają rozwiązanie dla Androida. Co powiesz na inny mobilny system operacyjny PhoneGap, taki jak iOS i Blackberry? – Raptor

+1

@Shivan Raptor: spójrz na linki w aktualizacji w odpowiedzi –

+18

Linki nie są dobrą odpowiedzią, ponieważ mogą się osłabić. powinieneś zamieścić krótkie podsumowanie tego, co jest w linku. – brainray

28

Ponieważ nie przyszedł Innym możliwym rozwiązaniem z iOS 7, mam zamiar zapewnić dodatkową odpowiedź dla użytkowników iOS 7 i dalej.

Nowa funkcja Background Fetch umożliwia regularną aktualizację zawartości aplikacji, która znajduje się w tle. Przedział czasu pobierania nie może być ustawiony przez użytkownika, ale jest raczej ustalany przez system iOS na podstawie statystyk jego użytkownika (użycie aplikacji itp.).

Ta nowa funkcja jest dostępna za pośrednictwem PhoneGap/Cordova za pośrednictwem wtyczek - na szczęście istnieje już been developed a plugin zapewniający ten dostęp. Można zainstalować go do projektu Cordova przez

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

W połączeniu z wtyczką zapewnienie dostępu do iOS's local notifications, to działa cuda. Taka wtyczka została również opracowana, na przykład this one. zainstalować ją na swoim projekcie Cordova przez

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

Te wtyczki można teraz połączyć w kodzie JavaScript, aby wykonać czynności w tle:

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); 
} 

Ten Pobieranie wtyczka jest za pomocą wartości UIApplicationBackgroundFetchIntervalMinimum dla sprowadzania przedziale , powoduje to najszybszą możliwą częstotliwość pobierania.

+4

A co z Androidem? Dlaczego większość wtyczek jest napisanych dla pojedynczej platformy zamiast z 3 głównych platform? – andreszs

+0

@Andrew Domyślam się, że odpowiedź na twoje pytanie jest taka, że ​​każda z platform zajmuje się procesami w tle na zupełnie inny sposób, a stworzenie jednej wtyczki byłoby raczej męczące i wymagałoby całej wiedzy. Jestem pewien, że to nadejdzie, też tego chcę! –

+0

Użytkownicy Androida powinni użyć [tej wtyczki] (https://github.com/katzer/cordova-plugin-background-mode). Słyszałem, że użycie go na iOS prawdopodobnie spowoduje odrzucenie Twojej aplikacji w procesie sprawdzania, jeśli nie używasz jej do geolokalizacji itd. – Clawish

0

Jeśli budujesz cordova dla ios 7 +, i jesteś przygotowany do wyjścia z kodu generycznego do xcode, możesz dodać "wymagane tryby tła" do pliku .plist swojej wersji ios i nie zostanie ona nadpisana przez nową kompilację.

np. Wybrałem opcję "Pobieranie aplikacji z sieci"

Wszystko co musisz zrobić to upewnić się, że twoja aplikacja wyszukuje świat zewnętrzny co kilka minut (używam firebase, więc otrzymuję wartość atrapa) .

Jeszcze nie przesłałem do sklepu z aplikacjami, ale nie widzę, jak powinno się nie powieść, jeśli żądanie nie jest zbyt częste (rozumiem, że aplikacje mają około 10 minut w tle, zanim zostaną zawieszone) i zasoby, które potrzeby aplikacji w tle/w spoczynku nie są uciążliwe.

Umożliwia to rozwiązanie tego problemu do kilku linii w kodzie.

Powiązane problemy