Memory Dump工程研究
2026.09.13源码 API 清单仅分析 · 未实施
双路浇花器产品

DualOutletWaterTimer

涂鸦原生 API → HeimLink 当前实现

46 原生 API6 调试专用2 仅壳注册

46 / 46 个 API

对照口径

本报告只回答:双路浇花器实际用到了哪些运行时 API,以及 HeimLink 现在有什么对应实现。 不包含运行时接入方案,不新增接口,也不代表浇花器已能运行于 HeimLink。

以 DOWT 页面、共享业务调用、涂鸦原生壳和实际 handler 为依据,共列出 46 个不同的 ty.* API:其中 6 个只见于调试/示例调用,另有 2 个键盘事件仅由壳注册、未见业务消费。文末补充非 ty.* 的 JSSDK、页面生命周期及自定义封装,避免遗漏运行时依赖。

⭐ 表示双路浇花器正常业务流程实际使用的 API,共 38 项,包括共享模块间接调用、条件触发以及支撑业务运行的原生壳调用。6 个调试/示例专用 API、2 个仅壳注册且未见业务消费的事件,以及文末未使用的接口不加星。星标只表示使用情况,不表示 HeimLink 已支持。

这里的“对应”按当前 WebView 可调用的 window.rti 判断:部分对应表示有相近接口但数据或行为不同;无公开等价表示当前 SDK 没有该能力,即使原生内部存在类似实现,也不能直接被小程序调用。所有映射都不是可直接替换的适配代码。

源码快照:miniapp monorepo 31e6e27a;HeimLink 1589a51f。这是静态调用核对,未进行涂鸦真机或浇花器硬件验证;列出的名字来自项目实际原生调用,不是整套涂鸦官方 SDK 的完整清单。

启动与系统信息

⭐ty.getLaunchOptionsSync

HeimLink:无公开等价的启动上下文 API。当前 rti.getDeviceInfo() 不返回当前设备 ID;rti.route 虽已声明,但 SDK 初始值是 { name: 'unknown', params: {} },当前宿主页面未发送填充它的 route 事件,不能用它代替 query.deviceId。

DOWT:原生壳、CAL、BLE 辅助逻辑和共享启动都从 query.deviceId 确定设备;共享启动同时保存完整 launch options。调试封装 base.system.getDeviceId 也只是取此字段,不存在另外一个实际调用的 ty.getDeviceId。

证据:原生入口、启动流程、容器 handler;HeimLink SDK、宿主导航。

⭐ty.panel.initPanelKit

HeimLink:无公开等价。原生宿主负责创建设备控制会话和 WebView bridge,但没有涂鸦 PanelKit 初始化入口或这些配置项。

DOWT:原生壳调用 { deviceId, disableOtaDialog: true, useDefaultOffline: false, bleCover: false, showBLEToast: false },关闭部分平台默认提示,由业务接管界面。

证据:原生入口;宿主页面、HeimLink SDK。

⭐ty.getSystemInfoSync

HeimLink:部分对应。rti.insets / rti.onInsetsChange(callback) 提供 WebView 视口需要补的安全区边距(显示原生标题栏时 top 为 0);rti.system / rti.onSystemChange(callback) 提供 locale、timezone、colorScheme、uses24HourClock。

DOWT:启动读取系统信息,用 safeArea.top 和 screenHeight - safeArea.bottom 布局,用 timezoneId 设置手机时区,用 theme 设置主题;语言和定位失败引导也消费系统信息。

涂鸦字段/语义 HeimLink 当前对应
safeArea 坐标矩形、screenHeight
rti.insets 是 top/right/bottom/left 边距,不是同形对象;没有公开完整屏幕信息 API
timezoneId 手机 IANA 时区
rti.system.timezone;不是设备时区
language
rti.system.locale,值格式需核对
theme
rti.system.colorScheme,字段及空值语义不同
系统/平台、蓝牙与位置开关和授权诊断信息
当前 rti.system 不包含这些字段
12/24 小时制
HeimLink 有 uses24HourClock;不能因此推断 DOWT 已使用同名涂鸦字段

证据:启动与安全区计算、定位引导、系统 handler;系统快照、HeimLink SDK。

⭐ty.getAppInfo

HeimLink:无公开等价。rti.version 是 bridge/SDK 版本,不是宿主 App 版本或涂鸦账号服务区域。

DOWT:启动获取 App 信息,实际用 regionCode 选择 RTI 服务区域并探测、缓存可用地址。

证据:启动流程、区域解析、容器 handler;HeimLink SDK。

⭐ty.getUserInfo

HeimLink:无公开等价。SDK 没有涂鸦用户身份、账号区域或用户资料接口。

DOWT:共享启动实际发起请求,将结果存入 container$.userInfo,失败只记录日志。这是当前启动调用,不等于所有返回字段都被业务使用。

证据:启动流程、容器 handler;HeimLink SDK。

设备信息、连接与控制

⭐ty.device.getDeviceInfo

HeimLink:部分对应。rti.getDeviceInfo() 返回 DIS 信息及契约能力相关字段;状态另走 rti.getDeviceState()。它不是涂鸦完整设备档案。

DOWT:启动、回到设置页刷新、CAL 初始化及 BLE 判断都会调用;传入 { deviceId }。关键依赖如下。

DOWT 消费的数据 HeimLink 当前对应
schema、dps、dpCodes、dpsTime
getDeviceInfo() 的能力字段不等于 Tuya schema;getDeviceState() 可提供受支持的状态图,没有同形的数字 DP ID/code 映射和上报时间字典
name、productId、设备标识
原生设备记录存在名称/标识,但 rti.getDeviceInfo() 不是该记录的公开透传;DIS 型号不能充当涂鸦 productId
isOnline、deviceOnline、capability、网关相关字段
BLE 连接可从 getConnectionState() 获取;没有同形的涂鸦云端、网关和共享设备模型
devTimezoneId
无公开设备 IANA 时区;rti.system.timezone 只是手机时区
latitude / longitude
无公开设备位置字段
activeTime
无公开对应;DOWT 用它判断激活周期变化并重建位置初始化标记,不能替换成当前时间或 BLE 连接时间
isShare、OTA 相关权限上下文
无公开对应

activeTime 是本业务消费的设备激活时间,不是手机蓝牙系统配对时间,也不是 HeimLink Secure Pairing 的认证时间。当前没有发现 DOWT 单独调用“读取设备配对时间”的涂鸦 API。

证据:启动流程、设置刷新、位置初始化、CAL、设备 handler;HeimLink SDK、Host。

⭐ty.device.registerDeviceListListener

HeimLink:部分对应。没有同名注册 API;当前控制页会话由宿主绑定设备,WebView 使用 rti.onDeviceStateChange(callback) 订阅该会话状态。

DOWT:deviceService.init(deviceId) 以 { deviceIdList: [deviceId] } 注册设备列表监听,成功后调用 onDpDataChange。这是实际执行的底层步骤,不是业务页面直接发起的 RPC。

差异:涂鸦是显式设备列表注册;HeimLink 是控制页会话和订阅,不支持用此接口注册任意设备列表。

证据:DeviceService;事件泵、HeimLink SDK。

⭐ty.device.onDpDataChange

HeimLink:部分对应。rti.onDeviceStateChange(callback),回调直接接收变化的 DP 键值图(不是 { dps } 包装),订阅返回取消函数。

DOWT:底层监听经 bridge 转成 Event.DpDataChange,启动逻辑把数字 ID 转成 code;CAL 又维护 code-keyed 状态缓存并发出 DEVICE_STATE_CHANGED。原生系统 handler 另有一处顶层 DP 转发。

差异:HeimLink 输出当前会话的字符串键状态变化,事件泵比较缓存并仅推送变化值,注册时不重放快照;不能假定“相同值再次上报”一定产生同样事件。RAW 编码也不能直接照搬。

证据:DeviceService、系统 handler、CAL、启动流程;事件泵、HeimLink SDK。

⭐ty.device.publishCommands

HeimLink:部分对应。rti.publishDps(dps) 下发当前会话支持的状态键;它不是涂鸦多通道命令路由。

DOWT:正式浇水、计划、安全设置、语音配置等控制走 useDeviceStateMutation → BridgeAdapter → client.cal.sendCommand → deviceService.sendCommand,实际调用 ty.device.publishCommands({ deviceId, dps: commands, mode: 2, pipelines: [3, 0, 1, 2, 4, 5, 6], options: {} })。不是正式控制统一调用 ty.device.publishDps。

差异:HeimLink 不提供 Tuya mode/pipelines,会按当前设备类别校验键、类型和可写性;现有设备契约未覆盖双路浇花器。DOWT 实时 RAW 命令链使用十六进制字符串,而 HeimLink bytes 类 DP 使用 Base64。写入原子性取决于会话家族:HeimLink SecureChannel 路径是原子 SET_STATE,TRV901Z 路径逐键写入,不能笼统承诺全图原子提交。

证据:BridgeAdapter、DeviceService、命令拦截器;Host、HeimLink 控制会话、TRV 控制会话、契约注册表。

⭐ty.device.queryDps

HeimLink:部分对应。最接近 rti.getDeviceState(),但没有同形的“按数字 DP ID 触发设备补报”接口。

DOWT:启动发现 dpsTime 中有上报记录而 dps 缺值时,调用 { deviceId, dpIds } 补报;当前排除 RAW DP。涂鸦调用成功不直接返回这些值,值通过 onDpDataChange 异步回流;旧运行时可能返回不支持。

差异:rti.getDeviceState() 直接返回状态图;HeimLink SecureChannel 会发 GET_STATE,TRV901Z 会返回已累计的 report 缓存。因此也不能把它统一称为“强制设备新鲜读取”。

证据:启动补报、DP handler;Host、HeimLink 控制会话、TRV 控制会话。

⭐ty.device.getBLEOnlineState

HeimLink:部分对应。rti.getConnectionState() 返回状态字符串 disconnected/connecting/connected/disconnecting;rti.onConnectionStateChange(callback) 的业务回调同样收到状态字符串。底层 wire 事件的 { state } 已被 SDK 解包。

DOWT:原生 testBleConnection 辅助逻辑通过 { deviceId } 查询 { isOnline };启动的重连流程间接使用。网关场景还会合并 getDeviceInfo 的云在线状态。

差异:需要把连接状态转换为布尔值;BLE 连接不等于云在线,也不等于安全认证完成或可以控制。HeimLink 另有 getSecurePairingState / onSecurePairingChange,它们不是此 API 的同义接口。

证据:BLE handler、启动流程;HeimLink SDK、事件泵。

⭐ty.device.connectBLEDevice

HeimLink:部分对应。rti.connect() 连接当前宿主绑定的设备,不接受涂鸦 { deviceId }。

DOWT:启动 troubleshootBle 间接调用,BLE 调试页也可直接调用。辅助重连逻辑自行重试、探测并生成 CONNECTING / CONNECTED / CONNECT_BREAK 提示事件。

差异:HeimLink 的连接/重连策略属于宿主,不包含这套涂鸦自定义提示事件,也不隐含完成 Secure Pairing。

证据:BLE handler、启动流程;HeimLink SDK、Host。

⭐ty.device.onDeviceOnlineStatusUpdate

HeimLink:部分对应。rti.onConnectionStateChange(callback) 只能对应本地连接维度。

DOWT:监听设备在线变化并更新 device$.isOnline;纯 BLE 设备会忽略云离线通知,离线由自定义 CONNECT_BREAK 流程管理。

差异:涂鸦事件的 online、onlineType 和设备标识不等于 HeimLink 的连接状态;没有当前公开的云在线/网关在线事件。

证据:设备 handler、启动流程;HeimLink SDK、事件泵。

⭐ty.device.onDeviceRemoved

HeimLink:部分对应。rti.onDeviceRemoved(callback) 已公开。

DOWT:DeviceRemovedNotifier 收到事件后调用退出小程序,失败再返回页面;原生 handler 对 API 是否存在做了检查。

差异:HeimLink 表示设备从本地设备记录中移除,不能推断具有涂鸦云账号解绑、共享权限撤销等全部语义;返回/退出行为也需单独比较。

证据:设备移除处理、设备 handler;HeimLink SDK、宿主移除事件。

设备日志

⭐ty.getAnalyticsLogsStatusLog

HeimLink:无公开等价的浇水/通用 DP 日志接口。现有 rti.getHistoryInfo()、rti.getHistory(options) 是温控历史数据模型,不能直接替代它。

DOWT:用于浇水日志、故障、电池/充电历史,以及查询停止前的流量和当时的安全阈值。入参包含设备 ID、运行时 schema 转换出的逗号分隔 dpIds、分页及时间范围;消费 dps、total、hasNext。

差异:当前 DOWT 查询的 startTime/endTime 是毫秒数字字符串,日志 timeStamp 按秒消费,RAW 日志值使用 Base64。HeimLink 历史的筛选、记录格式、分页和覆盖范围均不同,支持还受会话家族限制。它也不是应用诊断日志上传接口。

证据:日志 handler、浇水日志数据源、电池数据源、日志解析;Host 历史入口、HeimLink SDK。

本地存储与网络

⭐ty.getStorageSync

HeimLink:无公开等价。原生内部有 MMKV 存储,不在 window.rti 中。

DOWT:启动快速读主题缓存。原生签名是 ty.getStorageSync(key),直接返回值;自定义 bridge 才包装成 { data, success },不能误写为原生接收 { key }。

证据:启动流程、存储 handler;HeimLink SDK、原生存储。

⭐ty.getStorage

HeimLink:无公开等价;MMKV 是原生内部能力。

DOWT:{ key } 异步读取主题以外的缓存与偏好,例如单位、天气位置、激活周期标记、提醒抑制状态和 API 区域缓存。

证据:存储封装、区域缓存、存储 handler;HeimLink SDK、原生存储。

⭐ty.setStorage

HeimLink:无公开等价;原生 setItem 不可从 window.rti 调用。

DOWT:通过 { key, data } 写入上述主题、偏好、天气和区域缓存。设备云端 KV 是另外一条 HTTP 链路,不等于此 API。

证据:启动流程、存储封装、存储 handler;HeimLink SDK、原生存储。

⭐ty.removeStorage

HeimLink:无公开等价;原生内部删除存储项不构成小程序公开能力。

DOWT:通过 { key } 清理本地位置、缓存和已失效的区域结果。

证据:存储封装、位置初始化、区域缓存、存储 handler;HeimLink SDK。

⭐ty.request

HeimLink:无公开等价的原生 HTTP 代理。WebView 的标准 fetch 不是 rti.request,也不自动继承涂鸦宿主的网络行为。

DOWT:涂鸦原生小程序环境下,RTI api()、区域探测、IP 定位请求经此 API;传入 url/method/header/data,handler 尝试 JSON 解析响应,再包装 success。天气、产品配置、设备档案、云 KV 和远程诊断日志都是它承载的上层 HTTP 业务。

差异:当前 RTI 请求还依赖真实 productId 构造服务端认证请求头和已选中的服务区域;有 HTTP 传输能力不代表这些上下文已具备。没有在本次分析中验证 HeimLink WebView 的跨域、鉴权或服务可达性。

证据:HTTP 分发、区域探测、网络 handler;HeimLink SDK。

定位与系统设置

⭐ty.authorizeStatus

HeimLink:无公开等价。SDK 没有查询小程序位置授权状态的接口。

DOWT:自动定位前后查询 scope.userLocation 等授权状态,用于决定是否请求授权及如何反馈失败;调试页也有直接调用。

证据:定位流程、系统 handler;HeimLink SDK。

⭐ty.authorize

HeimLink:无公开等价。不能以宿主已经申请 BLE 权限推断 WebView 已有位置授权能力。

DOWT:定位流程按授权检查结果请求相应 scope,包含失败和超时分支。

证据:定位流程、系统 handler;HeimLink SDK。

⭐ty.map.getLocation

HeimLink:无公开等价。没有公开当前位置或设备位置 API。

DOWT:自动位置获取链在设备档案坐标不可用时尝试原生定位,再可回退到 IP 定位。这里实际名字是 ty.map.getLocation,不是 ty.getLocation。

差异:手机当前坐标不一定是浇花器安装位置;位置还有精度处理、缓存和云 KV 持久化,不能只比较能否返回两个数字。

证据:定位流程、系统 handler;HeimLink SDK。

⭐ty.map.chooseLocation

HeimLink:无公开等价。没有从 WebView 打开原生选点页的接口。

DOWT:设置中的设备位置编辑可打开地图选点,传入可选初始经纬度,处理选点结果、取消和失败;城市名称解析还有 HTTP 回退路径。

证据:位置编辑底层、系统 handler;HeimLink SDK。

⭐ty.openSystemSettingPage

HeimLink:无公开等价。SDK 没有打开系统设置页的入口。

DOWT:定位失败引导按诊断结果和目标 scope 跳转系统设置;这是条件触发,不是每次启动调用。

证据:定位引导、系统 handler;HeimLink SDK。

⭐ty.openAppSystemSettingPage

HeimLink:无公开等价。SDK 没有打开当前 App 权限设置页的入口。

DOWT:定位失败引导根据权限问题进入宿主 App 的系统设置页。与上一个 API 的目标不同,不能合并为同一原生方法。

证据:定位引导、系统 handler;HeimLink SDK。

导航与设备管理

⭐ty.navigateTo

HeimLink:部分对应。SDK 已有 rti.navigateTo(route, params),宿主通过原生 router 打开已注册的设备 Web 页面。

DOWT:Navigation.loadPage 构建涂鸦 native WebView 页 URL,同时用自定义 NavigationCenter 保存 pageName、params;用于首页、设置、计划、日志、天气等切页。

差异:当前 HeimLink 宿主只消费 route,没有继续传递 SDK 发来的 params,也未发 route 事件填充 rti.route。任意 DOWT 静态路径也不等于已注册的 HeimLink route;不能判为完整导航等价。

证据:业务导航封装、导航 handler;HeimLink SDK、宿主导航。

⭐ty.navigateBack

HeimLink:部分对应。rti.goBack() 调宿主 router.back(),另有 rti.onNavigateBack(callback) 返回按键事件。

DOWT:页面返回传入 delta;涂鸦自定义 handler 还维护自己的 page stack,根页返回时改为 ty.exitMiniProgram。

差异:goBack() 没有 delta,没有相同的 miniapp 页面栈,也不承诺根页退出整个小程序。

证据:业务导航封装、导航 handler;HeimLink SDK、宿主页面。

⭐ty.exitMiniProgram

HeimLink:无公开等价的“退出小程序” API。最接近 rti.goBack(),但它只返回一个原生路由层级。

DOWT:设备被移除、部分故障/低电量/系统错误确认,以及原生根页返回时调用。

差异:离开当前 WebView、退到设备首页、退出整个 miniapp 是不同动作,当前不能把 goBack() 无条件当作完全等价实现。

证据:设备移除处理、退出 handler、导航 handler;HeimLink SDK、宿主页面。

⭐ty.device.renameDeviceName

HeimLink:无公开等价。原生内部有 deviceActions.renameDevice(...),但未暴露为 window.rti 方法。

DOWT:设置页编辑设备名称,调用 { deviceId, name }。出水口 A/B 的别名走 RTI 设备 KV,不是此 API。

证据:设置页、设备 handler;HeimLink SDK、原生设备存储。

⭐ty.device.getOTAUpdateInfo

HeimLink:无公开等价的升级信息查询。rti.getDeviceInfo() 的固件版本不能代替升级可用性、进度、模块和权限信息;原生内部 OTA 不在 SDK 表面。

DOWT:首页 OTA 组件与设置页刷新调用 { deviceId };bridge 把返回结果包装为 info,不存在 API 时返回 not_supported。

证据:OTA Hook、设置刷新、设备 handler;HeimLink SDK。

⭐ty.device.openOTAUpgrade

HeimLink:无公开等价。当前没有从 window.rti 打开原生 OTA 页的专用接口。

DOWT:首页 OTA 操作经过 client.functional.openOTAPage({ deviceId }),底层实际调用此 API。openOTAPage 是自定义封装名字,不是这里实际调用的涂鸦原生名字。

证据:OTA Hook、功能页 handler;HeimLink SDK、宿主路由。

⭐ty.device.openDeviceDetailPage

HeimLink:无公开等价的涂鸦设备详情功能页。rti.navigateTo 打开的是宿主注册的 Web 页面,不等于任意原生设备设置页。

DOWT:设置中的“基础设置”调用 { deviceId } 打开涂鸦原生设备详情。分享、自动化等即使可从该原生页继续进入,也不能推导成 DOWT 分别调用了所有相关 ty.* API。

证据:设置页、功能页 handler;HeimLink SDK、宿主路由。

交互与键盘

⭐ty.showToast

HeimLink:无公开等价的原生 Toast 接口。原生错误提示或 Web 自绘 Toast 不等于 SDK 已提供此方法。

DOWT:计划列表、创建计划中的部分反馈直接调用;其余大量反馈已用 Web 层 ResultToast / sonner,并非每个提示都走原生。

证据:计划列表、创建计划、UI handler;HeimLink SDK。

⭐ty.setClipboardData

HeimLink:无公开等价。没有 rti 剪贴板方法;浏览器 Clipboard API 是另一能力边界,不能假定 WebView 已授权可用。

DOWT:复制设备 ID;电池和浇水日志页面也用它复制 JSON 诊断数据。入参 { data: string }。

证据:设置页、电池详情、浇水日志页、UI handler;HeimLink SDK。

⭐ty.vibrateShort

HeimLink:无公开等价。SDK 没有短振动/触感反馈接口。

DOWT:计划表单时间滚轮用 { type: 'light' } 做触感反馈,失败可忽略;handler 会检查原生 API 是否存在。

证据:时间滚轮、UI handler;HeimLink SDK。

⭐ty.onKeyboardHeightChange

HeimLink:无公开等价的键盘高度事件。rti.onInsetsChange 是安全区变化,不是键盘事件。

DOWT:原生转发 Event.KeyboardHeightChange,共享启动订阅后更新 ui$.keyboard.height。源码已有特定 Tuya 宿主版本兼容性警告,本次未真机复核。

证据:UI handler、启动流程;HeimLink SDK。

原生壳与注册副作用

⭐ty.createWebviewContext

HeimLink:内部有对应传输机制,非同形公开 API。原生创建 react-native-webview 并注入 SDK,Web 侧经 window.ReactNativeWebView.postMessage 发送,原生经注入脚本分发消息。

DOWT:原生页 onReady 创建 ty.createWebviewContext('webview-container'),随后调用返回对象的 webviewContext.postMessage(data) 向 WebView 发消息。WebView 的 message(event) 反向接收请求并补上 pageKey。

差异:两者都能双向通讯,但消息格式、RPC、页面身份和就绪流程不同,不是换全局变量名即可兼容。

证据:WebView 原生壳、Web 侧 bridge;HeimLink SDK、宿主页面。

ty.onKeyboardWillShow

HeimLink:无公开等价。

DOWT 使用范围:仅壳注册,未见业务消费。共享 ui.js 在模块加载时实际注册并转发 Event.KeyboardWillShow;DOWT 当前只消费高度变化事件,所以列为运行时副作用,不列为业务必需事件。

证据:UI handler、启动流程;HeimLink SDK。

ty.onKeyboardWillHide

HeimLink:无公开等价。

DOWT 使用范围:仅壳注册,未见业务消费。与 WillShow 相同,原生顶层注册并转发,但没有发现 DOWT 业务监听。

证据:UI handler、启动流程;HeimLink SDK。

仅调试或示例直接使用

以下 6 个 API 已在项目的调试/示例页面找到调用,但不据此认定为正常浇水业务的必需能力。前文已列出的 API 在调试页再次使用时不重复计数。

ty.device.publishDps

HeimLink:部分对应。rti.publishDps(dps) 已存在,但同名不等于契约一致。

DOWT 使用范围:调试/示例。app/pages 和共享 API 示例页直接调用 client.deviceControl.dp.publishDps,正式浇水控制走前述 publishCommands。数字 ID/字符串键、数据编码、设备契约及写入结果需要分别比较。

证据:DP 调试页、共享 DP 示例、DP handler;HeimLink SDK、Host。

ty.device.disconnectBLEDevice

HeimLink:部分对应。rti.disconnect() 断开当前会话设备,不接受涂鸦 { deviceId }。

DOWT 使用范围:调试页。BLE 调试页显式断开按钮使用;CAL 的 disconnect 在涂鸦原生实现里是空操作,不能把它计为正式业务调用此原生 API。

证据:BLE 调试页、BLE handler、CAL;HeimLink SDK、Host。

ty.getAccountInfoSync

HeimLink:无公开等价。rti.version 不是小程序账号/应用标识信息。

DOWT 使用范围:共享 API 示例页。有对应容器 handler 和可执行示例;正常启动调用的是 getAppInfo、getUserInfo,没有调用此方法。

证据:容器 API 示例、容器 handler、启动流程;HeimLink SDK。

ty.redirectTo

HeimLink:部分对应。rti.replace(route, params) 已存在,但当前宿主同样未继续传递 params。

DOWT 使用范围:API/导航示例页。替换涂鸦页面并同步自定义 NavigationCenter;没有发现正常业务直接调用这个 RPC。

证据:导航示例、导航 handler;HeimLink SDK、宿主导航。

ty.getStorageInfo

HeimLink:无公开等价。没有 WebView 可调用的存储键/容量查询 API。

DOWT 使用范围:locationTest 调试页。读取原生存储元信息用于诊断。

证据:位置调试页、存储 handler;HeimLink SDK。

ty.clearStorage

HeimLink:无公开等价。没有 WebView 可调用的清空原生小程序存储 API。

DOWT 使用范围:locationTest 调试页。清理测试状态;不是设置页设备恢复出厂操作,后者走设备命令。

证据:位置调试页、存储 handler、设置页;HeimLink SDK。

不属于涂鸦原生 API 的依赖

JSSDK、页面生命周期与自定义 bridge

DOWT 实际运行时依赖 HeimLink 当前对应
@tuya-miniapp/jssdk 的 miniProgram.postMessage / miniProgram.onMessage
SDK/宿主内部已有双向 WebView 消息传输,但协议不兼容;它们不是 ty.* 方法
原生全局 App、Page、页面 setData、onLoad/onReady/onShow/onHide/onUnload/onResize
宿主原生 screen 和 Web 页面有各自生命周期;window.rti 未提供同形的页面显示/隐藏/卸载事件族,onNavigateBack 只覆盖返回意图
webview.env.checkReady
自定义 RPC 回声并标记页面就绪;HeimLink 宿主支持底层 handshake 消息,但 SDK 没有公开 checkReady(),也未实现自动握手调用
cal.getDeviceState
自定义缓存 getter,由 getDeviceInfo 和 DP 事件维护;最接近 rti.getDeviceState(),但读取语义取决于会话家族
cal.subscribe / DEVICE_STATE_CHANGED
自定义 code-keyed 增量事件;最接近 rti.onDeviceStateChange,不等于原生 ty.* 方法
cal.connect / cal.disconnect
当前涂鸦实现为空操作;不得等同于实际 BLE 连接/断开调用
bluetooth.testBleConnection / troubleshootBle / Event.BleStatus
自定义探测、重试和通知;底层 API 已在前文分别列出,HeimLink 只有其自身连接和安全配对状态接口
route.getPageKey/getPageParams、route.event
自定义 NavigationCenter;当前没有可用的同形 HeimLink 页面参数/生命周期服务,rti.route 声明存在但宿主未填充
route.getPageStack、webview.dev.reload
调试示例使用的自定义能力;前者无公开等价,后者涂鸦通过改 WebView src 重载,HeimLink 没有同形公开 RPC

证据:Web bridge、原生壳、CAL、BLE handler、导航 handler;HeimLink SDK、宿主页面。

RTI 云服务和 Web 标准能力

天气 /v1/weather/*、产品配置 /v1/products/:id/config、设备档案 /v1/devices/:id、设备 KV /v1/device-kv/*、诊断日志 /v1/remote-log 是 RTI 后端服务,不是涂鸦原生 API。在本报告中,它们的原生传输依赖统一计为 ty.request,所需设备/区域上下文计入 getDeviceInfo/getAppInfo。HeimLink 的 getHistory 不替代这些服务。HTTP 分发、天气请求、远程日志发送。

DOWT 还依赖 WebView 提供 DOM/CSS、Canvas/WebAssembly/Rive、标准时间与 Intl、浏览器事件和存储回退等 Web 能力。这些不是 ty.*,也不应伪装成缺失的 rti 原生接口;本次没有验证它们在 HeimLink WebView 中的完整兼容性。

已注册但未发现 DOWT 调用的接口

以下不计入上面的 46 项。判断依据是调用表达式和对应页面,而不是 handler 是否被 import。这里列出容易误计的项;“未见调用”限定于本次源码快照,不意味着其他 app 也未使用。

API / 封装 本次判断 HeimLink 现状
ty.device.getDeviceOnlineType、ty.device.getProductInfo
handler 存在,未见 DOWT 调用;DOWT 从 getDeviceInfo 取得相应上下文
无同形公开 API
ty.getStatisticsRangDay
handler 存在;实际图表通过状态日志计算,未见此调用
无同形公开 API;getHistory 不是按日涂鸦统计
ty.showModal、ty.showLoading、ty.hideLoading
handler 存在,未见当前业务调用;ResultToast 注释提到被替换的原生 loading,不算调用
无同形公开 API;Web 自绘 UI 不计为原生 API
base.system.shareFile → ty.getFileSystemManager、fs.writeFileSync、ty.env.USER_DATA_PATH、ty.share
有复合 handler,未见 DOWT 调用;不能把复制日志 JSON 误计为文件分享
无公开文件分享/文件系统 API
ty.home.getCurrentHomeInfo、ty.getSceneList、ty.enableRule、ty.disableRule、ty.router 场景跳转、ty.device.openGroupDetailPage
共享层已注册,但未见 DOWT 直接调用
无对应公开家庭/场景/群组 API
openDeviceEdit/openDeviceInfo/openDeviceQuestionsAndFeedback/openDeviceWifiNetworkMonitorPage/openShareDevice/openDeviceExecutionAndAnutomation/openGuideScene/openCreateScene/openEditScene 等 ty.device.* 功能页
共享 handler 存在,不因打开“设备详情页”而全部计入
无这些专用公开入口
navigateToMiniProgram/navigateBackMiniProgram 封装
未见 DOWT 调用;当前两个 handler 都指向 ty.navigateBackMiniProgram,不能按封装名称猜原生 API
无跨小程序导航 API
ty.setNavigationBarTitle、ty.device.offDpDataChange
在相关壳文件里只有注释;DeviceService 的 offDpDataChange 是本地 JS listener 移除方法
不计为实际涂鸦调用

注册及实现证据:handler 汇总入口、设备信息、日志、UI、文件分享、功能页、跨小程序导航、原生壳;HeimLink 未公开项按 SDK 全集 核对。

证据与限制

核对方法:枚举 DOWT 和共享层实际 client.*.call/callWithOptions/on 调用表达式,排除注释、类型、测试、Storybook、RN 路径和 Web Simulator handler;逐项追踪原生 handler,另检查原生入口、模块顶层订阅和 WebView 生命周期。示例页面单独分类,不把仅注册的共享能力当成业务调用。没有依赖当前不可用的代码图工具来推断调用覆盖。

HeimLink 侧同时核对 SDK、Host dispatch、事件泵、原生页面导航和不同控制会话,避免把“类型声明存在”“原生内部具备”或“曾经提出过的接口名”写成已经能调用的实现。getRuntimeInfo/getDeviceContext/getDeviceLogs 不是当前已实现 API。

源码链接固定到本次分析的提交,私有仓库链接需要登录。报告本身没有包含账号信息、密钥、设备实测数据或服务凭据。旧的运行时接入评审页保留;本页以用户收窄后的“仅 API 对照”要求为准。