@heybox/hb-sdk API Reference - v0.9.5
    正在准备搜索索引...

    函数 onHandshakeStateChange

    • 订阅默认 SDK 实例的握手状态,并立即接收当前状态。

      参数

      返回 () => void

      从默认 SDK 状态 store 移除当前 handler 的 unsubscribe。调用一次或多次都返回 void 且 不会抛错;取消后不再接收未来迁移,但不会撤销已经同步回放的当前状态。

      订阅是纯本地同步操作,不发送 bridge 请求、不等待握手,也无需在 package.json#heybox.permissions 中声明权限或保留可信用户手势。根包导入时握手已经自动启动; 本 API 用于观察状态,不用于主动发起或重试握手。

      handler 会在加入订阅集合后、unsubscribe 返回前立即同步收到当前冻结状态:

      • 当前为 connecting:先立即收到 connecting,随后至多再收到一次 ready 或 failed;
      • 当前已是 ready 或 failed:立即收到该终态,之后不会再迁移;
      • 在终态通知过程中新增订阅:通过即时回放收到一次终态,不会因同一迁移重复调用。

      状态只允许 connecting -> ready 或 connecting -> failed,终态不回退。failed.error 是握手失败 和同步环境读取使用的同一个原始错误实例,可按稳定的 code 分支处理。ready 只表示初始握手 已成功;后续 unload 不会把状态改回 failed,因此它不是 Runtime 持续存活探针。

      SDK 会逐个捕获 handler 的同步异常:初次即时回放或终态通知中抛错,都不会从本函数传播、改变 状态、阻断握手 Promise 或阻止其他订阅者收到通知。handler 返回值会被忽略,Promise 也不会被 等待;异步 handler 应在自身内部捕获 rejected Promise,避免未处理拒绝。

      每个 handler 以 Set 语义保存;同一函数引用重复订阅只有一个未来通知注册,但每次调用本函数仍会 同步回放当前状态,任一 unsubscribe 都会移除该注册。应在页面、组件或业务模块销毁时调用 unsubscribe。SDK 内部销毁会清空全部状态订阅;若销毁发生在握手落定前,会先发布携带 SDK_DESTROYED 的 failed,再清空订阅。此后重复调用已经返回的 unsubscribe 仍是安全空操作。 unload 发生在握手前时则以 RUNTIME_UNAVAILABLE 落为 failed;发生在 ready 后不会产生 第二次状态通知。

      与 getHandshakeState() 相比,本 API 适合让 UI 自动跟随 唯一一次迁移,且即时回放意味着通常不需要先额外读取一次状态。 on('ready') 则是不可重放、可能因 Host 重复事件再次触发的边沿通知, 不应用于驱动晚挂载按钮的可用状态。

      SDK 会在发布 ready 状态前缓存环境快照,因此可以在 ready handler 中立即调用 environment.getInfoSync()。在 failed handler 中调用该 API 会抛出同一个 state.error;一般异步读取可使用 environment.getInfo() 自动等待。

      import hbSDK from '@heybox/hb-sdk'

      const stop = hbSDK.onHandshakeStateChange(state => {
      switch (state.status) {
      case 'connecting':
      submitButton.disabled = true
      statusText.textContent = '正在连接'
      break
      case 'ready':
      submitButton.disabled = false
      statusText.textContent = hbSDK.environment.getInfoSync().runtime.mode
      break
      case 'failed':
      submitButton.disabled = true
      statusText.textContent = `连接失败:${state.error.code}`
      break
      }
      })

      // 页面或组件真正销毁时执行;重复取消也安全。
      window.addEventListener('unload', () => {
      stop()
      stop()
      }, { once: true })

      0.7.0

      android

      ios

      ohos

      windows

      macos

      android none

      ios none

      ohos none

      windows none

      macos none