npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

vk-hybrid

v2.0.1

Published

与APP通信的桥协议SDK

Downloads

18

Readme

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'或者未指定时,页面会在当前页面跳转 | 无 |

后退

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

显示loading

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

隐藏loading

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

显示toast

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

事件

| 事件名 | 说明 | | :------| :------ | | pageShow | 1、页面第一次展示或者返回到该页面时触发2、v2.0.1版本开始支持 | | pageHide | 1、页面即将跳转到别的页面或者回退时触发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 | 无 | 无 | 无 回调无需实际字段,只要有回调,即认为页面已加载成功 |

应用权限

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

音视频播放

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

电话

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

日历

| 方法 | 说明 | 参数 | 回调 | | :------| :------ | :------ | :-----: | | calendarSyncCourse | 1、添加事件到系统日历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分享

| 方法 | 说明 | 参数 | 回调 | | :------| :------ | :------ | :-----: | | shareLink | 1、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": 实际分享的渠道;值跟参数说明中的渠道值相对应,且值一致
    }
    

小程序分享

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

图片分享

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

微信支付

| 方法 | 说明 | 参数 | 回调 | | :------| :------ | :------ | :-----: | | payWechat | 1、仅支持安卓系统2、v2.0.0后开始支持 | data:必传参数;实际支付数据,需参考Ping++相关支付细节 | 有 如下 |

回调:
    {
      "result": 支付结果;值为0,表示支付成功;值为1,表示支付失败;值为2,表示支付取消;值为3,表示异常,
      "reason": 支付结果异常时的具体原因。 NOT_SUPPORT:渠道不支持;INVALID_PARAMS:参数错误;INVALID_DATA:数据错误;NOT_INSTALL:第三方应用未安装
    }
    

默认方式支付

| 方法 | 说明 | 参数 | 回调 | | :------| :------ | :------ | :-----: | | payDirect | 1、仅支持安卓系统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))
    

支付宝支付

| 方法 | 说明 | 参数 | 回调 | | :------| :------ | :------ | :-----: | | payAli | 1、仅支持安卓系统2、v1.14.0后开始支持 | 无 | 有 同payPingpp |

获取当前网络

| 方法 | 说明 | 参数 | 回调 | | :------| :------ | :------ | :-----: | | getNetType | 无 | 无 | 有 如下 |

{
  "netType": 当前网络状态。none(无网络);2g;3g;4g;wifi;other(其他)
}

用户登录

| 方法 | 说明 | 参数 | 回调 | | :------| :------ | :------ | :-----: | | userLogin | 无 | phone:可选参数;跳转到登录页时,预填写的手机号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,则表示不支持相应的设置
}

点击事件埋点

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

触发事件埋点

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

生命周期埋点

| 方法 | 说明 | 参数 | 回调 | | :------| :------ | :------ | :-----: | | trackPageview | 1、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"
}

剪切板功能

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

{
  "result":true
}

扫码功能

| 方法 | 说明 | 参数 | 回调 | | :------| :------ | :------ | :-----: | | scanOpenQR | 1、qr扫码能力页面 支持相机和相册2、目前仅支持单方面调用扫码能力,暂不支持获取扫码解析结果3、Android>=2.12.0 iOS>=2.12.0 | 无 | 有 |

{
   "result":true(或者false)
}

IM入口展示隐藏

| 方法 | 说明 | 参数 | 回调 | | :------| :------ | :------ | :-----: | | imEntry | 1、H5页面展示IM入口2、2.14.0及后开始支持| status: 必选参数,'show'/'hide'eventId: H5页面对应的打点eventId值,详见PRD| 有 如下 |

{
  "result":200/400,
  "message":"OK"
}

ios内购

| 方法 | 说明 | 参数 | 回调 | | :------| :------ | :------ | :-----: | | innerPurchase | 1、接口仅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'
})

录音功能

| 方法 | 说明 | 参数 | 回调 | | :------| :------ | :------ | :-----: | | startRecord | H5通过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//录音失败错误码
}

| 方法 | 说明 | 参数 | 回调 | | :------| :------ | :------ | :-----: | | stopRecord | H5通过native停止录音 | 无 | 有 内容为json串,如下 |

{
    "nativeType":"android",//设备
    "filePath":"XXXX",//录音文件本地地址
}

| 方法 | 说明 | 参数 | 回调 | | :------| :------ | :------ | :-----: | | cancelRecord | H5通过native 取消录音 | 无 | 无 |

媒体播放功能:

| 方法 | 说明 | 参数 | 回调 | | :------| :------ | :------ | :-----: | | startPlay | H5通过native 开始播放 | 无 | 有 | | stopPlay | H5通过native 停止播放 | 无 | 无 | | pausePlay | H5通过native 暂停播放 | 无 | 无 | | resumePlay | H5通过native 继续播放 | 无 | 无 |

上传功能

| 方法 | 说明 | 参数 | 回调 | | :------| :------ | :------ | :-----: | | startUpload | H5通过native 开始上传 | 无 | 有 如下 |

{
    "nativeType": "android", //设备
    "eventType": "",//事件类型(EVENT_NATIVE_UPLOAD_COMPLETED//上传完成事件
    EVENT_NATIVE_UPLOAD_EXCEPTION//上传失败事件)
    "fileInfo": {
        "fileUrl": "",
        "bucketName": "",
        "key": "",
        "teacherId": ""
    }
}

| 方法 | 说明 | 参数 | 回调 | | :------| :------ | :------ | :-----: | | cancelUpload | H5通过native 取消上传 | 无 | 无 | | pauseUpload | H5通过native 暂停上传 | 无 | 无 | | resumeUpload | H5通过native 继续上传 | 无 | 无 |

分享

| 方法 | 说明 | 参数 | 回调 | | :------| :------ | :------ | :-----: | | shareInfo | H5调用native分享功能支持link分享 link不能为空 | 如下 | 无 |

{
    "title":"" 分享内容标题
    "desc":"" 分享内容描述
    "imgUrl":"", 分享图片链接
    "link":"",分享链接
}

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

| 方法 | 说明 | 参数 | 回调 | | :------| :------ | :------ | :-----: | | feedSend | H5 调起 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 来告知客户端,通知客户端跳转别的页面继续答题 | 无 | 无 |