Cordova / Phonegap:实时更新代码库

时间:2014-11-17 15:02:51

标签: android ios angularjs cordova

我们正在将Coreova与AngularJS一起用于iOS和Android应用程序。

iOS的一大缺点是Apple的审核时间很长。在Google的Playstore中,您的应用几乎可以立即使用,也可以在几小时内使用。但苹果需要很长时间来审核您的应用,即使只是一个小小的变化。

所以我在想,如果有办法支持某种实时更新。
这意味着,我可以使用新代码库提供ZIP文件或其他内容,我的应用会检查更新,然后安装新文件。

我从appmobi读过一些内容,但是有没有开源解决方案?

8 个答案:

答案 0 :(得分:6)

cordova-app-loader是一个易于使用的插件,可通过3个简单步骤更新应用文件:

  1. check()获取新清单
  2. download()个文件
  3. update()您的应用!
  4. 它支持android和iOS

答案 1 :(得分:4)

我不知道有任何现成的解决方案,但它应该很容易自己编程这样的东西。 以下是一些可以帮助您入门和考虑的要点:

  • 如果您想通过zip分发更新,则需要一个处理提取的nativ插件
  • 您可能无法覆盖应用默认位置的文件(取决于操作系统)。因此,您将来要更新的所有文件都必须位于您的应用具有读/写访问权限的文件夹中(iOS:例如图书馆或文档文件夹)
  • 现在您只需下载zip-package,将zip解压缩到您选择的目录,然后重新启动/重新加载您的应用。
  • 您将无法更新原生插件!
  • Apple可能不喜欢这样,因为您可以在不通过的情况下更改整个应用程序 他们的审核流程

答案 2 :(得分:2)

我在我的cordova应用程序中执行此操作,并且在ios应用商店评论中没有任何问题。

我使用Jquery的ajax函数从服务器下载javascript和css文件,我可以在没有应用程序商店批准的情况下进行更改,然后我可以在应用程序启动时下载后注入这些脚本

我尝试使用cordova文件api,然后我在本地保存文件,但离线支持对我来说非常重要,而Jquery的ajax更简单。

这是我使用的jquery代码。我有一个bundle id用​​于检测新的javascript文件是否可用,否则jquery的ajax会缓存之前的请求以加快下载时间。

此解决方案允许您将代码的子集动态化。我仍然有一个与应用程序捆绑在一起的基本代码集,以及需要通过应用程序商店的本机插件j和本机代码。但这至少让我可以在不通过应用程序商店的情况下推送错误修复程序。

否则,我会查看这样的解决方案:http://docs.build.phonegap.com/en_US/tools_hydration.md.html

function insertScript(version) {
    var scriptUrl = "";
    try {
        // get javascript file...
        scriptUrl = mobileWebServiceUrl + "/DynamicContent/Bundles/Scripts/dynamic";

        scriptUrl += "_" + bundleVersion.replace(/\./g, "_") + ".js?v=" + version;

        console.log("downloading script: " + scriptUrl);

        // Allow user to set any option except for dataType, cache, and url
        options = {
            dataType: "script",
            cache: true,
            url: scriptUrl
        };

        // Use $.ajax() since it is more flexible than $.getScript
        // Return the jqXHR object so we can chain callbacks
        return $.ajax(options).success(function(response) {
            console.log("insertScript success");
            dynamicContentScriptLoaded = true;
        });


    } catch (e) {
        //console.error(e);
        ReportError("problem downloading javscript: " + scriptUrl);
    }

}


function insertCSS(version) {
    try {
        // get css file...
        var cssUrl = mobileWebServiceUrl + "/DynamicContent/Bundles/Css/dynamic";

        cssUrl += "_" + bundleVersion.replace(/\./g, "_") + ".css?v=" + version;

        console.log("downloading dynamic css: " + cssUrl);

        $.ajax(cssUrl)
            .success(function (response) {
                console.log("successfully downloaded dynamic css");
                var script = document.createElement("style");
                script.type = "text/css";
                script.innerHTML = response;

                $('head link').each(function () {
                    if ($(this).attr('href').search('MobileFrame') > -1) {
                        $("#MobileFrameCSS").before(script);
                    }
                });

                dynamicContentCssLoaded = true;

                // TODO: implement caching at a later date
                //if (isPhoneGap())
                //    saveFile("DynamicStyles", response);

            });
    } catch (e) {
        ReportError("problem downloading css");
    }

}

答案 3 :(得分:1)

嗯,Adobe在他们的Phonegap Build服务中提供了这项服务。它被称为Hydration

该示例显示将其与Android和iOS平台一起使用,因此我猜他们使其与iOS Dev Program许可协议兼容。

如果您正在使用Cordova,如果您想使用他们的构建云服务,您可能必须切换到Phonegap CLI,这与Cordova的基本相同,并且需要一些额外的命令才能上传到他们的云,等

我认为有一些像Splashscreen这样的插件也会有一些小的改动(使用<gap>将params用于config.xml而不是<preference>)。再次,如果Hydration为您解决了问题,那么更改很小,您将获得一个非常好的功能。

答案 4 :(得分:1)

我认为最好的选择是不要尝试使用Phonegap,而是确定您的动态部分并在Javascript中实现这些。

是的,我的意思是你应该在没有Phonegap的情况下自己使用Javascript,例如通过JavaScriptBridge: https://github.com/kishikawakatsumi/JavaScriptBridge

最初可能需要做更多工作才能将您的应用重新设计为静态&#34; part(你的PhoneGap应用程序)和动态部分(通过JavascriptBirdge动态创建的视图),以及它们之间的无缝交互。但在我看来,这将是最好的软件设计。

但是,请确保您仍然符合Apples AppStore的要求。

答案 5 :(得分:1)

Meteor框架与PhoneGap结合使用时可提供此功能。它在最新的开发者协议中甚至被Apple批准。以下是一些technical details,然后是some about Apple's view on it

答案 6 :(得分:0)

我认为没有这样的解决方案可用,但您可以通过编程方式完成。您可以通过从服务器获取文件并更新它来更新您的cardova应用程序。

答案 7 :(得分:0)

结帐CodePush from Microsoft。适用于Cordova和React Native。

似乎与Ionic Cloud的“实时更新”功能非常相似。