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 do hub remove todos os dispositivos Matter conectados a ele.

O que você não pode remover

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

  • Matter dispositivos para os quais seu aplicativo não possui permissões de 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, a desativação de um aparelho pode ter efeitos colaterais adicionais:

  • 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 aplicativo deve informar o usuário caso várias funções do dispositivo sejam afetadas.
  • Histórico do dispositivo: Excluir um dispositivo pode resultar na remoção do histórico do dispositivo.
  • Superfícies compartilhadas: Tenha cuidado ao excluir dispositivos em superfícies compartilhadas, pois isso pode ter consequências indesejadas para outras pessoas.
  • Autenticação: a remoção de dispositivos só deve ser feita em plataformas 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

Você pode remover um dispositivo Matter programaticamente se o dispositivo 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.

Você pode verificar se o ID do dispositivo está entre os retornados por 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 que não seja Matter, um HomeException será lançado.

Depois de remover um dispositivo que não é Matter, verifique se ele 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 elegibilidade para desativação de tal dispositivo, você obterá umDecommissionIneligibleReason.multiSourceDevice , indicando que, como o dispositivo é de múltiplas 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 não-matéria.
  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á lançado.