如何在没有Google Play商店的情况下动态更新Phonegap Build Android应用

时间:2016-02-11 00:17:26

标签: android cordova native cordova-plugins

我正在为选择不使用Google Play商店的客户使用Phonegap Build开发应用。相反,他们选择让我私下托管应用的APK文件。

我正在尝试开发一种方法,每次启动应用程序时动态检查我的服务器,以检查是否有更新,如果有,下载并安装该更新。

我向我的服务器发出ajax请求以检查最新文件,然后我将AWS上文件的最新版本号和URL返回给我的前端。如果文件版本大于当前应用版本,我想更新。

以下是我现在使用Phonegap Build的FileTransferWeb Intent插件的代码:

$.ajax
    type: 'GET'
    dataType: 'json'
    url: "#{baseUrl}/v2/update"
    data:
      app_token: 'fubar'
    success: (data) =>
      window.downloadApkAndroid(data)

window.downloadApkAndroid = (data) ->
  fileURL = "cdvfile://localhost/persistent/#{data.filename}"
  fileTransfer = new FileTransfer
  uri = encodeURI(data.download_url)
  fileTransfer.download uri, fileURL, ((entry) ->
    alert 'download complete: ' + entry.fullPath
    promptForUpdateAndroid entry
    return
  ), ((error) ->
    console.log 'download error source ' + error.source
    console.log 'download error target ' + error.target
    console.log 'upload error code' + error.code
    alert "#{error.code} + #{error.source} + #{error.target}"
    return
  ), false, {}
  return

window.promptForUpdateAndroid = (entry) ->
  alert entry
  window.plugins.webintent.startActivity {
    action: window.plugins.webintent.ACTION_VIEW
    url: entry.toURL()
    type: 'application/vnd.android.package-archive'
  }, (->
  ), ->
    alert 'Failed to open URL via Android Intent.'
    console.log 'Failed to open URL via Android Intent. URL: ' + entry.fullPath
    return
  return

但是,当我启动应用程序时,没有任何事情发生。我从第一个Ajax请求返回一个较新的版本,并且正在调用success方法。但在此之后似乎没有任何事情发生。谁能告诉我任何更好的方法,或者我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

您是否考虑使用Cordova Hot Code Push plugin,这样您就可以更新应用程序的www文件夹(应用程序视图,JS,CSS,任何图像等),而无需进行Google Play更新。此方法允许您在apk中发布应用程序的版本,并定期从服务器获取更新,而无需自己构建样板文件获取代码。