デバイスを削除する

デバイスを削除するとは、構造からデバイスの利用を停止することです。ユーザーは これを行うことができます。また、アプリはスマートホーム デバイスの利用をプログラムで 停止できます。Google Home app (GHA)削除できるデバイスには制限があります。また、デバイスを削除すると、アプリの構造とユーザー エクスペリエンスに影響する可能性があります。

削除できるもの

Home API を使用して、次のデバイスをプログラムで削除できます。

  • Matter アプリに権限が付与されているデバイス。
  • Matter ブリッジ。アプリがブリッジを介して接続されているすべての デバイスにアクセスできる場合。ブリッジを削除すると、ブリッジに接続されているすべての Matter デバイスが削除されます。

削除できないもの

次のデバイスは、Home API を使用してプログラムで削除することはできません。

  • アプリに ユーザー権限がない Matter デバイス。
  • Matter ブリッジの背後に接続されている個々のデバイス。
  • Cloud-to-cloud リンクされたデバイス。
  • デュアルパス デバイス(MatterCloud-to-cloudの両方を実装するデバイス)。

デバイスを削除する際の重要な考慮事項

アプリがデバイスを削除すると、デバイスは構造全体から削除され、 GHA を含むすべてのユーザーとすべてのアプリに影響します。 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 以外のMatterデバイスを削除するには、同期リクエストを発行するか(同期を リクエストするを参照)、Cloud-to-cloud連携を削除します(リリース済みのクラウド間 連携を削除するを参照)。

Matter 以外のデバイスで decommission() を呼び出すと、 非Matter デバイスで HomeError がスローされます。

Matter 以外の Matter デバイスを削除したら、デバイスが存在するかどうかを 確認して、正常に削除されたことを確認します。

swift guard try await !self.context.devices().list().contains(where: { $0.id == deviceID }) else { // The device still exists in Home APIs }