Cómo quitar un dispositivo

Quitar un dispositivo implica darlo de baja de la estructura. Un usuario puede hacerlo con Google Home app (GHA), y una app puede dar de baja un dispositivo inteligente para la casa de forma programática. Existen limitaciones sobre qué dispositivos se pueden quitar. Además, quitar un dispositivo puede afectar la estructura y las experiencias del usuario de tu app.

Qué puedes quitar

Puedes quitar los siguientes dispositivos de forma programática a través de las APIs de Home:

  • Dispositivos Matter para los que tu app tiene permisos.
  • Puentes Matter, 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 dispositivos Matter 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:

  • Dispositivos Matter para los que tu app no tiene permisos del usuario.
  • Dispositivos individuales conectados detrás de un puente Matter.
  • 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, incluido el GHA. Según el tipo de dispositivo, es posible que haya 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 luz inteligente que también funciona como concentrador), 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.
  • Plataformas compartidas: Ten cuidado cuando borres dispositivos en plataformas compartidas, ya que esto puede tener consecuencias no deseadas para otras personas.
  • Autenticación: La eliminación de dispositivos solo debe realizarse en plataformas autenticadas, como un teléfono celular, no en dispositivos no autenticados, como TVs. Si lo haces, se incumplirán 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() en él:

val decommissionedDeviceIds = device.decommissionDevice()

Si la llamada no arroja un error, significa que se realizó correctamente.

Puedes verificar si el ID del dispositivo se encuentra entre los que devuelve decommissionDevice() de la siguiente manera:

if (decommissionedDeviceIds.contains(deviceId)) {
  println("Decommission successful!")
} else {
  println("Decommission failed!")
}

Dispositivos que no son de Matter

Los dispositivos que no son Matter no se pueden quitar de forma programática. Para quitar un dispositivo que no sea de Matter, puedes enviar una solicitud de sincronización (consulta Solicitud de sincronización) o borrar la integración de Cloud-to-cloud (consulta Cómo borrar una integración de nube a nube lanzada).

Si llamas a decommissionDevice() en un dispositivo que no es Matter, se arroja un HomeException.

Una vez que quites un dispositivo que no sea Matter, verifica su presencia 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!")
}

Dispositivos con varias fuentes

Los dispositivos multifuente son aquellos que usan las APIs de Cloud-to-cloud y Matter. Si verificas la elegibilidad para la baja de un dispositivo de este tipo, obtendrás un DecommissionIneligibleReason.multiSourceDevice, que indica que, debido a que el dispositivo es de varias fuentes, no se puede dar de baja.

Para quitar un dispositivo de varias fuentes, sigue este procedimiento:

  1. Quita la asociación de Cloud-to-cloud como se describe en Dispositivos que no son Matter.
  2. Retira el dispositivo Matter como se describe en Dispositivos Matter.

El orden de estos pasos es importante. Si intentas dar de baja el dispositivo Matter antes de quitar la asociación Cloud-to-cloud, se arroja un HomeException.