当前冻结的
MiniProgramSDKHandshakeState:
connecting 表示初始握手尚未落定,ready 表示握手成功;failed 表示握手失败,并通过
error 保留原始
HbMiniProgramSDKError。状态不变期间重复调用
返回同一个对象引用,落定时只会替换一次。
该函数不接收参数并同步返回当前快照,不等待 Promise、不轮询、不发送 bridge 请求,也不会因为
握手失败而抛出 failed.error。读取状态无需在 package.json#heybox.permissions 中声明权限,
不要求可信用户手势。根包导入时已经自动启动握手;普通异步能力调用也会自行等待,不需要用本
API 手动实现等待器。
状态 wrapper 已浅冻结。状态机只允许 connecting -> ready 或 connecting -> failed 一次迁移,
终态不会回退或互相转换;failed.error 是握手 Promise 使用的同一个原始错误实例,可根据稳定的
code 分支处理。常见初始失败包括 NOT_IN_IFRAME、MISSING_NONCE、READY_TIMEOUT、
HANDSHAKE_FAILED、RUNTIME_UNAVAILABLE 或握手完成前的 SDK_DESTROYED。
需要让界面跟随状态变化时,使用
onHandshakeStateChange():它会在订阅期间同步回放
当前值,再通知至多一次终态迁移。不要轮询本函数。对于必须保留原始可信用户手势的按钮,可用
该持久状态提前控制 disabled,但不要在点击回调里等待握手。
on('ready') 是握手成功瞬间的事件:不会向晚订阅者重放,Host 重复
派发时也可能再次触发事件 handler;持久状态则只迁移一次并始终可查询。ready 只表示初始握手
已成功,后续 unload 不会把状态改回 failed,因此不能把它当作 Runtime 持续存活检查。
SDK 会在发布 ready 状态前缓存环境快照,所以 status === 'ready' 时可以立即调用
environment.getInfoSync()。failed 时该同步环境 API 会抛出
同一个 state.error;不要求同步读取时,优先使用会自动等待的
environment.getInfo()。
import hbSDK from '@heybox/hb-sdk'
const state = hbSDK.getHandshakeState()
switch (state.status) {
case 'connecting':
submitButton.disabled = true
break
case 'ready': {
submitButton.disabled = false
const environment = hbSDK.environment.getInfoSync()
console.log(environment.runtime.mode)
break
}
case 'failed':
submitButton.disabled = true
console.error('SDK 握手失败', state.error.code)
break
}
ready 后同步读取环境快照。
获取默认 SDK 实例的当前握手状态。