Ответ 1
cordova-app-loader - это простой в использовании плагин для обновления файлов приложений с помощью 3 простых шагов:
-
check()
для нового манифеста -
download()
файлы -
update()
ваше приложение!
Он поддерживает Android и iOS
Мы используем Cordova вместе с AngularJS для приложений iOS и Android.
Одним из больших недостатков iOS являются длительные времена обзора Apple. В Google Playstore ваше приложение доступно почти сразу или через несколько часов. Но Apple занимает много времени, чтобы просмотреть ваше приложение, даже если это небольшое изменение.
Итак, я думал, если есть способ поддержать какое-то живое обновление.
Это означает, что я могу предоставить ZIP файл или что-то еще с новой базой кода, мое приложение проверяет наличие обновлений и затем устанавливает новые файлы.
Я прочитал что-то из appmobi, но есть ли какие-либо решения с открытым исходным кодом?
cordova-app-loader - это простой в использовании плагин для обновления файлов приложений с помощью 3 простых шагов:
check()
для нового манифестаdownload()
файлыupdate()
ваше приложение!Он поддерживает Android и iOS
Я не знаю каких-либо готовых решений для этого, но должно быть достаточно просто запрограммировать что-то подобное самостоятельно. Вот несколько моментов, которые помогут вам начать и подумать:
Я делаю это внутри своего приложения 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");
}
}
Ну, Adobe предлагает именно эту услугу в своей службе Phonegap Build. Он назывался Hydration.
В этом примере показано использование его на платформах Android и iOS, поэтому я думаю, они сделали его совместимым с лицензионным соглашением программы iOS Dev.
Если вы используете Кордову, вам, вероятно, придется переключиться на CLG Phonegap, если вы хотите использовать свои службы облачных сервисов, которые в основном такие же, как в Кордове, с некоторыми дополнительными командами для загрузки в их облако и т.д.
Я думаю, что есть некоторый плагин, такой как Splashscreen, у которого также есть некоторые незначительные изменения (используя <gap>
для params в config.xml вместо <preference>
). Опять же, если Hydration решает проблему для вас, изменения незначительны, и вы получаете действительно приятную функцию.
Я думаю, что лучшим выбором было бы не пытаться сделать это с помощью Phonegap, а скорее идентифицировать ваши динамические части и реализовать их в Javascript.
Да, я имею в виду, что вы действительно должны использовать Javascript самостоятельно без Phonegap, например, через JavaScriptBridge: https://github.com/kishikawakatsumi/JavaScriptBridge
Первоначально может потребоваться большая работа по перепроектированию вашего приложения в "статичную" часть (ваше приложение PhoneGap) и динамическую часть (динамические созданные представления через JavascriptBirdge) и без разбора между ними. Но, на мой взгляд, это, в конечном счете, лучший дизайн программного обеспечения.
Однако также убедитесь, что вы все еще встречаете требования App Store App.
Структура Meteor обеспечивает именно эту функциональность в сочетании с PhoneGap. Он даже санкционирован Apple в последнем соглашении разработчиков. Вот некоторые технические детали, а затем некоторые о представлении Apple на нем.
Я думаю, что такого решения нет, но вы можете сделать это по программному пути. Вы можете обновить свое приложение cardova, извлекая файлы с сервера и обновляя его.
Откажитесь от CodePush от Microsoft. Работает с Кордовой и Реагирующей Родной.
Появляется очень похоже на функцию "живого обновления" от Ionic Cloud.