2013-01-08 32 views
40

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

我的应用程序用于观看价格变化。价格变化时会有声音提醒。

那么,答案应该是或不是?谢谢。

+0

试试这个插件 - https://github.com/katzer/cordova-plugin-background-mode –

回答

47
+0

等一下。所有3个链接都为Android提供解决方案。其他PhoneGap支持的移动操作系统如iOS和Blackberry OS如何? – Raptor

+1

@Shivan Raptor:看看更新中的链接 –

+18

链接并不是很好的答案,因为它们可能会变弱。你应该在链接中发布一个简短的摘要。 – brainray

28

由于与iOS 7又来了一个可能的解决方案,我会提供的iOS 7,并进一步的用户额外的答案。

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

这个新功能可以通过插件访问PhoneGap/Cordova - 幸运的是,已经有been developed a plugin提供这种访问。 你可以将它通过

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

与插件提供给iOS's local notifications访问安装到您的科尔多瓦项目相结合,这可以创造奇迹。这种插件也已开发出来,例如this one。 通过

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值这会导致尽可能快的提取周期。

+4

那么Android呢?为什么大多数插件是针对单一平台而不是主要3个平台编写的? – andreszs

+0

@Andrew我想你的问题的答案是,每个平台都以完全不同的方式处理后台进程,创建一个插件会相当麻烦,需要广泛的知识。我相信它会来的,我也想要它! –

+0

Android用户应该使用[this plugin](https://github.com/katzer/cordova-plugin-background-mode)。我听说如果您不使用它进行地理定位等,在iOS上使用它可能会在评论过程中拒绝您的应用。 – Clawish

0

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

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

然后您需要做的就是确保您的应用每隔几分钟就会向外界推送一次(我正在使用firebase,因此我获得了虚拟节点的值) 。

我还没有提交到应用程序商店,但是如果请求不是太频繁(我了解应用程序在被暂停前有大约10分钟的背景),但无法看到应该如何失败,以及您的资源背景/休息时的应用需求并不繁重。

这会将此问题的解决方案缩减为代码中的几行内容。

相关问题