Quitar un dispositivo implica darlo de baja de la estructura. Un usuario puede hacerlo con la Google Home app (GHA), y una app puede dar de baja de forma programática un dispositivo inteligente para la casa. Existen limitaciones en cuanto a qué dispositivos se pueden quitar. Además, quitar un dispositivo puede afectar tu estructura y las experiencias de los usuarios de tu app.
Qué puedes quitar
Puedes quitar los siguientes dispositivos de forma programática a través de las APIs de Home:
- Matter dispositivos para los que tu app tiene permisos
- Matter puentes, siempre que tu app tenga acceso a todos los dispositivos conectados a través del puente (si quitas el puente, se quitarán todos los Matter dispositivos conectados a él)
Qué no puedes quitar
Los siguientes dispositivos no se pueden quitar de forma programática a través de las APIs de Home:
- Matter dispositivos para los que tu app no tiene permisos de usuario
- Dispositivos individuales conectados detrás de un Matter puente.
- Cloud-to-cloud dispositivos vinculados.
- Dispositivos de doble ruta (dispositivos que implementan Matter y Cloud-to-cloud)
Consideraciones importantes antes de quitar un dispositivo
Cuando tu app quita un dispositivo, este se quita de toda la estructura, lo que afecta a todos los usuarios y a todas las apps, incluida la GHA. Según el tipo de dispositivo, puede haber efectos secundarios adicionales al dar de baja un dispositivo:
- Dispositivos que implementan varios tipos de dispositivos: Si un dispositivo tiene varias funciones (por ejemplo, una lámpara inteligente que también funciona como una unidad central), quitarlo también quita todos los dispositivos asociados. La app debe informar al usuario si se verán afectadas varias funciones del dispositivo.
- Historial del dispositivo: Si borras un dispositivo, es posible que se quite su historial.
- Superficies compartidas: Ten cuidado cuando borres dispositivos en superficies compartidas, ya que esto puede tener consecuencias no deseadas para otras personas.
- Autenticación: La eliminación de dispositivos solo debe realizarse en superficies autenticadas, como un teléfono celular, no en dispositivos no autenticados como TVs. Si lo haces, incumples las Políticas para Desarrolladores de Google Home.
Cómo quitar un dispositivo
Verificar si un dispositivo es apto para quitarse es costoso y solo debe hacerse cuando sea necesario. Para verificar si un dispositivo es apto para quitarse, usa el siguiente comando:
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.") }
Dispositivos de Matter
Puedes quitar un dispositivo Matter de forma programática si el dispositivo no está detrás de un puente Matter.
Para quitar un dispositivo Matter, llama a
decommissionDevice():
val decommissionedDeviceIds = device.decommissionDevice()
Si la llamada no arroja un error, se realizó correctamente.
Puedes verificar si el ID del dispositivo se encuentra entre los que muestra decommissionDevice():
if (decommissionedDeviceIds.contains(deviceId)) { println("Decommission successful!") } else { println("Decommission failed!") }
Dispositivos que no son de Matter
Los dispositivos que no son de Matter no se pueden quitar de forma programática. Para quitar un dispositivo que no es de Matter puedes emitir una solicitud de sincronización (consulta Solicitar sincronización), o borrar la integración de Cloud-to-cloud (consulta Borrar una integración de nube a nube lanzada).
Si llamas a decommissionDevice() en un
dispositivo que no es Matter, se arroja una HomeException.
Una vez que quites un dispositivo que no es Matter, verifica la presencia del dispositivo para confirmar que se quitó correctamente:
var removedDevice: HomeDevice? = null runBlockingCustom { try { removedDevice = homeManager.devices().get(deviceId) } catch (exception: Exception) { println("removal successful!") } } if (removedDevice != null) { println("removal failed!") }