Nearby Connections 2.0:广告商重新启动,但 Discoverer 使用旧的广告商 ID 进行连接
Nearby Connections 2.0: Advertiser restarts, but Discoverer connects using old Advertiser id
我发现了一个有趣的结果
- 广告商公布了其端点 ID 'wjys'
- 发现者请求连接到 'wjys'
- 广告商重新启动(stopAllEndpoints,断开与 GoogleApiClient 的连接)
- 广告商公布了它的新端点 ID 'PChU'
- Discoverer 再次发现 Advertiser (id=PChU)
- Discoverer 使用旧 ID (wjys) 获取 onConnectionInitiated
- 两台设备都接受
- 令人惊讶的是,即使 Discoverer 使用旧的广告商 ID (wjys) 发送和接收消息,这两个设备仍然可以通信。
这种行为是错误吗?
这是一个错误。我已经在内部提交了一张票以进行修复。如果你停止广告,任何看到旧广告的人都不应该联系到你。如果您遇到任何其他类似的奇怪边缘情况,请告诉我们! :)
为了理解为什么会出现此错误,以下是有关 Connections 工作原理的一小部分:
端点 id 作为广告的一部分发送,它在 Discoverer 端形成一个 id-mac 地址对。当 Discoverer 被告知 'requestConnection' 时,它会尝试连接到与端点 ID 关联的 Mac 地址。如果设备已经停止广播,发现者将无法连接,但发现者会在内部重试几次以确保确定。如果广告商足够快地重新开始广告,它将再次变为可连接,并且发现者的重试可能会成功(因为蓝牙 mac 地址永远不会轮换)。即使广告不同也是如此。
我发现了一个有趣的结果
- 广告商公布了其端点 ID 'wjys'
- 发现者请求连接到 'wjys'
- 广告商重新启动(stopAllEndpoints,断开与 GoogleApiClient 的连接)
- 广告商公布了它的新端点 ID 'PChU'
- Discoverer 再次发现 Advertiser (id=PChU)
- Discoverer 使用旧 ID (wjys) 获取 onConnectionInitiated
- 两台设备都接受
- 令人惊讶的是,即使 Discoverer 使用旧的广告商 ID (wjys) 发送和接收消息,这两个设备仍然可以通信。
这种行为是错误吗?
这是一个错误。我已经在内部提交了一张票以进行修复。如果你停止广告,任何看到旧广告的人都不应该联系到你。如果您遇到任何其他类似的奇怪边缘情况,请告诉我们! :)
为了理解为什么会出现此错误,以下是有关 Connections 工作原理的一小部分: 端点 id 作为广告的一部分发送,它在 Discoverer 端形成一个 id-mac 地址对。当 Discoverer 被告知 'requestConnection' 时,它会尝试连接到与端点 ID 关联的 Mac 地址。如果设备已经停止广播,发现者将无法连接,但发现者会在内部重试几次以确保确定。如果广告商足够快地重新开始广告,它将再次变为可连接,并且发现者的重试可能会成功(因为蓝牙 mac 地址永远不会轮换)。即使广告不同也是如此。