我正在使用Phonegap,HTML5和Web服务创建移动应用程序。这将针对Android和iOS(Ipad和Iphone)设备。HTML5移动应用程序的版本控制方法
我需要使用什么方法来版本化移动应用程序和服务?如果应用程序和Web服务都以1.0版本开头,那么
- 我是否应该为它们同时安装两个新版本?
- 如果用户忽略新版本并且未执行更新,是否需要维护旧版本的服务?
- 如果是(2),我会保留旧版本多久?
- 有没有办法强制用户进行应用升级?
任何帮助表示赞赏。
我正在使用Phonegap,HTML5和Web服务创建移动应用程序。这将针对Android和iOS(Ipad和Iphone)设备。HTML5移动应用程序的版本控制方法
我需要使用什么方法来版本化移动应用程序和服务?如果应用程序和Web服务都以1.0版本开头,那么
任何帮助表示赞赏。
不是一个真正的办法强迫用户的其他升级则包括检查自己的服务器上的东西,看是否有可用的更新(如检查sometype。这时候的清单文件)
我个人的经验,JS文件是要在两个平台上保持尽可能多的代码,因此您不必为两者都编写代码。而且你永远无法摆脱旧版本的野性。但我通常在12个月后停止支持旧版本。
1)服务器和应用程序版本不一定要相同。事实上,他们应该独立发展。 Semver就什么时候碰撞版本号提供了一个很好的指导。
2,3)。理想情况下,您应该设计服务,使其处理优雅的旧版本。但是如果你真的不得不弃用一些功能,你是唯一可以决定什么时候这样做的人。
4)您可能会拒绝较旧的客户端与您的服务器进行交互,但会向客户端提供一条有意义的错误消息,指示用户进行升级。
通过应用程序缓存,您的应用程序也可以脱机访问,并且可以轻松创建新更新并强制用户更新(如果他们在线)。
如果您使用此方法,则应该保持两个平台上的版本号一致。您将能够通过此方法强制更新,因此维护旧版本用户的需求将消失。要回答#3,我认为在分析用户群并得出结论后,这取决于您。
在应用程序缓存中,所有资产都必须加载或将失败,因此请注意您在缓存清单中声明的内容。我建议只列出静态资产。
了解更多关于HTML应用程序缓存:http://www.html5rocks.com/en/tutorials/appcache/beginner/
该解决方案是在前端,所以你将不得不使用JavaScript来管理版本和应用程序缓存。
为了检测JS应用程序下面的代码块将检测新版本时,用户加载应用程序:
window.addEventListener('load', function(e) {//NOTICE this only fires on page load, you can put this in a setInterval, if you'd like
if (window.applicationCache) { //Application cache is supported
window.applicationCache.addEventListener('updateready', function(e) {
//Listening for an updated cache
if (window.applicationCache.status == window.applicationCache.UPDATEREADY) {
window.applicationCache.swapCache();
if (confirm('A new version of this site is available. Load it?')) {
//If user accepts new version of site, it will reload the site.
window.location.reload();
}
} else {
return;
}
}, false);
}
}, false);
它会简单地问,如果用户希望加载网站的新版本不过既然你想强制更新用户,你可以修改这个样子:
window.addEventListener('load', function(e) {//NOTICE this only fires on page load, you can put this in a setInterval, if you'd like
if (window.applicationCache) { //Application cache is supported
window.applicationCache.addEventListener('updateready', function(e) {
//Listening for an updated cache
if (window.applicationCache.status == window.applicationCache.UPDATEREADY) {
window.applicationCache.swapCache();
//Force update a user when a new version becomes available
window.location.reload();
}, false);
}
}, false);
任何在您的应用程序缓存清单将创建应用程序的新版本的变化,例如,如果您的清单是这样的:
CACHE MANIFEST
#Version 1.0
game.html
assets/css/style.css
NETWORK
*
...并且将其更改为:
CACHE MANIFEST
#Version 1.0
#I love cupcakes and candy
game.html
assets/css/style.css
NETWORK
*
你会自动创建应用程序的新版本。
据我所知,这将是一个很好的解决方案来解决您的问题,但我确实听到有一些工作要做,以使其在Android上工作(下面的链接)。
PhoneGap的应用程序缓存教程:http://tmkmobile.wordpress.com/2012/03/04/html5-offline-solution/
1)如果我有在同一时间对他们俩的新版本?
不是。每个平台都应该有它自己的版本号。如果你有一个只发生在iOS上的错误呢?你会碰到Android版本吗?听起来不太好。我发现非常有用的是为每个版本和每个平台保留一个简单的日期图表,并对其进行重点更改。
2)如果用户忽略新版本并且没有进行更新,是否需要维护旧版本的服务?
你应该提前计划,避免“突变”,所以如果用户有一个旧版本,它仍然会工作。有时你无法避免它,你需要弃用一些东西,但是你应该保留它们。
3)如果对于(2)是,我会保留旧版本多久?
如果您绝对有重大变化,请保留旧版本,直到您确定大多数用户在删除时不会受到影响。一再警告他们正在使用的版本会很快停止工作,他们应该进行升级。
4)有没有办法强制用户进行应用升级?
在你的api调用中发送客户端版本号,根据这个数字你可以做任何你喜欢的事情。您可以发送一条消息告诉用户,除非他们进行更新,否则他们不能继续前进。
要展开第4点,您应该始终将未来的错误消息功能构建到将要发布的早期版本的软件中。所有使用案例和测试案例都不可能事先知道,因此在这些情况发生时有一个回退。如果使用服务尝试从那里获取错误消息,但在应用中还有一条回退错误消息,指示用户使用旧版本进行升级。 – 2013-06-18 15:10:54
类似[HTTP API的问题详细信息](http://tools.ietf.org/html/draft-nottingham-http-problem)非常适合面向未来的错误消息传递能力。 – 2013-06-18 15:40:37