Remover um dispositivo

Remover um dispositivo envolve desativá-lo da estrutura. Um usuário pode fazer isso usando o Google Home app (GHA), e um app pode desativar um dispositivo de casa inteligente de forma programática. Há limitações quanto aos dispositivos que podem ser removidos. Além disso, a remoção de um dispositivo pode afetar a estrutura e as experiências do usuário no app.

O que você pode remover

É possível remover programaticamente os seguintes dispositivos usando as APIs Home:

  • Matter dispositivos em que seu app tem permissões.
  • Matter, desde que o app tenha acesso a todos os dispositivos conectados por ela. A remoção da ponte remove todos os dispositivos Matter conectados a ela.

O que não é possível remover

Os seguintes dispositivos não podem ser removidos de forma programática pelas APIs Home:

  • Matter dispositivos em que o app não tem permissões do usuário.
  • Dispositivos individuais conectados a uma ponte Matter.
  • Cloud-to-cloud dispositivos vinculados.
  • Dispositivos de caminho duplo (que implementam Matter e Cloud-to-cloud).

Considerações importantes antes de remover um dispositivo

Quando seu app remove um dispositivo, ele é removido de toda a estrutura, afetando todos os usuários e apps, incluindo o GHA. Dependendo do tipo de dispositivo, pode haver outros efeitos colaterais ao desativar um dispositivo:

  • Dispositivos que implementam vários tipos de dispositivos: se um dispositivo tiver várias funções (por exemplo, uma luz inteligente que também funciona como um hub), a remoção dele também remove todos os dispositivos associados. O app precisa informar ao usuário se várias funções do dispositivo serão afetadas.
  • Histórico do dispositivo: a exclusão de um dispositivo pode resultar na remoção do histórico dele.
  • Plataformas compartilhadas: tenha cuidado ao excluir dispositivos em plataformas compartilhadas, porque isso pode ter consequências indesejadas para outras pessoas.
  • Autenticação: a remoção de dispositivos só deve ser feita em superfícies autenticadas, como um smartphone, e não em dispositivos não autenticados, como TVs. Isso viola as políticas para desenvolvedores do Google Home.

Remover um dispositivo

Verificar a qualificação de um dispositivo para remoção é caro e só deve ser feito quando necessário. Para verificar se um dispositivo está qualificado para remoção, use o comando a seguir:

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 Matter

É possível remover um dispositivo Matter de forma programática se ele não estiver atrás de uma ponte Matter.

Para remover um dispositivo Matter, chame decommissionDevice() nele:

val decommissionedDeviceIds = device.decommissionDevice()

Se a chamada não gerar um erro, ela foi bem-sucedida.

Verifique se o ID do dispositivo está entre os retornados pelo decommissionDevice() :

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

Dispositivos não Matter

Não é possível remover dispositivos que não são Matter de forma programática. Para remover um dispositivo que não é Matter, você pode emitir uma solicitação de sincronização (consulte Solicitar sincronização) ou excluir a integração do Cloud-to-cloud (consulte Excluir uma integração lançada de nuvem para nuvem).

Se você chamar decommissionDevice() em um dispositivo não Matter, uma HomeException será gerada.

Depois de remover um dispositivo que não é Matter, verifique se ele ainda aparece para confirmar se foi removido:

var removedDevice: HomeDevice? = null
runBlockingCustom {
  try {
    removedDevice = homeManager.devices().get(deviceId)
  } catch (exception: Exception) {
    println("removal successful!")
  }
}
if (removedDevice != null) {
  println("removal failed!")
}

Dispositivos com várias fontes

Os dispositivos de várias origens usam as APIs Cloud-to-cloud e Matter. Se você verificar a qualificação para desativação de um dispositivo desse tipo, vai receber um DecommissionIneligibleReason.multiSourceDevice, indicando que, como o dispositivo é de várias fontes, ele não pode ser desativado.

Para remover um dispositivo de várias origens, siga este procedimento:

  1. Remova a associação Cloud-to-cloud conforme descrito em Dispositivos que não são Matter.
  2. Desative o dispositivo Matter conforme descrito em Dispositivos Matter.

A ordem dessas etapas é importante. Se você tentar desativar o dispositivo Matter antes de remover a associação Cloud-to-cloud, um HomeException será gerado.