2.0.1 • Published 5 years ago

vk-hybrid v2.0.1

Weekly downloads
1
License
ISC
Repository
-
Last release
5 years ago

vk-hybrid APP桥协议SDK

GIT库地址

背景:

目前项目较多,不同团队可能在负责不同的项目,但每个项目中都使用了相同的接口与端通信。这些接口较为分散,没有复用性。
为了便于统一管理和及时更新端的通信能力,现将这些接口封装成NPM包,方便各个团队和业务线安装使用。

安装:

npm install vk-hybrid --registry=http://registry.vnpm.vipkid.com.cn

npm install http://registry.vnpm.vipkid.com.cn/vk-hybrid/download/vk-hybrid-版本号.tgz --save

当前最新版本是 2.0.1

一、基础能力

使用:

import {CommonBridge} from 'vk-hybrid'

//后退       
CommonBridge.historyBack()
  
//显示toast
ParentBridge.toastShow({
  text: '显示toast',
  duration: 1000 (可选,默认为2000)
})

app的基础信息

方法说明参数回调
appEnv获取native侧的基础信息有 内容为json串,如下
{
    uid:	设备id
    app:	app名称  study-iPad
    vn:	app三位版本号,字符串类型	  1.0.1
    vc:	app版本码,数字类型,根据四位版本号计算得出的
    os:	操作系统标识, iOS: i, android: a
    ovn:	操作系统名称	 iPhone OS
    ovc:	操作系统版本
    mod:	设备类型	 iPad3,1
    man:	设备制造商	 Apple
    dis:	屏幕宽高: height_width	 1024_768
    den:	屏幕密度	 2
    net:	网络类型
    aid:	app包名	 com.vipkid.study-iPad
    apn:	手机网络运营商
}

app暴露的方法

方法说明参数回调
appAvailable获取app可供JS调用的方法列表有 内容为json串,如下
{
    module1: [method1, method2, method3],
    module2: [method1, method2]
}

跳转页面

方法说明参数回调
appOpenUrl获取app可供JS调用的方法列表url: 必选参数,页面路径target:可选参数,为'_blank'时,页面会在native的新页面打开;\为'_self'或者未指定时,页面会在当前页面跳转

后退

方法说明参数回调
historyBackH5页面需要后退时调用此API,native判断webview容器是否可后退,如果可以后退,则调用容器的后退方法,如果不可以后退,则关闭当前页面(viewcontroller或者activity)

显示loading

方法说明参数回调
loadingStart显示native提供的loading

隐藏loading

方法说明参数回调
loadingStop隐藏native提供的loading

显示toast

方法说明参数回调
toastShow调用native的toast提示,可以指定提示文本及toast显示时长text: '要提示的文本内容'duration: 显示时间,默认2000 #单位毫秒

事件

事件名说明
pageShow1、页面第一次展示或者返回到该页面时触发2、v2.0.1版本开始支持
pageHide1、页面即将跳转到别的页面或者回退时触发2、v2.0.1版本开始支持
例:
    Common.on('pageShow', () => {
        //TODO
    })

二、家长端:

使用:

import {ParentBridge} from 'vk-hybrid'

调用方法:
    //打开相册
    ParentBridge.applyPermission({
      permissions: 'album|camera'
    })
      .then(res => {
        //TODO
      })
      .catch(err => {
        //TODO
      })

    //音频播放
    ParentBridge.audio.play({
      index: 0
    })

事件监听
    //iOS内购
    ParentBridge.on('innerPurchaseFinish', function(res){
        // TODO
    })

当前页面是否加载完成

方法说明参数回调
webLoadReady无 回调无需实际字段,只要有回调,即认为页面已加载成功

应用权限

方法说明参数回调
applyPermission1、查询应用是否拥有使用相应功能的权限,例如相册、相机、电话、通讯录2、iOS不支持电话和通讯录3、Android v1.10.1后开始支持permissions: (必选),album|camera|phone|contacts
applyScheme1、查询客户端有没有安装对应scheme的应用2、仅支持iOS3、2.7.0后开始支持scheme: (必选)
applyOpenScheme1、查询客户端有没有安装对应scheme的应用2、仅支持iOS3、2.7.0后开始支持installSchemeURL(必选):如果装了对应应用需要跳转的应用scheme的URLuninstallSchemeURL(非必选):如果没有安装对应应用需要跳转的URL,URL有两种情况,1.对应APP的appstore安装地址;2.空。为空时,若用户未装对应APP,则toast提示“跳转失败,请重试”。

音视频播放

方法说明参数回调
videoPlay1、android v1.9.0后开始支持url(必选参数):视频链接title(必选参数):视频播放页面标题start_time(必选参数):进入时开始播放的时间点,单位秒

电话

方法说明参数回调
phoneCall1、android v1.9.0后开始支持phone_number(必选参数):待拨打的电话号码

日历

方法说明参数回调
calendarSyncCourse1、添加事件到系统日历2、v2.9.0后开始支持studentId(必选参数):添加日历对应的学生id,用于筛选日历calendarData(必选参数):添加所有日历需要的数据,数组类型,如下有 如下
calendarData:
    [{
        title:日历的title,字符串类型
        location:日历位置信息,可以作为副标题,目前为空,字符串类型
        startDate:日历开始时间,毫秒时间戳
        endDate:日历结束时间,毫秒时间戳
        alarmArray:日历提醒的时间,数组中是提醒的分钟数
        notes:日历的备注,目前包括课程详细信息和课表短链,字符串类型
        onlineClassId:对应此节课的课程id(用于唯一标识日历)
    }]
    
回调:
    {
      "status":客户端同步状态结果
      "message": 失败信息,字符串,如果成功,传OK
    }
    日历状态同步结果:1xx
    权限状态同步结果:2xx
    
    101:课表已同步至手机日历
    102:课表同步失败,请刷新界面后重试
    103:暂无课表信息同步至日历
    104:尚未设定日历(iOS)
    201:日历权限申请失败,暂无法同步(Android)

Link分享

方法说明参数回调
shareLink1、v1.12.0后开始支持,接口中track和trackContent参数从v1.14.0版本开始支持 2、端dev包不支持分享功能,需要用release包title:必选参数;分享标题description:必选参数;分享描述thumbnail:必选参数;分享icon链接link:必选参数;分享链接channel:分享渠道;若不传或值非法,则会弹出分享模块的渠道选择页,供用户选择;分享渠道值说明见下表track:是否使用服务统计,若不传或值非法,默认为不使用统计;值为0,表示不使用;值为1,表示使用trackContent:使用服务统计时,用于扩展统计内容,可由调用方自行决定内容,最终会统一落到统计数据中有 如下
channel:
    wechat:微信好友
    moments:朋友圈
    sina:新浪微博
    qqzone:QQ空间
    
回调:
    {
      "result": 分享结果;值为0,表示分享成功;值为1,表示分享失败;值为2,表示分享取消;值为3,表示未知;
      "channel": 实际分享的渠道;值跟参数说明中的渠道值相对应,且值一致
    }
    

小程序分享

方法说明参数回调
shareWXApplet1、v2.5.1后开始支持title:分享的小程序名称,长度不能超过512字节desc:分享的小程序的描述,长度不能超过1KimgUrl:兼容旧版本节点的图片,小于32K,新版本优先使用WXMiniProgramObject的hdImageData属性link:用于兼容低版本的网页链接channel:如果不传就会调起客户端分享的四个按钮的View,非微信对话渠道都会以链接分享出去(分享到朋友圈(moment)、微博(sina)和QQ空间(qqzone))miniId:小程序原始id(登陆微信开放平台在绑定的小程序中有这个id)miniPath:小程序页面的路径(个人理解为跳转到小程序的哪个页面)miniHdImage:小程序节点高清大图,小于128KminiShareTicket:可选,布尔类型,是否需要通过分享打开小程序时获取到更多信息有 如下

图片分享

方法说明参数回调
shareImg1、android v1.9.0后开始支持imgUrl(必选参数):分享时对应的图片内容channel(可选参数):参数值为异常或不存在时,分享模块会弹出分享渠道选择界面,由用户主动选择分享渠道后进行分享。参数值存在且无异常时,分享模块会直接将数据分享到相应的渠道track(可选参数):为0时或不传,表示不使用服务端统计;为1时,表示使用服务端统计trackContent:不使用服务端统计时,参数被忽略。使用服务端统计时,字段值会作为统计信息上报给服务端记录

微信支付

方法说明参数回调
payWechat1、仅支持安卓系统2、v2.0.0后开始支持data:必传参数;实际支付数据,需参考Ping++相关支付细节有 如下
回调:
    {
      "result": 支付结果;值为0,表示支付成功;值为1,表示支付失败;值为2,表示支付取消;值为3,表示异常,
      "reason": 支付结果异常时的具体原因。 NOT_SUPPORT:渠道不支持;INVALID_PARAMS:参数错误;INVALID_DATA:数据错误;NOT_INSTALL:第三方应用未安装
    }
    

默认方式支付

方法说明参数回调
payDirect1、仅支持安卓系统2、v2.4.0后开始支持channel:必选参数;支付渠道,具体如下data:由订单组提供有 同payPingpp
channel:
    cmblife:掌上生活
    zl:招联(v2.5.0开始支持)
    webank:微众(v2.6.0开始支持,待测试,请勿直接使用,使用前联系 何行舟(R&D))
    baidu:百度钱包(v2.6.0开始支持,待测试,请勿直接使用,使用前联系 何行舟(R&D))
    

支付宝支付

方法说明参数回调
payAli1、仅支持安卓系统2、v1.14.0后开始支持有 同payPingpp

获取当前网络

方法说明参数回调
getNetType有 如下
{
  "netType": 当前网络状态。none(无网络);2g;3g;4g;wifi;other(其他)
}

用户登录

方法说明参数回调
userLoginphone:可选参数;跳转到登录页时,预填写的手机号loginType:必选参数;用户退出后,跳转到登录页时,选择是页面切换到短信登录/密码登录;值为sms时,表示短信登录;值为pwd时,表示密码登录;参数值不正确时,默认定位到短信登录有 如下
{
    "state": 用户若取消登录,则返回cancel;若登录成功,则返回success
    "channel": 用户是登录方式登录成功,则返回login;用户是注册的方式登录成功,则返回register
}

用户退出

方法说明参数回调
userLogout用户退出登录后,会跳转到登录页同userLogin

获取接口请求的必要字段

方法说明参数回调
userGetRequestInfo如下
未登录:
    {
        "vkSessionId":"xxxx"//当前使用的session id
    }
已登陆:
    {
        "parentId":"",//家长id
        "token":"xxxx",//当前用户token
        “studentId”:"",//当前孩子id
        "vkSessionId":"xxxx"//当前使用的session id
    }

标签栏

方法说明参数回调
tabbarVisibility接口仅支持在特定场景的WebView上调用,请确定好调用时机,接口调用将底部标签栏隐藏后,应该确保在无需隐藏底部标签栏时将底部标签栏设置为可见,确保APP后续其他业务逻辑正常isVisible:必选参数;是否可见function:必选参数;控制标签栏上具体某个标签页显示时,底部标签栏的可见性;例如,若值为booklist,则只在标签对应的约课页面时,底部状态栏根据isVisible的状态进行显示处理;默认情况下,所有标签对应的页面下,底部标签栏均为可见有 如下
{
  "result": 表示设置操作是否成功;若返回true,则表示设置成功;若返回false,则表示不支持相应的设置
}

点击事件埋点

方法说明参数回调
trackClick1、v2.5.0版本后开始支持2、iOS从2.7.0后开始支持3、clickId以及params中用到的字段都需要在上线前确认可以正确上传到神策,避免字段重复或者类型不匹配造成上传失败埋点确实clickId:点击事件id,神策记录使用params:其他需要统计到埋点的相关信息,采用字典结构

触发事件埋点

方法说明参数回调
trackTrigger1、v2.5.0版本后开始支持2、iOS从2.7.0后开始支持3、triggerId以及params中用到的字段都需要在上线前确认可以正确上传到神策,避免字段重复或者类型不匹配造成上传失败埋点确实triggerId:触发事件id,神策记录使用,神策记录使用params:其他需要统计到埋点的相关信息,采用字典结构

生命周期埋点

方法说明参数回调
trackPageview1、v2.5.0版本后开始支持2、pageName、pageEvent以及params中用到的字段都需要在上线前确认可以正确上传到神策,避免字段重复或者类型不匹配造成上传失败埋点确实pageName:统计用的页面标示,可以使用url或者独立配置event:页面生命周期节点,目前可用的有enter\exitparams:其他需要统计到埋点的相关信息,采用字典结构

显示升级提示

方法说明参数回调
upgradeShowTips仅支持安卓upgradeInfo: String 如下
{
    "data":"https://file.vipkid.com.cn/apps/vipkid_v2.5.1_33882368_default.apk",
    "message":"更新内容:\n1. 课表添加了取消约课按钮,一键取消预约\n2. 修复部分设备界面底部黑条问题\n3. 优化部分页面体验\n",
    "version":"33882368",
    "versionName":"2.5.1",
    "forceUpgrade":false,
    "slientDownload":false,
    "title":"有新版本啦",
    "titleApkExist":"新版本下载完啦",
    "negativeButtonTitle":"暂不升级",
    "positiveButtonTitle":"立即升级",
    "negativeButtonTitleApkExist":"暂不安装",
    "positiveButtonTitleApkExist":"立即安装",
    "apkMD5":"6fce8704ef9dc01bc0371ec7f971560b",
    "apkSize":"28M"
}

剪切板功能

方法说明参数回调
clipboardCopy1、调用系统剪切板的复制字符串功能2、v2.10.0版本后支持"content":"需要复制的字符串内容"有 如下
{
  "result":true
}

扫码功能

方法说明参数回调
scanOpenQR1、qr扫码能力页面 支持相机和相册2、目前仅支持单方面调用扫码能力,暂不支持获取扫码解析结果3、Android>=2.12.0 iOS>=2.12.0
{
   "result":true(或者false)
}

IM入口展示隐藏

方法说明参数回调
imEntry1、H5页面展示IM入口2、2.14.0及后开始支持status: 必选参数,'show'/'hide'eventId: H5页面对应的打点eventId值,详见PRD有 如下
{
  "result":200/400,
  "message":"OK"
}

ios内购

方法说明参数回调
innerPurchase1、接口仅iOS版本支持2、iOS>=2.12.0"productId": 必选参数,购买商品对应的商品ID有 如下
{
  "status":200, //发起购买时客户端的状态结果 200:客户端发起购买成功;500:客户端发起购买失败;501:客户端有之前未结束的购买
  "message":"OK" //失败信息,字符串,如果成功,传OK
}
事件名称事件说明回调参数
innerPurchaseFinish将iOS内购最终结果返回给H5有 如下
{
  "result":200, //内购最终结果情况 200:内购最终结果成功;500:内购最终结果失败
  "msg":"OK" //失败信息,字符串,如果成功,传OK
}

本地音频播放器

状态名称状态说明
ParentBridge.audio.ERROR播放器处于错误状态
ParentBridge.audio.STOPPED播放器处于停止状态
ParentBridge.audio.PAUSED播放器处于暂停状态
ParentBridge.audio.PLAYING播放器处于播放状态
ParentBridge.audio.READY播放器处于准备状态
ParentBridge.audio.CYCLE_MODE_ORDER'ORDER'----列表循环
ParentBridge.audio.CYCLE_MODE_SINGLE'SINGLE'----单曲循环
属性名称属性说明
ParentBridge.audio.currentSong当前歌曲信息 Object
ParentBridge.audio.currentList当前播放列表 Array
ParentBridge.audio.currentStatus当前播放状态 Number
ParentBridge.audio.currentCycleMode当前循环模式 String
方法名称方法说明参数回调
ParentBridge.audio.statusSync当前播放器状态。1、用来更新同步前端页面 2、未初始化也可以调用有,但无返回值
ParentBridge.audio.init初始化播放器接口1、每次初始化都以最新信息覆盖2、init接口调用后会将列表刷新并停止播放,列表一致性由业务通过3、statusSync接口获取当前播放信息进行判断后决定是否初始化,除statusSync接口外,其余所有功能接口需要调用init后才有效{targetUrl:"",//播放器跳转落地页面(version>=2.8.0) businessCode:"",//业务代码songsList:{//歌单列表storyId:11, //故事idcname:"", //歌曲中文名称ename:"", //歌曲英文名称cover:"", //封面urlaudio:"", //歌曲资源地址 }}有 如下
ParentBridge.audio.play开始播放任务 如果不传参数,则继续当前播放任务,如果当前处于播放状态,则无响应,如当前无播放任务切播放列表不为空,则播放第一首;如果传入序号,则切换指定歌曲播放,切换失败则继续播放当前任务{index: 0}
ParentBridge.audio.pause暂停播放任务 如果当前处于暂停,则无响应
ParentBridge.audio.close停止播放任务并关闭播放器 包括app内部展示模块、通知模块、锁屏模块
ParentBridge.audio.pre切换到上一首歌曲并开始播放 优先切换资源,而后开始加载播放
ParentBridge.audio.next切换到下一首歌曲并开始播放 优先切换资源,而后开始加载播放
ParentBridge.audio.getProgress获取播放进度 播放器处于关闭、错误状态时返回-1;其余状态返回当前进度,单位秒有 如下
ParentBridge.audio.setProgress变更当前播放任务的进度 1、播放状态中调整后在指定进度开始播放 2、暂停状态中调整后依然处于暂停状态 3、优先调整进度,而后开始加载播放{progress: 10}
ParentBridge.audio.setCycleMode歌单循环模式single:单曲循环;order:列表顺序循环(默认){mode: ""}
ParentBridge.audio.init的回调:
    {
      "result": true:表示初始化参数正确合法;false:表示初始化参数异常或者播放器初始化,
      "message": 错误信息
    }

ParentBridge.audio.getProgress的回调:
    {
    "progress":10// 播放进度
    }    
事件名称事件说明
startPlay开始播放事件
pausePlay暂停播放事件
completePlay播放完成事件
startLoad资源开始加载事件
endLoad资源结束加载事件
errorLoad资源加载失败事件
closePlay播放器关闭事件
unInit未初始化调用错误事件
errorParams传递参数错误
errorHandle播放器异常错误
例:
    ParentBridge.audio.on('startPlay', (msg) => {
        // TODO
    })
       

三、教师端:

使用:

import {TeacherBridge} from 'vk-hybrid'

//打开相册       
TeacherBridge.shareInfo({
  "title":"" 分享内容标题
  "desc":"" 分享内容描述
  "imgUrl":"", 分享图片链接
  "link":"",分享链接
})
  
//录音功能
TeacherBridge.record.startRecord({
  maxDuration: '20000'
})

录音功能

方法说明参数回调
startRecordH5通过native开始录音maxDuration:String,必选参数,录音时长有 内容为json串,如下
{
    "nativeType":"android",//设备
    "eventType":"", //事件类型(EVENT_NATIVE_RECORD_AMPLITUDE_UPDATE//录音音量振幅事件 EVENT_NATIVE_RECORD_COMPLETED //录音完成事件EVENT_NATIVE_RECORD_EXCEPTION //录音失败事件)
    "amplitude":XXXX,//录音音量振幅
    "filePath":"XXXX",//录音文件本地地址
    "errorCode":XXXX//录音失败错误码
}
方法说明参数回调
stopRecordH5通过native停止录音有 内容为json串,如下
{
    "nativeType":"android",//设备
    "filePath":"XXXX",//录音文件本地地址
}
方法说明参数回调
cancelRecordH5通过native 取消录音

媒体播放功能:

方法说明参数回调
startPlayH5通过native 开始播放
stopPlayH5通过native 停止播放
pausePlayH5通过native 暂停播放
resumePlayH5通过native 继续播放

上传功能

方法说明参数回调
startUploadH5通过native 开始上传有 如下
{
    "nativeType": "android", //设备
    "eventType": "",//事件类型(EVENT_NATIVE_UPLOAD_COMPLETED//上传完成事件
    EVENT_NATIVE_UPLOAD_EXCEPTION//上传失败事件)
    "fileInfo": {
        "fileUrl": "",
        "bucketName": "",
        "key": "",
        "teacherId": ""
    }
}
方法说明参数回调
cancelUploadH5通过native 取消上传
pauseUploadH5通过native 暂停上传
resumeUploadH5通过native 继续上传

分享

方法说明参数回调
shareInfoH5调用native分享功能支持link分享 link不能为空如下
{
    "title":"" 分享内容标题
    "desc":"" 分享内容描述
    "imgUrl":"", 分享图片链接
    "link":"",分享链接
}

选择视频等自运营相关功能

方法说明参数回调
feedSendH5 调起 APP 的选择视频弹窗,进而能够让老师录制视频或者从相册选择,最后压缩并上传视频,发送 feed如下
javascript:window.nativeCallBack() |
{
    “duration”: 视频时长限制,
    "framerate": 视频帧率,
    "coderate": 视频码率,
    "forbidconvert": 禁止转码,1禁止,0不禁止,
    "maxsize": 视频上传最大大小 MB,
    "exportLevel": iOS相册压缩质量(0、1、2)
    "title": 活动标题,
    "tag": 活动 tag,
    "activityId": 活动 ID
}

H5 检查 APP 权限

方法说明参数回调
checkCameraPermission检查是否有摄像头权限有 如下
requestCameraPermission弹窗申请摄像头权限有 如下
checkMicrophonePermission检查是否有麦克风权限有 如下
requestMicrophonePermission弹窗申请麦克风权限有 如下
checkExternalStoragePermission检查是否有外存储权限有 如下
requestExternalStoragePermission弹窗申请外存储权限有 如下
{
    code: 200/500,
    message: "xxxx"
}
注:200为申请成功,500为申请失败

page功能

方法说明参数回调
pageNavigation显示或隐藏导航栏有 show=true/false
pageClose关闭页面

recruit功能

方法说明参数回调
recruitCompleteQuiz客户端跳转H5链接的答题页,会加上字段app_support=false,成功提交该题答案之后,需要调用桥能力 vkappbridge://recruit/complete_quiz 来告知客户端,通知客户端跳转别的页面继续答题
2.0.1

5 years ago

2.0.0

5 years ago

1.2.34

5 years ago

1.1.4

5 years ago

1.1.3

5 years ago

1.0.4

5 years ago

1.3.2

5 years ago