Google Home SYNC和ReportState“;“在线”;值不';iOS客户端似乎无法读取,但Android还可以 问题

Google Home SYNC和ReportState“;“在线”;值不';iOS客户端似乎无法读取,但Android还可以 问题,ios,json,actions-on-google,google-smart-home,Ios,Json,Actions On Google,Google Smart Home,在执行同步请求、查询请求和ReportState调用时,我将所有设备报告为“online”:true。我可以看到Google正确读取了这个值,因为这些值显示在ReportState Dashboard测试工具上。安卓系统运行良好,在简短的查询(“连接…”)后,即可在线显示设备(“链接到您”)。相反,在使用iOS移动客户端时,当用户进入设备页面时,它只会进行查询,然后报告设备处于脱机状态。仪表板和JSON对调用的响应都显示“online”:true。如果用户尝试与设备交互,例如打开设备,则该设备会

在执行同步请求、查询请求和ReportState调用时,我将所有设备报告为
“online”:true
。我可以看到Google正确读取了这个值,因为这些值显示在ReportState Dashboard测试工具上。安卓系统运行良好,在简短的查询(“连接…”)后,即可在线显示设备(“链接到您”)。相反,在使用iOS移动客户端时,当用户进入设备页面时,它只会进行查询,然后报告设备处于脱机状态。仪表板和JSON对调用的响应都显示“online”:true。如果用户尝试与设备交互,例如打开设备,则该设备会工作

查询响应 笔记 这可能是iOS客户端中的一个bug,但更可能是我的代码中的bug或我的误解,因为这是我的第一个智能家居操作

我尝试过在所有地方包括
“online”:true
,例如同步、查询和报告状态调用。这至少让仪表板了解了初始在线状态,但对iOS客户端没有帮助

总的来说,ReportState似乎工作得很好,因为我的更改反映在仪表板中

截图 注意测试工具的状态和iOS客户端指示之间的矛盾


离开这个项目大约一年后,我又回到了这个问题上。事实证明,这实际上是由于误读了查询意图的响应结构。同步意图需要一个带有“id”字段的对象数组。查询意图需要一个由id键入的字典

奇怪的是,尽管这是后端到后端的,而且谷歌方面没有抛出任何错误,但安卓客户端似乎能够很好地处理这一问题,而iOS客户端却没有

本质上,是的,在iOS的某个地方有一个bug,它的行为应该与Android相同,同样,对于错误的请求格式,应该有400个错误,但这个错误本质上是在我的响应结构中

正确的同步意图响应

[
{
“id”:“设备1”,
“在线”:没错,
“状态”:“成功”
},
{
“id”:“DeviceId2”,
“在线”:没错,
“状态”:“成功”
}
]
我的错误查询意图响应(与正确同步相同)

[
{
“id”:“设备1”,
“在线”:没错,
“状态”:“成功”
},
{
“id”:“DeviceId2”,
“在线”:没错,
“状态”:“成功”
}
]
正确的查询意图响应(键控字典,而不是数组)

{
“设备1”:
{
“在线”:没错,
“状态”:“成功”
},
“设备2”:
{
“在线”:没错,
“状态”:“成功”
}
}

因此,尽管iOS和Android的紧急行为有所不同,但始终是我。这是一个很容易错过的机会。希望这对某人有所帮助,因为没有错误返回意味着这一错误令人愤怒。

这似乎是一个客户端错误。如果您可以将其提交到公共问题跟踪程序中,我们可以将其重定向到应用程序团队进行调查:感谢链接,可以…@NickFelker终于找到了问题的根源,请参见下文。吸引你的注意力,以防你碰巧看到其他人跌跌撞撞。
{
    "requestId": "ARequestId",
    "payload": {
        "devices": [{
            "id": "ADeviceId",
            "online": true,
            "status": "SUCCESS"
        }]
    }
 }