@andrewwang
2017-03-17T10:29:52.000000Z
字数 3116
阅读 1620
技术 框架
传统HTML5相比app原生效果不佳的窗体切换、长列表滚动、下拉刷新、大容量选项卡切换等,导致体验不流畅。
各种渠道层出不穷。
APP:加载tianshan的SDK。
微信:加载提供的js文件,修改配置。
- 一套资源包同时支持app(iOS, Android),微信,手机浏览器。
- 资源包可以静默/提醒升级
- 欢迎页动态更新
- 原生功能:手机设备信息(唯一号)、系统信息、网络信息/变化,地理位置,拍照,语音输入,本机存储等。
- android原生功能:设备按键(返回,退出)
- 业务功能:第三方授权登录(微信,QQ),第三方分享(微信等),支付(微信,支付宝),条码扫描/输入,外部App打开(如打开支付宝app)
- 支持本地/远程内容访问(二选一):资源包(html),远程网址。
系统权限
getLocation() {this.locationService.get();}
| 功能 | 说明 |
|---|---|
| 地址定位 | |
| App支付 | 微信支付流程图 支付宝支付流程图 |
| 第三方分享 | 微信,QQ |
| 自动升级 | Android特有 |
| 系统响应-后退 | Android特有 |
| 资源包升级 | 包含强制升级 |
| 手动升级资源包 | |
| 清除缓存 | 接口文档未制定 |
| 图片选择 | 拍照或者相册。单选多选,单选编辑 |
| 二维码获取 | 扫描或者手工输入 |
| 获取通讯录 | 接口待完善,应考虑两种情况:授权访问通讯录和未授权访问通讯录 |
| 支付同步返回的处理 | |
| 获取设备唯一号 | 接口文档未制定 |
| 欢迎页可以动态更新 | 暂时只支持安卓 |
| 远端页面转换成本地页面 | |
| 欢迎页页面显示 | |
| app内外部地址跳转 | 主要用于启动外部app,如支付宝 |
| 外部启动App,带参数 | 主要用于浏览器启动App |
| 推送通知 | 极光 |
| 功能 | 说明 |
|---|---|
| 页面更新 | 后端资源包升级流程 |
| App升级 | Andriod的自动升级 |
| 欢迎页更新 |
当前情况:tianshan有对应后端接口的业务类BeService,使用了接口IBeApi(对应后端接口)
BeService有所有业务和流程,无接口实现。
应用app定制步骤
1. 创建CustomBeApi,实现接口IBeApi。
2. 将CustomBeApi注入到tianshan。
当前情况:tianshan的组件UpgradeDlg,实现接口IUpgradeDlg
应用app定制步骤
1. 创建CustomUpgradeDlg,实现接口IUpgradeDlg。
2. 将CustomUpgradeDlg注入到tianshan。
远程网址配置后,版本检查相关的配置和流程都无需执行
原生功能不能调用
if (双击)退出系统if (远程) {浏览器后退} else { // 本地调用js接口}
H5触发App方法
1. 用户点击升级资源包,触发本地手动更新资源包方法。
App执行更新
2. App请求资源包接口,检查是否有版本更新
if(YES){//提示用户正在下载更新包//下载完成后,重新加载更新包}else{//提示用户已经是最新版本}
初始目录(SD)
持久化目录(PD)
资源包存放名称:page.zip
配置项:首页文件名字:index.html
- LPF存放在PD
- 资源包解压路径为:PD/page
- 程序第一次运行时,将资源包从SD拷贝到PD.
iOS
- 每次进入程序检查RD目录是否有首页文件,不存在则从PD的对应目录拷贝至RD
- 运行目录(iOS特有):WebView加载资源包的路径tmp/www
安卓
- 安卓只有PD,没有RD,即PD和SD是同一个目录,每次WebView从PD加载资源包。
资源包升级流程
app当前所用的资源包版本:LV(localVersion)
app当前下载成功的资源包版本DV(downloadVersion)
请求更新接口后,服务器返回的资源包版本AV(apiVersion)
强制更新版本号FV(forceVersin)
流程图
ios
安卓

根据接收到的数据做相应处理;
if(haveUpdate){//1.下载欢迎页图片至指定目录//2.更新appIsFirstOpen = YES;//3.下次启动显示新的欢迎页}
1.原理:通过拦截包含特定字符串的URL,替换成本地的URL地址,加载替换后的URL
2.本地的URL地址:
ios:运行目录(RD)地址+index.html;
Android:持久化目录(PD)地址+index.html;
App支付成功后,App将微信客户端返回的信息传给服务端,服务端使用这些信息去请求微信服务器,判断是否支付成功。
if(appIsFirstOpen == YES || appIsFirstOpen == NULL){//显示欢迎页面;//设置appIsFirstOpen = NO;//持久化存储appIsFirstOpen;}
服务端获取到AV、FV,通过与LV比较,返回给App相应参数。
if(LV<AV){isLatest = ture;if(LV<FV){isForce = ture;}else{isForce = false;}else{isLatest = falese}}
如果欢迎页有更新,则返回的数据为
{haveUpdate = YES;imageURL = {url1 = " ";url2 = " ";...}}
如网络功能需要开网络权限