web-dev-qa-db-fra.com

L'application phonegap peut-elle fonctionner en arrière-plan?

ce que je veux dire, c’est travailler en arrière-plan, par exemple même l'écran est éteint, l'application est en cours d'exécution et peut envoyer des notifications avec un son.

Mon application est utilisée pour regarder les changements de prix. Il y aura une alerte avec un son quand un prix changera.

Donc, la réponse devrait être oui ou non? Merci.

40
Leo Cai
47
Melvin Joseph Mani

Puisqu'il y avait une autre solution possible avec iOS 7, je vais fournir une réponse supplémentaire aux utilisateurs d'iOS 7 et plus.

La nouvelle fonctionnalité Background Fetch permet de mettre à jour régulièrement le contenu d'une application en arrière-plan. L'intervalle de temps de la récupération ne peut pas être défini par l'utilisateur, mais plutôt par iOS en fonction des statistiques de l'utilisateur (utilisation de l'application, etc.).

Vous pouvez accéder à cette nouvelle fonctionnalité avec PhoneGap/Cordova via des plugins - heureusement, il y a déjà un plugin a été développé fournissant cet accès . Vous pouvez l'installer dans votre projet Cordova en

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

En conjonction avec un plugin fournissant un accès à notifications locales d'iOS , cela fonctionne à merveille. Un tel plugin a également été développé, par exemple celui-ci ..____. Installez-le sur votre projet Cordova en 

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

Ces plugins peuvent maintenant être combinés dans votre code javascript pour exécuter des activités en arrière-plan:

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

Ce plugin d'extraction utilise la valeur UIApplicationBackgroundFetchIntervalMinimum pour l'intervalle d'extraction, ce qui permet d'obtenir la périodicité d'extraction la plus rapide possible.

28
Clawish

Si vous construisez cordova pour ios 7 + et êtes prêt à passer de votre code générique à xcode, vous pouvez ajouter des «modes d'arrière-plan requis» au fichier .plist de votre version d'ios. Il ne sera pas écrasé par une nouvelle version. .

par exemple. J'ai choisi l'option "Télécharge le contenu du réseau"

Il vous suffit ensuite de vous assurer que votre application interpelle le monde extérieur toutes les quelques minutes (j'utilise firebase, je reçois donc la valeur d'un nœud factice).

Je ne suis pas encore inscrit à l'App Store, mais je ne vois pas comment cela pourrait échouer si la demande n'est pas trop fréquente (je comprends que les applications ont environ 10 minutes en arrière-plan avant d'être suspendues) et les ressources dont votre application a besoin en arrière-plan./au repos ne sont pas pénibles.

Cela ramène la résolution de ce problème à quelques lignes dans votre code.

0
blythburgh