[关闭]
@andrewwang 2017-03-17T18:29:52.000000Z 字数 3116 阅读 908

天山

技术 框架


think

why

传统HTML5相比app原生效果不佳的窗体切换、长列表滚动、下拉刷新、大容量选项卡切换等,导致体验不流畅。
各种渠道层出不穷。

how

APP:加载tianshan的SDK。
微信:加载提供的js文件,修改配置。

what(功能)

  • 一套资源包同时支持app(iOS, Android),微信,手机浏览器。
  • 资源包可以静默/提醒升级
  • 欢迎页动态更新
  • 原生功能:手机设备信息(唯一号)、系统信息、网络信息/变化,地理位置,拍照,语音输入,本机存储等。
  • android原生功能:设备按键(返回,退出)
  • 业务功能:第三方授权登录(微信,QQ),第三方分享(微信等),支付(微信,支付宝),条码扫描/输入,外部App打开(如打开支付宝app)
  • 支持本地/远程内容访问(二选一):资源包(html),远程网址。

架构

应用app

信息

配置

组件自定义

后端接口自定义

js接口扩展(后续提供)

系统设置

系统权限

资源包

结构

天山库

结构

  1. getLocation() {
  2. this.locationService.get();
  3. }

方案

功能

App原生

功能 说明
地址定位
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。

远程网址原理

远程网址配置后,版本检查相关的配置和流程都无需执行
原生功能不能调用

后退(android)

  1. if (双击)
  2. 退出系统
  3. if (远程) {
  4. 浏览器后退
  5. } else { // 本地
  6. 调用js接口
  7. }

流程

App端

手动升级资源包

H5触发App方法
1. 用户点击升级资源包,触发本地手动更新资源包方法。
App执行更新
2. App请求资源包接口,检查是否有版本更新

  1. if(YES){
  2. //提示用户正在下载更新包
  3. //下载完成后,重新加载更新包
  4. }else{
  5. //提示用户已经是最新版本
  6. }

资源包升级方案

资源包下载、解压、运行目录

初始目录(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
加载首页(iOS)
安卓
此处输入图片的描述

欢迎页可以动态更新(app端流程)

  1. 请求资源包更新接口后,得到服务器返回的数据;
  2. 根据接收到的数据做相应处理;

    1. if(haveUpdate){
    2. //1.下载欢迎页图片至指定目录
    3. //2.更新appIsFirstOpen = YES;
    4. //3.下次启动显示新的欢迎页
    5. }

远端页面转换成本地页面

1.原理:通过拦截包含特定字符串的URL,替换成本地的URL地址,加载替换后的URL
2.本地的URL地址: 
                ios:运行目录(RD)地址+index.html;
                Android:持久化目录(PD)地址+index.html;

安卓自动升级

  1. App启动,请求App更新接口
  2. 如果有更新,弹出提示框提示用户更新。

同步支付

App支付成功后,App将微信客户端返回的信息传给服务端,服务端使用这些信息去请求微信服务器,判断是否支付成功。

欢迎页页面显示

  1. App启动,读取本地 appIsFirstOpen;
  2. 2.
  1. if(appIsFirstOpen == YES || appIsFirstOpen == NULL){
  2. //显示欢迎页面;
  3. //设置appIsFirstOpen = NO;
  4. //持久化存储appIsFirstOpen;
  5. }
  1. 欢迎页消失,加载首页;

后端

后端资源包升级流程

  1. app请求资源包更新接口,传入参数LV;
  2. 服务端获取到AV、FV,通过与LV比较,返回给App相应参数。

    1. if(LV<AV){
    2. isLatest = ture;
    3. if(LV<FV){
    4. isForce = ture;
    5. }else{
    6. isForce = false;
    7. }else{
    8. isLatest = falese
    9. }
    10. }
  3. App接收到参数进行相应处理。

欢迎页可以动态更新(服务端流程)

  1. 如果欢迎页有更新,则返回的数据为

    1. {
    2. haveUpdate = YES;
    3. imageURL = {
    4. url1 = " ";
    5. url2 = " ";
    6. ...
    7. }
    8. }

使用TODO

说明

功能所需的系统权限清单

如网络功能需要开网络权限

步骤

参考

app升级:编辑查看
app原生功能清单

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注