phonegap app可以在后台运行吗?

时间:2013-01-08 08:18:41

标签: cordova background

我的意思是在完全背景下工作,例如即使屏幕关闭,应用程序也在运行,并且可以发送声音通知。

我的应用用于观看价格变化。当价格发生变化时,会发出声音警报。

那么,答案应该是肯定还是否定?感谢。

3 个答案:

答案 0 :(得分:47)

答案 1 :(得分:28)

由于iOS 7提供了另一种可能的解决方案,我将为iOS 7及更远的用户提供额外的答案。

新的Background Fetch功能可以定期更新后台应用的内容。提取的时间间隔不能由用户设置,而是由iOS根据其用户的统计信息(应用程序使用情况等)设置。

可以通过插件使用PhoneGap / Cordova访问此新功能 - 幸运的是,been developed a plugin已经提供此访问权限。 您可以通过

将其安装到Cordova项目中
cordova plugin add https://github.com/christocracy/cordova-plugin-background-fetch.git

与提供iOS's local notifications访问权限的插件相结合,可以实现奇迹。此类插件也已开发出来,例如this one。 通过

将其安装到您的Cordova项目中
cordova plugin add https://github.com/katzer/cordova-plugin-local-notifications.git

现在可以将这些插件组合到您的javascript代码中,以执行后台活动:

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

此提取插件使用UIApplicationBackgroundFetchIntervalMinimum值作为提取间隔,这样可以获得最快的提取周期。

答案 2 :(得分:0)

如果你为ios 7 +构建cordova,并且准备将你的通用代码放到xcode中,你可以在你的ios版本的.plist文件中添加'required background modes',它不会被一个新的构建。

e.g。我选择了“应用程序从网络下载内容”选项

所有你需要做的就是确保你的应用程序每隔几分钟就会戳一次外面的世界(我正在使用firebase,所以我得到了一个虚拟节点的值)。

我还没有提交到应用程序商店,但是如果请求不是太频繁(我知道应用程序在被暂停之前在后台有大约10分钟)和应用程序的资源,我看不出它应该如何失败背景/休息时的需求并不繁重。

这会将此问题的解决方案降低到代码中的几行。