# hybrid

  • 移动端占大部分流量,已经远远超过 PC
  • 一线互联网公司都有自己的 App
  • 这些 App 中都有很大比例的前端代码

问题:

  • hybrid 是什么,为何用 hybrid
  • 介绍一下 hybrid 更新和上线的流程
  • hybrid 和 h5 的主要区别
  • 前端 js 和客户端如何通讯

# hybrid 是什么,为何使用 hybrid

  • hybrid 即 '混合',即前端和客户端的混合开发
  • 需要前端开发人员和客户端开发人员配合完成
  • 某些环节也可能涉及到 server 端
  • 可以快速迭代更新【关键】(无需 app 审核)
  • 体验流畅(和NA的体验基本类似)
  • 减少开发和沟通成本,双端公用一套代码

# webview

  • 是 app 中的一个组件(app 可以有 webview,也可以没有)
  • 用于加载 h5 页面,即一个小型的浏览器内核

# file 协议

  • file 协议:本地文件,快

  • http(s)协议:网络加载,慢

  • 不是所有的场景都适合使用 hybrid

  • 使用 NA:体验要求极致,变化不频繁

  • 使用 hybrid:体验要求高,变化频繁

  • 使用 h5:体验无要求,不常用

# 具体实现

  • 前端做好静态页面(html, css, js),将文件交给客户端
  • 客户端拿到前端静态页面,以文件的形式存储在 app 中
  • 客户端在一个 webview 中
  • 使用 file 协议加载静态页面

# 更新流程

  • 分版本,有版本号,如 201803211015
  • 将静态文件压缩成 zip 包,上传到服务端
  • 客户端每次启动,都去服务端检查版本号
  • 如果服务端版本号大于客户端版本号,就去下载最新的 zip 包
  • 下载完之后解压包,然后将现有文件覆盖

# hybrid 和 h5 区别

hybrid 缺点:

  • 开发成本高。联调、测试、查 bug 都比较麻烦
  • 运维成本高。

适用的场景:

  • hybrid: 产品的稳定功能,体验要求高,迭代频繁
  • h5: 单次的运营活动(如 xx 红包)或不常用的功能

# js 和 客户端 通讯

  • js 访问客户端能力,传递参数和回调函数
  • 客户端通过回调函数返回内容

# schema 协议简介和使用

/* 网上搜的微信的部分 schema 协议 */

weixin://dl/scan    扫一扫
weixin://dl/feedback    反馈
weixin://dl/moments    朋友圈
weixin://dl/settings    朋友圈
weixin://dl/nofifications   消息通知设置
weixin://dl/chat     聊天设置
weixin://dl/general    通用设置
weixin://dl/officialaccounts   公众号
weixin://dl/game   游戏
weixin://dl/help   帮助
weixin://dl/profile   个人信息
weixin://dl/features   功能插件
1
2
3
4
5
6
7
8
9
10
11
12
13
14

简单演示:

var iframe = document.createElement('iframe')
iframe.style.display = 'none'
iframe.src = 'weixin://dl/scan'
var body = document.body || document.getElementByTagName('body')[0]
body.appengChild(iframe)

setTimeout(function () {
  body.removeChild(iframe)
  iframe = null
})
1
2
3
4
5
6
7
8
9
10
window['_weixin_scan_callback'] = function (result) {
  alert(result)
}

iframe.src = 'weixin://dl/scan?k1=v1&k2=v2&callback=_weixin_scan_callback'
1
2
3
4
5