移除设备涉及从结构中停用设备。用户可以使用 Google Home app (GHA)执行此操作,应用也可以通过编程方式 停用智能家居设备。可以移除的设备存在限制。此外,移除设备可能会影响您的结构和应用的用户体验。
可以移除的内容
您可以通过 Home API 以编程方式移除以下设备:
- Matter 您的应用拥有权限的设备。
- Matter 网桥,前提是您的应用可以访问通过该网桥连接的所有 设备。移除网桥会移除连接到该网桥的所有 Matter 设备。
无法移除的内容
以下设备无法通过 Home API 以编程方式移除:
- 您的应用缺少用户权限的 Matter 设备。
- 连接到 Matter 网桥的各个设备。
- Cloud-to-cloud 关联的设备。
- 双路径设备(同时实现 Matter 和 Cloud-to-cloud的设备)。
移除设备前的重要注意事项
当您的应用移除设备时,该设备会从整个 结构中移除,从而影响所有用户和所有应用(包括 GHA)。根据设备的类型,停用设备可能会产生其他副作用:
- 实现多种设备类型的设备:如果设备具有多种功能(例如,智能灯同时也是中枢),移除该设备也会移除所有关联的设备。如果多个设备功能会受到影响,应用应告知用户。
- 设备历史记录:删除设备可能会导致设备的历史记录被移除。
- 共享界面:在共享界面上删除设备时请务必谨慎,因为这可能会给他人带来意想不到的后果。
- 身份验证:设备移除操作只能在经过身份验证的界面(例如手机)上执行,而不能在未经身份验证的设备(例如电视)上执行。 否则,将违反 Google Home 开发者政策。
移除设备
检查设备是否符合移除条件成本高昂,因此仅应在必要时执行此操作。如需检查设备是否符合移除条件,请使用以下命令:
swift
let eligibility = try await device.decommissionEligibility
Matter 设备
如果 Matter 设备未连接到 Matter 网桥,您可以通过编程方式移除该 设备。
如需移除 Matter 设备,请对其调用
decommission():
swift
let decommissionedDeviceIDs = try await device.decommission()
如果调用未抛出错误,则表示调用成功。
您可以检查设备的 ID 是否在 decommission() 返回的 ID 中:
swift
do {
let decommissionedDeviceIDs = try await device.decommission()
print("The following devices were decommissioned: \(decommissionedDeviceIDs)")
} catch {
print("An error occurred: \(error)")
}
非 Matter 设备
非 Matter 设备无法通过编程方式移除。如需 移除非 Matter 设备,您可以 发出同步请求(请参阅请求 同步), 或删除Cloud-to-cloud 集成(请参阅 删除已启动的云到云 集成)。
如果您对
非Matter设备调用 decommission(),系统会抛出 HomeError
。
移除非 Matter 设备后,请检查设备是否存在 ,以验证是否已成功移除:
swift
guard try await !self.context.devices().list().contains(where: { $0.id == deviceID })
else {
// The device still exists in Home APIs
}