Supprimer un appareil

Supprimer un appareil implique de le désactiver dans la structure. Un utilisateur peut le faire à l'aide de la Google Home app (GHA), et une application peut désactiver un appareil pour la maison connectée par programmation. La suppression de certains appareils est limitée. De plus, la suppression d'un appareil peut avoir une incidence sur votre structure et sur l'expérience utilisateur de votre application.

Éléments que vous pouvez supprimer

Vous pouvez supprimer les appareils suivants par programmation via les API Home :

  • Matter appareils pour lesquels votre application dispose d'autorisations.
  • Matter ponts, à condition que votre application ait accès à tous les appareils connectés via le pont. La suppression du pont supprime tous les Matter appareils qui y sont connectés.

Éléments que vous ne pouvez pas supprimer

Les appareils suivants ne peuvent pas être supprimés par programmation via les API Home :

  • Matter appareils pour lesquels votre application ne dispose pas des autorisations utilisateur.
  • Appareils individuels connectés derrière un Matter pont.
  • Cloud-to-cloud appareils associés.
  • Appareils à double chemin (appareils qui implémentent à la fois Matter et Cloud-to-cloud).

Points importants à prendre en compte avant de supprimer un appareil

Lorsque votre application supprime un appareil, celui-ci est supprimé de l'ensemble de la structure, ce qui affecte tous les utilisateurs et toutes les applications, y compris le GHA. Selon le type d'appareil, la désactivation d'un appareil peut avoir d'autres effets secondaires :

  • Appareils implémentant plusieurs types d'appareils : si un appareil possède plusieurs fonctions (par exemple, une ampoule connectée qui sert également de hub), sa suppression supprime également tous les appareils associés. L'application doit informer l'utilisateur si plusieurs fonctions de l'appareil seront affectées.
  • Historique des appareils : la suppression d'un appareil peut entraîner la suppression de son historique.
  • Surfaces partagées : soyez prudent lorsque vous supprimez des appareils sur des surfaces partagées, car cela peut avoir des conséquences imprévues pour les autres utilisateurs.
  • Authentification : la suppression d'un appareil ne doit être effectuée que sur des surfaces authentifiées, telles qu'un téléphone mobile, et non sur des appareils non authentifiés comme les téléviseurs. Cela enfreint le Règlement du programme pour les développeurs Google Home.

Supprimer un appareil

Vérifier si un appareil peut être supprimé est coûteux et ne doit être effectué que lorsque cela est nécessaire. Pour vérifier si un appareil peut être supprimé, utilisez la commande suivante :

swift let eligibility = try await device.decommissionEligibility

Appareils Matter

Vous pouvez supprimer un Matter appareil par programmation si l' appareil ne se trouve pas derrière un pont Matter.

Pour supprimer un appareil Matter, appelez decommission() sur celui-ci :

swift let decommissionedDeviceIDs = try await device.decommission()

Si l'appel ne génère pas d'erreur, il a réussi.

Vous pouvez vérifier si l'ID de l'appareil figure parmi ceux renvoyés par decommission() :

swift do { let decommissionedDeviceIDs = try await device.decommission() print("The following devices were decommissioned: \(decommissionedDeviceIDs)") } catch { print("An error occurred: \(error)") }

Appareils non Matter

Les appareils non-Matter ne peuvent pas être supprimés par programmation. Pour supprimer un appareil non-Matter Matter, vous pouvez envoyer une requête de synchronisation (voir Envoyer une requête de synchronisation), ou supprimer l'intégration Cloud-to-cloud cloud à cloud (voir Supprimer une intégration cloud à cloud lancée).

Si vous appelez decommission() sur un non-Matter appareil, une HomeError est générée.

Une fois que vous avez supprimé un appareil non-Matter vérifiez la présence de l'appareil pour vous assurer qu'il a bien été supprimé :

swift guard try await !self.context.devices().list().contains(where: { $0.id == deviceID }) else { // The device still exists in Home APIs }