デバイスを削除するには、ストラクチャからデバイスの運用を停止します。ユーザーは 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
}