移动应用,原生?Web?混合式?

近些年,随着移动互联网和移动设备的普及,基于原生环境的移动端开发方兴未艾。同时,web开发者也不甘寂寞。基于移动端浏览器开发可自适应多屏幕的web应用自然而然地出现了,各类已有网站迅速被移动化了。此时的web开发者和移动端原生开发者还算是泾渭分明,各自在各自擅长的领域辛勤搬砖。一个弄网站,一个弄app。
最近两三年,两者之间的界限开始被打破。当然,此类苗头和尝试出现得要更早。只是从15年开始,手机硬件的性能发展到了某种程度。这种程度足够帮助web开发者向原生的移动端开发者发起有威胁的挑战,这种挑战的载体就是混合式app。下面来一起看看原生app、web app、混合式app(native apps, web apps, hybrid apps)。
app开发的世界是一个令人兴奋的,但有时令人困惑的地方。应该选哪个类型的应用程序没有明确的答案。你的选择将取决于你的技能、预算和时间要求,还有对不同类型的应用程序的理解。
当我们开始考虑开发app的时候,要考虑一堆技术成本。ios和android有什么区别?原生、web、混合的app到底是什么?更重要的,哪个才是最适合你,以及你的app的?
基本概念
就目前而言,大多数移动设备都使用了两个主要操作系统之一:google开发的android(48.3%)和苹果开发的ios(41%)。 这些操作系统及其相关设备之间的区别不仅仅是美观:就像macbook不会运行windows应用程序一样,android手机至少不能运行为iphone构建的应用程序。随着智能手机的兴起,显然我们喜欢app。谷歌和苹果占主导地位,在可预见的未来内这并不会改变。
原生app
当说到app,通常想到的应该是原生app。你可以从苹果的app store、谷歌的google play、国内各种android应用商城下载,然后点击图标来启动。原生app是针对特定类型的设备进行设计和编码的。iphone的app是用objective-c,android的app用java编写。 每个移动平台为开发人员提供自己的开发工具,界面元素和标准化sdk。这可以让任何专业开发人员相对容易地开发一个原生app。以这种方式编写应用程序有很多优点:他们为用户提供最快,最可靠和最响应的体验。
他们可以直接利用设备的更广泛的功能,包括相机,麦克风,罗盘,加速度计和滑动手势。发布商可以利用推送通知,每当新的内容发布或需要注意时,都会提醒用户。 这是一个关键的参与方式。 你有机会不断吸引更多观众回来。
如果原生app设计良好,尊重每个平台的设计模式和标准,得到的好处不仅仅是直接访问设备的功能而已。它超越了android上的左对齐标题,而ios上的中心对齐标题,超越了每个平台上的用户交互设计有几百个小的差异。 换句话来说,原生app意味着应用体验直观,可以充分利用所在平台生态系统的支持,比较容易创建应用体验较好的app。
原生app的主要缺点是它不适用于其他类型的设备。 如果您在objective-c中为ios编写应用程序,则不会在android上运行。当构建多个平台时,因此开发本机应用程序可能相当昂贵,因为需要构建和维护多个单独的应用程序版本以适配不同的平台。对于开发人员来说,专门研究一个平台也是很常见的。因此,你需要准备多套人马。
如果预算允许,原生app是理想的,提供最佳的用户体验。
web app
web app有时被设计成类似原生app一样的外观和行为。这样做的目的有时候仅仅是因为原生app不是很合适或太贵。
web app使用javascript,css,html5或其他语言。开发人员没有标准化的sdk需要访问。开发web app简单快捷,但是它们的简单性也是它们的缺点。
有一些web app的推崇者坚持认为web app与原生app相同甚至更好。他们看重了成本和功能方面的灵活性。同事没有依赖于某种类型的硬件。
web app的功能有限,他们通常需要联网才能正常工作。它们更慢,直观性更差。web app为所有平台设计一次,因此在不同的平台上的交互和ui体验不能期待表现地就像是那个平台上的原生app一样(需要一样吗?)。
web app更难建立忠实的用户群。除非用户将其保存为书签,否则web app不会在主屏幕上找到对应的图标。即便保存为书签,也无法做到不断的提醒消息提醒。作为开发人员或发布商,你无法向用户发送通知以将其带回你的应用。很难互动。
此外,web app会失去一个重要的下载来源。原生app和混合app都可以在应用商城中被搜索和下载。直接影响到app的运营推广。
混合式app
鉴于原生app和web app之间的就是混合app。通常比原生app创建更快、更便宜,能比web app预期地更多。混合app是两个世界最好的吗?混合app的大部分是使用兼容的网络技术(如html5,css和javascript)构建的,与用于编写web应用程序的语言相同。同时通过本地代码来访问设备的硬件功能,能产生更精细的用户体验。对于原生app只使用原生代码而言,这种方法的优点是显而易见的:只有本地代码必须重新编写就能使应用在的不同类型的设备上工作。
混合app的优势在于它更快,更容易开发。维护也更容易,更改或增加平台的成本小。混合app不会像本机应用程序一样快,因为混合app都是基于各个平台的webview组件,也就是要取决于各自平台对网页的解析性能,也就是各自平台自带浏览器的性能。混合app领域有两个主要的玩家:phonegap/cordova和appcelerator titanium。 你可以创建html/css/javascript本地文件,将应用设计和构建为网站,然后使用cordova/titanium将其包装到移动应用程序中。
目测,目前phonegap/cordova更流行。
让混合app在每个平台上正常运行通常需要大量工作。在某些情况下,总成本可能与完全本地应用程序相当,从而使成本效益可以忽略不计。这一切都取决于你想要获得“原生用户体验”的距离或应用的难易程度。比如视频类应用就不太适合用混合app。新闻类应用就特别合适。
不过,混合app有一个很大的优势。建立在一个单一的基础上添加新功能,只要不涉及调用本地设备的硬件功能,多个版本的应用程序就能直接受益。相反,使用原生app,对于要增加的每个新功能,该功能将必须在每个平台上进行复制。
混合app的技术方案需要重点解决的关键问题是页面代码与操作系统(原生代码或接口)之间的交互问题。其次要考虑一个高性能的js工具或组件库。
什么是最好的?
不要骂我,这其实没有标准答案。这完全取决于你。没有一个适合所有人的完美答案。为你找到正确的应用程序可能是具有挑战性的。考虑您的主要目标、受众需求、开发人员的技能等等。
不过还是可以提一些参考。比如一个传统的有前台工程师的、擅长后台的项目开发团队,就可以选择混合式app。新闻类、电商类采用混合app是可行的,视频类和工具类(如输入法)更适合原生app。曾经做过一个司法类app,核心功能是通知发布和位置监控。前者用html做没问题,后者需要调用设备的硬件能力。另外ios在锁屏、后台运行等场景下的实时位置发送是个难题。android也有类似问题,必须通过原生代码来解决。所以混合式app比较适合。
参考:https://mobiloud/blog/native-web-or-hybrid-apps/
关于phonegap/cordova
phonegap是nitobi software公司创建的,2011年被adobe收购,然后被开源给apache。之后从phonegap中抽出核心代码,即phonegap的核心引擎,即为cordova,作为apache的顶级项目。
hbuldier/mui
目前国内在混合app解决方案上,难得地有一些建树。目前来说做的最好的是dcloud(数字天堂)。他们推出的解决方案包括:ide(hbuilder,基于eclipse)、页面与硬件设备的交互能力(5+runtime)、页面框架(mui)、创新(流应用)。这套解决方案目前已经比较成熟,并且开始逐渐形成了生态链。有培训机构在做hbuilder/mui的培训,甚至淘宝上也能搜到一些hbuilder教程,改天我们再详细来谈谈。 最后套用一句广告词,表扬一下dcloud:我们一直用它!