Подтвердить что ты не робот

Кордова/Телефонная связь: Онлайн-код обновления

Мы используем Cordova вместе с AngularJS для приложений iOS и Android.

Одним из больших недостатков iOS являются длительные времена обзора Apple. В Google Playstore ваше приложение доступно почти сразу или через несколько часов. Но Apple занимает много времени, чтобы просмотреть ваше приложение, даже если это небольшое изменение.

Итак, я думал, если есть способ поддержать какое-то живое обновление.
Это означает, что я могу предоставить ZIP файл или что-то еще с новой базой кода, мое приложение проверяет наличие обновлений и затем устанавливает новые файлы.

Я прочитал что-то из appmobi, но есть ли какие-либо решения с открытым исходным кодом?

4b9b3361

Ответ 1

cordova-app-loader - это простой в использовании плагин для обновления файлов приложений с помощью 3 простых шагов:

  • check() для нового манифеста
  • download() файлы
  • update() ваше приложение!

Он поддерживает Android и iOS

Ответ 2

Я не знаю каких-либо готовых решений для этого, но должно быть достаточно просто запрограммировать что-то подобное самостоятельно. Вот несколько моментов, которые помогут вам начать и подумать:

  • Если вы хотите распространять обновления через zip, вам нужен плагин nativ, который обрабатывает извлечение
  • Возможно, вы не сможете переопределить файлы по умолчанию вашего приложения (в зависимости от ОС). Таким образом, все файлы, которые вы хотите обновить в будущем, должны находиться в папке, в которой ваше приложение имеет доступ для чтения/записи (папка iOS: например, Library или Documents).
  • Теперь вам просто нужно скачать zip-пакет, распаковать zip в выбранный вами каталог и перезагрузить/перезагрузить приложение.
  • вы не сможете обновлять собственные плагины!
  • Apple, вероятно, не нравится, поскольку вы можете изменить все приложение без передачи их обзорный процесс

Ответ 3

Я делаю это внутри своего приложения cordova и не имел никаких проблем с обзором магазина приложений ios.

Я использую функцию jquery ajax для загрузки как javascript, так и файла css с сервера, который я могу изменить без утверждения магазина приложения, и затем я могу вставлять эти сценарии после их загрузки при запуске приложения.

Я попытался использовать файл cordova File api, а затем сохранил файл локально, но автономная поддержка не важна для меня в данный момент, и Jquery ajax намного проще.

Вот код jquery, который я использую. У меня есть идентификатор пакета, который я использую, чтобы определить, доступен ли новый файл javascript, иначе jquery ajax кэширует предыдущие запросы, чтобы ускорить время загрузки.

Это решение позволяет вам подмножество вашего кода быть динамическим. У меня все еще есть базовый набор кода, который поставляется вместе с приложением, а также собственный плагин js и собственный код, который нужно будет пройти через магазин приложений. Но это, по крайней мере, позволяет мне исправлять ошибки, не проходя через магазин приложений.

В противном случае я бы посмотрел на такое решение: 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");
    }

}

Ответ 4

Ну, Adobe предлагает именно эту услугу в своей службе Phonegap Build. Он назывался Hydration.

В этом примере показано использование его на платформах Android и iOS, поэтому я думаю, они сделали его совместимым с лицензионным соглашением программы iOS Dev.

Если вы используете Кордову, вам, вероятно, придется переключиться на CLG Phonegap, если вы хотите использовать свои службы облачных сервисов, которые в основном такие же, как в Кордове, с некоторыми дополнительными командами для загрузки в их облако и т.д.

Я думаю, что есть некоторый плагин, такой как Splashscreen, у которого также есть некоторые незначительные изменения (используя <gap> для params в config.xml вместо <preference>). Опять же, если Hydration решает проблему для вас, изменения незначительны, и вы получаете действительно приятную функцию.

Ответ 5

Я думаю, что лучшим выбором было бы не пытаться сделать это с помощью Phonegap, а скорее идентифицировать ваши динамические части и реализовать их в Javascript.

Да, я имею в виду, что вы действительно должны использовать Javascript самостоятельно без Phonegap, например, через JavaScriptBridge: https://github.com/kishikawakatsumi/JavaScriptBridge

Первоначально может потребоваться большая работа по перепроектированию вашего приложения в "статичную" часть (ваше приложение PhoneGap) и динамическую часть (динамические созданные представления через JavascriptBirdge) и без разбора между ними. Но, на мой взгляд, это, в конечном счете, лучший дизайн программного обеспечения.

Однако также убедитесь, что вы все еще встречаете требования App Store App.

Ответ 7

Я думаю, что такого решения нет, но вы можете сделать это по программному пути. Вы можете обновить свое приложение cardova, извлекая файлы с сервера и обновляя его.

Ответ 8

Откажитесь от CodePush от Microsoft. Работает с Кордовой и Реагирующей Родной.

Появляется очень похоже на функцию "живого обновления" от Ionic Cloud.