# 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