Wenn ein Gerät entfernt wird, wird es aus der Struktur entfernt. Nutzer können dies über die Google Home app (GHA) tun und Apps können Smart-Home-Geräte programmatisch entfernen. Es gibt Einschränkungen hinsichtlich der Geräte, die entfernt werden können. Außerdem kann sich das Entfernen eines Geräts auf Ihre Struktur und die Nutzererfahrung für Ihre App auswirken.
Was Sie entfernen können
Sie können die folgenden Geräte programmatisch über die Home APIs entfernen:
- Matter Geräte, für die Ihre App Berechtigungen hat.
- Matter Bridges, sofern Ihre App Zugriff auf alle Geräte hat, die über die Bridge verbunden sind. Wenn Sie die Bridge entfernen, werden auch alle Matter damit verbundenen Geräte entfernt.
Was Sie nicht entfernen können
Die folgenden Geräte können nicht programmatisch über die Home APIs entfernt werden:
- Matter Geräte, für die Ihre App keine Nutzerberechtigungen hat.
- Einzelne Geräte, die hinter einer Matter Bridge verbunden sind.
- Cloud-to-cloud verknüpfte Geräte.
- Geräte mit zwei Pfaden (Geräte, die sowohl Matter als auch Cloud-to-cloudimplementieren).
Wichtige Überlegungen vor dem Entfernen eines Geräts
Wenn Ihre App ein Gerät entfernt, wird es aus der gesamten Struktur entfernt. Das wirkt sich auf alle Nutzer und alle Apps aus, einschließlich der GHA. Je nach Gerätetyp kann das Entfernen eines Geräts zusätzliche Nebenwirkungen haben:
- Geräte, die mehrere Gerätetypen implementieren: Wenn ein Gerät mehrere Funktionen hat, z. B. eine smarte Lampe, die auch als Hub fungiert, werden beim Entfernen auch alle zugehörigen Geräte entfernt. Die App sollte den Nutzer darüber informieren, wenn mehrere Gerätefunktionen betroffen sind.
- Geräteverlauf: Wenn Sie ein Gerät löschen, wird möglicherweise auch der Verlauf des Geräts entfernt.
- Gemeinsame Oberflächen: Seien Sie vorsichtig, wenn Sie Geräte auf gemeinsamen Oberflächen löschen, da dies unbeabsichtigte Folgen für andere haben kann.
- Authentifizierung: Das Entfernen von Geräten sollte nur auf authentifizierten Oberflächen wie einem Mobilgerät und nicht auf nicht authentifizierten Geräten wie Fernsehern erfolgen. Andernfalls liegt ein Verstoß gegen die Google Home-Richtlinien für Entwickler vor.
Gerät entfernen
Die Prüfung, ob ein Gerät entfernt werden kann, ist kostspielig und sollte nur bei Bedarf durchgeführt werden. Verwenden Sie den folgenden Befehl, um zu prüfen, ob ein Gerät entfernt werden kann:
val eligibility = device.checkDecommissionEligibility() if (eligibility is DecommissionEligibility.Ineligible) { println("The device cannot be decommissioned.") } else if (eligibility is DecommissionEligibility.EligibleWithSideEffects) { println("The device can be decommissioned but there will be side effects on other devices.") } else if (eligibility is DecommissionEligibility.Eligible) { println("The device can be decommissioned.") }
Matter-Geräte
Sie können ein Matter Gerät programmatisch entfernen, wenn sich das Gerät nicht hinter einer Matter Bridge befindet.
Rufen Sie
decommissionDevice()
auf, um ein Matter Gerät zu entfernen:
val decommissionedDeviceIds = device.decommissionDevice()
Wenn der Aufruf keinen Fehler auslöst, war er erfolgreich.
Sie können prüfen, ob die Geräte-ID zu den von decommissionDevice() zurückgegebenen IDs gehört:
if (decommissionedDeviceIds.contains(deviceId)) { println("Decommission successful!") } else { println("Decommission failed!") }
Nicht-Matter-Geräte
Nicht-Matter Geräte können nicht programmatisch entfernt werden. Wenn Sie ein Nicht-Matter Gerät entfernen möchten, können Sie eine Synchronisierungsanfrage senden (siehe Synchronisierung anfordern), oder die Cloud-to-cloud Integration löschen (siehe Gestartete Cloud-to-Cloud Integration löschen).
Wenn Sie decommissionDevice() für ein
Nicht-Matter Gerät aufrufen, wird eine HomeException
ausgelöst.
Nachdem Sie ein Nicht-Matter Gerät entfernt haben, prüfen Sie, ob es noch vorhanden ist, um zu bestätigen, dass es erfolgreich entfernt wurde:
var removedDevice: HomeDevice? = null runBlockingCustom { try { removedDevice = homeManager.devices().get(deviceId) } catch (exception: Exception) { println("removal successful!") } } if (removedDevice != null) { println("removal failed!") }