You need to enable JavaScript to run this app. 如何通过Fitbit Companion Messaging API将上次同步时间发送到表盘
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Fitbit Companion Messaging API将上次同步时间发送到表盘

问题根因

Fitbit OS 6.0 SDK的peerSocket消息传输仅支持序列化JSON标准基础类型(字符串、数字、布尔值、数组、普通对象),Date类型对象无法被直接序列化传输,会在序列化阶段被转换为空对象,这就是你接收侧拿到newValue:{}的核心原因。你在companion侧直接打印可以看到正常内容,是因为打印的是本地未经过序列化的原始Date对象。

修复方案

1. companion侧修改发送逻辑

发送前将device.lastSyncTime转换为数字时间戳(或ISO字符串)后再传输:

function sendVal(data) {
  if (messaging.peerSocket.readyState === messaging.peerSocket.OPEN)
    messaging.peerSocket.send(data);
}

function tellSync() {
  let date = device.lastSyncTime;
  let data = {
    key: 'lastSync',
    newValue: date.getTime() // 转成毫秒时间戳(数字类型,可正常序列化)
  };
  sendVal(data);
}

2. app侧修改接收逻辑

收到时间戳后转换为Date对象即可正常使用:

messaging.peerSocket.onmessage = evt => {
  if (evt.data.key === 'lastSync') {
    const lastSyncDate = new Date(evt.data.newValue);
    console.log('最后同步时间:', lastSyncDate);
  }
};
可选补充

可以在两侧都添加peerSocket的错误监听,排查偶发的传输异常:

messaging.peerSocket.onerror = err => {
  console.log("消息传输错误: " + err.code + " - " + err.message);
};

内容的提问来源于stack exchange,提问作者Morgosus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 10:36:02