如何通过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
相关产品推荐
相关产品推荐

