2

Phonegap 构建

我一直在使用 Phonegap Build 来构建 Android (apk) 和 iOS (ipa) 文件。Codepush 的文档 ( https://docs.microsoft.com/en-us/appcenter/distribution/codepush/cordova ) 声明该插件与 Phonegap Build 兼容。但是,我已经为 iOS 和 Android 构建了应用程序(<preference name="android-build-tool" value="gradle" />按照 Android 的推荐添加到 config.xml),但是,这两个应用程序都不会从 Codepush 获取新版本 - 该应用程序只会按照原始安装显示。

随机回滚

我在使用 Android 测试 Codepush 时遇到了重大挫折。我在设备上安装编译的应用程序,它运行正常。我通过对 html 文件进行细微更改来修改应用程序,并使用 appcenter codepush release-cordova... 推出新的更新。

然后我运行该应用程序,关闭它并再次运行它。前两个或前三个更新将被正确拾取。但是,在此之后(并且不一致,发生这种情况时设备之间会有所不同),下一次更新失败并且应用程序恢复到已安装的版本,并且在 appcenter 中,更新显示在“回滚”下。

从那时起,任何新版本都将被忽略,应用程序将保留在已安装的版本上。唯一的两个修复似乎是 1. 重新安装应用程序 - 这修复了它并开始获取新版本,直到它再次失败或 2. 清除部署的整个历史记录。同样,这会修复它,直到它再次失败。

更新没有崩溃——我只是更改了 index.html 中的一些文本,所以它不会崩溃(另外,更新将安装在一台设备上,但在另一台设备上失败,所以不可能这样)。

该应用程序触发 Codepush 同步如下:

document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady() {
    codePush.sync(null,{
        ignoreFailedUpdates : false
    });
}

我已经尝试过使用和不使用“ignoreFailedUpdates”选项,但最终无论哪种方式都失败了。我认为问题是由于应用程序无法完成引起的codePush.notifyApplicationReady,可能是由于网络问题。

然而,这似乎是一个阻碍,因为它有效地使 Codepush 在现实世界中无法使用。不能保证更新会到达用户;更糟糕的是,如果更新失败,应用程序会回滚到上次安装的版本,随后会忽略所有新更新,因此它们会卡在旧版本上,或者不得不经历重新安装应用程序的痛苦。(每次我们进行更新时清除部署历史可能会奏效,但不能保证)。

例如,我创建了一个应用程序,它只显示一些 html,包括版本号。构建和安装

'v1.00'

编辑了 html,将版本更改为 v1.01。

发布更新(已经设置应用程序使用appcenter apps set-current -a ...

appcenter codepush release-cordova -d Staging

打开应用程序,关闭它,再次打开

正确显示“v1.01”

编辑了 html,将版本更改为 v1.02。

发布更新

打开应用程序,正确显示

'v1.02'

关闭它,然后重新打开它

显示“v1.00”,appcenter 显示回滚。

我尝试在 appcenter codepush release-cordova 上使用“-m”选项

此外,我已经在 Android 6 和 7 上尝试过同样的问题。

我的问题是: 1. 还有什么我可以尝试让更新正确安装,或者,如果它们失败,不要将应用程序冻结在上次安装的状态并忽略任何未来的更新。2. 如果我切换使用 React-Native,这是一个 Cordova 问题还是可能发生同样的事情?3. 有没有办法让 Codepush 和 Phonegap Build 一起工作?#

我们希望能够向我们的用户群推出应用程序,但不必在每次小的更改时都重新安装它们。Codepush 似乎是一个完美的解决方案,但目前看来,它似乎根本不可行。

任何帮助将非常感激。

4

0 回答 0