# smarthome-h5-bridge 介绍
# 概述
smarthome-h5-bridge 是 (旧webview容器) H5 与原生 APP(iOS / Android)之间的通信桥接库。H5 页面通过该库暴露的 window.bridge 对象,可以调用原生 APP 提供的各项能力,包括设备信息获取、页面导航、网络请求、视频控制、文件操作、埋点上报等。
# 安装
npm install smarthome-h5-bridge
# 引入方式
以 Vue 为例,在入口文件 main.js 中引入:
// main.js
import 'smarthome-h5-bridge';
引入后即可在任意位置通过 window.bridge 调用相关 API:
// 获取 APP 信息
window.bridge.getAppInfo(res => {
console.log(res);
// { appVersion: "3.6.0", appName: "MSmartHome", appEnv: "SIT" }
});
# 当前版本
v1.1.7
# 通信原理
- iOS:通过创建隐藏 iframe 并设置
iosbridge://scheme 与原生通信(异步回调),以及prompt()实现同步调用。 - Android:通过注入的
msmartJs对象与原生通信。 - 库内部自动判断运行平台,H5 无需关心平台差异,统一调用
window.bridge.xxx()即可。
# 回调机制
大部分异步 API 支持两个回调参数:
| 参数 | 说明 |
|---|---|
| callback | 成功回调,接收原生返回的数据 |
| callbackFail | 失败回调,接收错误信息 |
window.bridge.getToken(
res => { console.log('成功', res); },
err => { console.log('失败', err); }
);
部分 API 返回 Promise:
window.bridge.getGlobalAppCache('key').then(res => {
console.log(res);
}).catch(err => {
console.log(err);
});
# API 分类速览
| 分类 | 主要 API |
|---|---|
| 基础信息 | getAppInfo、getUserInfo、getToken、getCountryString、getLangCode、getLanguage、getNetType、getThemeMode、getTemperatureUnity |
| 设备信息 | getDeviceInfo、getDeviceSN、getApplianceID、getApplianceSubtype、getCurrentDevSN、getCurrentApplianceID、getCurrentApplianceSubtype、getApplianceProtocolVersion、getPlugVersion、getUserBindDeviceList |
| SN 加解密 | decryptSn、encryptSn |
| 页面导航 | goBack、backForDismiss、goInfoPage、showControlPanelPage、showNamedControlPanelPage、getPageParameters、showApplianceInfoEntryPage、showApplianceInfoPage、showInfoCenterPage、goToMeijuPage、goToMeijuPageWithUrl、gotoOverseaMeijuPage、openWeb、jumpOtherPlugin、jumpToSystemPage |
| UI 交互 | setTitleFromH5、showToastForH5、showAlert、showProgress、closeProgress、setBackgroundColor、setPageOrientation |
| 状态栏 | getStatusBar、setStatusBar、setBottomStatusBar、updateWebViewBehavior |
| 缓存/存储 | setGlobalAppCache、getGlobalAppCache、setterValToStorage、getterValFromStorage、clearWebViewCache |
| 网络请求 | sendCentralCloundRequest、nativeNetService、requestDataTransmit、b2bAction、commandInterface |
| 消息通信 | receiveMessageFromApp、fireGlobalEvent |
| 设备控制指令 | startCmdProcess、startCmdProcessCustomLoading、startCmdProcessExt、stopCmdProcess、getCmdProcessInfo、startSendServer、stopSendServer |
| 设备连接状态 | appliance (bind/unbind/request) |
| 视频/通话 | initVideoParams、reconnectVideo、openVideo、closeVideo、resizeVideo、replayVideo、hideVideo、showVideo、captureImage、startRecord、stopRecord、uploadMediaFile、sendVideoCommand、startVoiceToServer、stopVoiceToServer、changeMicrophoneStatus、changeAudioStatus |
| 语音 | startVoice、stopVoice、cancelVoice、startRecordStream、stopRecordStream |
| 文件操作 | downloadSingleFile、startDownloadFiles、downLoadImageOrVideoForUse、choosePhoto、takePhoto、chooseAlbumVideo、recordVideo、uploadLocalFile、uploadFilesWithSuccessCallBack |
| 扫码 | scanCode、qrCodeScan |
| 分享 | UMengshare、shareToOversea、buyConsumable |
| 埋点 | burialPoint、trackEvent |
| 用户/家庭数据 | getUserHomeInfo、getUserApplianceList、getUserApplianceIp、getLanApplianceList、getSmartHomeCurrentHomeInfo、getCurrentHomeCacheAppliances、getGPSInfo |
| 配置 | getConfigInfo、getSort |
| 其他 | logToApp、showGuideEvaluationDialog、getCocreationParams、openExternalApplication、queryAppAccess、compareVersion、stopService、getLvmiDeviceInfo |
| 小米手环 | MiScan、MiLogin、MiDelete、MiMenu、MiSaveData、FirmwareUpdate、MiUpgradeProgress |
# 版本兼容
调用部分 API 前需判断 APP 版本,可配合 getAppInfo + compareVersion 使用:
window.bridge.getAppInfo(appInfo => {
const { appName, appVersion } = appInfo;
const requiredVersion = {
MSmartHome: '3.8.0',
TSmartLife: '2.5.0'
};
if (window.bridge.compareVersion(appVersion, requiredVersion[appName]) >= 0) {
// 版本满足,可安全调用
window.bridge.getSmartHomeCurrentHomeInfo({}, res => {
console.log(res);
});
} else {
console.log('当前 APP 版本不支持该方法');
}
});
# 支持 APP
| APP 名称 | appName 值 |
|---|---|
| 国际美居 | MSmartHome |
| 国际东芝 | TSmartLife |