2013-01-08 54 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分鐘的背景),但無法看到應該如何失敗,以及您的資源背景/休息時的應用需求並不繁重。

這會將此問題的解決方案縮減爲代碼中的幾行內容。

相關問題