【问题标题】:Can phonegap app work in background?phonegap 应用程序可以在后台运行吗?
【发布时间】:2012-12-22 01:27:31
【问题描述】:

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

我的应用程序用于观察价格变化。价格变动时会发出声音提示。

那么,答案应该是yes还是no?谢谢。

【问题讨论】:

标签: cordova background


【解决方案1】:

【讨论】:

  • 等等。所有 3 个链接都为 Android 提供了解决方案。其他支持PhoneGap的移动操作系统,比如iOS和Blackberry OS怎么样?
  • 链接不是好的答案,因为它们可能会变弱。您应该在链接中发布一个简短的摘要。
【解决方案2】:

由于 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 值作为抓取间隔,这会导致最快的抓取周期。

【讨论】:

  • 那么安卓呢?为什么大多数插件是为单一平台而不是主要的 3 个平台编写的?
  • @Andrew 我想你的问题的答案是每个平台都以完全不同的方式处理后台进程,创建一个插件会相当烦人并且需要广泛的知识。我相信它会来的,我也想要!
  • Android 用户应使用this plugin。我听说如果你不将它用于地理定位等,在 iOS 上使用它可能会让你的应用在审核过程中被拒绝。
【解决方案3】:

如果您为 ios 7 + 构建 cordova,并准备将通用代码跳出到 xcode 中,您可以将“必需的背景模式”添加到 ios 构建的 .plist 文件中,它不会被覆盖一个新的版本。

例如我选择了“应用从网络下载内容”选项

然后,您所要做的就是确保您的应用每隔几分钟就向外界发出一次提示(我使用的是 firebase,所以我得到了一个虚拟节点的值)。

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

这可以在您的代码中将问题解决到几行代码中。

【讨论】:

    猜你喜欢
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    相关资源
    最近更新 更多