Hybrid App

Web的好处,回望从CS到BS时代,再看看App到H5的过渡,何其相似。

  • 开发成本低,分发速度快
  • 同平无关
  • 可以有多个入口导流(微信、微博)
  • 无需下载(微信扫码)

随着微信、支付宝在Hybrid App上的实践,培养了很多人的习惯,也让人看到一些信心(Facebook的教训)。

无论是微信还是支付宝,所用的方式无非两种,H5 的资源是嵌入在 Native App 本身,还是在打开一个Remote的页面。

找了下,也没有很好的全名方式,叫姑且叫 Embeds App in AppServer-side Apps

Codava 的方式并不是很推荐,被绑在一个很不靠谱的架子上的感觉非常不好。

开发框架

框架不是重点,这里只是小提一下。

  • Backbone + Ratchet
  • RequireJS + AngularJS + Ratchet

一直是BB的拥护者,觉得这就是把瑞士军刀,小而美,用来做Mobile Web是最适合的。后来在处理Nested Model的问题上,花了太多时间,转而尝试了下AngularJS。作为一个后端出身的开发者,完全被感动了,无论是依赖注入,还是分层,Service,Filter… 配合着RequireJS的模块化,就像之前学习的东西又回来了,而不是在纠结于JS的那些原型链继承,回调语法等基础问题。(更像是博世的工具箱,重量级)

但AngularJS 确实有点大,用来做Mobile Web,还没有更多评测。

1. Embeds App in App

所谓的嵌入式App,就是指 H5 的资源是打包在 Native 中的,像微信的钱包一块,支付宝的首页功能块。

这种的好处就是,响应速度快,可以立即展示内容给用户,可以处理更沉重的工作。H5 和 Native 能更方面的通讯。

缺点是,升级麻烦,因为是嵌入在App内部,升级还要通过苹果。(支付宝做了一些尝试,把功能用H5做成插件形式,通过下载进行更新。)

App in App 的数据,是由Web直接发送。还是由App 拦截,统一发送?

2. Server-side Apps

有时见到的更像是一些简单的页面,没有复杂的交互。但这里所指的是那些类似于App操作的Mobile App,并且和App本身融为一体的。

放在远程的好处,最大莫过于自由升级,而且4G时代,网络的问题已不像之前那般严重。所以越来越多的应用偏向于使用这种模式。

安全与 OAuth

在定义完这常见的两种情况后,有一个很严肃的问题:安全。

如何来做到 H5 App的安全呢?

在模式一中,H5 App数据请求可以有2种处理方式:

  1. 统一被 Native 拦截,统一处理。
  2. 直接发送请求和API交互,而Token,则由专门的 SessionManage 处理。

模式二中,比较麻烦

首先要打开一个Web,由Web再去请求数据。

常见的做法是用OAuth,由Web向API申请验证,但这样会多出一步,除非是第三方App,否者不会这样做。

或者是在打开Web时,在参数中标名Token,但若遇到 Refresh Token 过期,又如何刷新,同时将新的Token同步到Native App(有可能不需要同步,Native 也会自动更新。)

Question #1 - In this HYBRID approach, in case of single and multiple domains, how the session is managed between Native. Here single domain means, both Web and Native are using same server, where as multiple domains means, the Native and Web are using different servers.

Question#2 - How Native knows about session timeout happens in Web?

REF::