订阅 Sonos 的活动 API

Subscribing to events with Sonos API

我正在使用 Sonos API 使用 Swift 构建 Sonos iPhone 应用程序,但遇到了绊脚石。当有人使用不同的应用程序或硬件按钮时,我想检测我的应用程序上的 state/volume / 元数据何时发生变化。我相信订阅事件是前进的方向。我已经在下面的参考 link 中复制了。

https://developer.sonos.com/build/direct-control/connect/

我按照描述向订阅路径发送了一个 HTTP POST 并收到了 200 ok 响应,但不知道下一步该做什么。我一直在使用 Xcode 并在 Postman 中进行测试。回调 url 已在开发者网站上注册并且 OAuth 令牌已验证。

如有任何帮助,我们将不胜感激。

谢谢,保罗

您必须托管服务才能接收事件。您的服务器应满足所有这些要求:

  • 至少支持具有持久连接(“keep-alive”)的 HTTP 1.1。这对于维持 Sonos 和您的客户之间来回的数据流很重要。
  • 使用 SSL/TLS v1.2 支持安全 HTTP。
  • 为 DNS 名称提供有效且可信的 CA 签名 X.509 证书。

您的事件服务还应该验证它收到的每个事件的 X-Sonos-Event-Signature。有关详细信息,请参阅 Sonos 开发人员门户上的 Subscribe

Control integration 的表单字段中输入您的回调 URL。

当您订阅的命名空间中的状态发生变化时,您应该会收到一个 HTTP POST 到您的回调 URL。例如,如果您订阅了一个组的 groupVolume 命名空间,那么当组音量发生变化时,您应该会收到一个组音量事件。尝试在 Sonos 应用程序中更改群组音量并确认您的回调 URL 收到事件。

这是文档中的示例组音量事件,在音量状态更改后发送:

    POST {YOUR_CALLBACK_BASE_URL} HTTP/1.1
    Content-Type: application/json
    Content-Length: 41
    X-Sonos-Household-Id: Sonos_1234567890
    X-Sonos-Event-Seq-Id: 1234
    X-Sonos-Event-Signature: 90192js8cjhvd7ebcjsfdfw
    X-Sonos-Namespace: groupVolume
    X-Sonos-Type: groupVolume
    X-Sonos-Target-Type: groupId
    X-Sonos-Target-Value: RINCON_00012345678001400:0
    {"volume":16,"muted":false,"fixed":false}