logo hsb.horse
← Retour au blog

Blog

Concevez des blocs auto-limitants pour iOS avec FamilyControls + ManagedSettings

Comment les trois éléments AuthorizationCenter, FamilyActivityPicker et ManagedSettings sont combinés. Nous avons organisé les raisons pour lesquelles une conception basée sur des jetons devrait être utilisée à la place d'une saisie de domaine en texte libre et le cadre de sa mise en œuvre.

Publié:

Lorsque vous essayez de créer une application de contrôle de soi à l’aide de l’API Screen Time, trois frameworks apparaissent d’abord. Il s’agit de FamilyControls, ManagedSettings et ManagedSettingsUI. Si vous débutez dans le développement iOS, il peut être difficile de comprendre les rôles des frameworks et vous ne savez peut-être pas lequel importer. Comprendre d’abord les responsabilités de chacun empêchera la conception de s’effondrer plus tard.

Obtenez d’abord l’autorisation : AuthorizationCenter

Les applications ont besoin de l’autorisation de l’utilisateur pour utiliser l’API Screen Time afin d’appliquer les limites. Le point d’entrée est AuthorizationCenter.shared.requestAuthorization(for:) et AuthorizationCenter appartient au framework FamilyControls.

Il existe deux types d’autorisation. individual permet aux parents de contrôler les appareils de leurs enfants et selfRestriction permet aux parents de contrôler leurs propres appareils. Utilisez ce dernier pour les applications de maîtrise de soi. Si vous n’êtes pas familier avec le développement iOS, il est facile de confondre « autorisation » et « autorisation (autorisation d’informations de localisation, etc.) », mais l’autorisation fait ici référence à l’acquisition de l’autorité pour utiliser l’intégralité de la fonction Screen Time, et une fois obtenue, elle est maintenue par la suite.

Plutôt que de la demander à chaque démarrage de l’application, elle est conçue pour être appelée une seule fois lors du flux de démarrage initial.

Sélectionnez ce que vous souhaitez bloquer : FamilyActivityPicker

Apple fournit une interface utilisateur permettant de sélectionner les sites Web et les catégories que vous souhaitez bloquer en tant que FamilyActivityPicker. Ceci sera affiché sous forme de feuille SwiftUI.

Un problème courant ici pour les nouveaux utilisateurs d’iOS est qu’ils ne peuvent pas extraire les résultats de la sélection sous forme d’URL de texte libre ou de noms de domaine. Il est renvoyé sous forme de jeton enveloppé dans un modèle appelé FamilyActivitySelection. Ce jeton est conforme à Codable, il peut donc être enregistré au format JSON ou dans un fichier, mais la chaîne URL à l’intérieur ne peut pas être lue directement.

Si vous concevez avec l’idée de « Je veux gérer moi-même la liste des domaines », vous resterez coincé ici. Le principe est que la conception utilise FamilyActivitySelection renvoyé par FamilyActivityPicker tel quel. Si vous avez de l’expérience en développement Web, vous souhaiterez peut-être traiter les domaines comme des chaînes, mais l’API Screen Time d’iOS ne prend pas cette conception.

Appliquer les règles : ManagedSettings

C’est le rôle de ManagedSettings de faire respecter les limites réelles des choix faits par l’utilisateur. Écrivez des règles pour ManagedSettingsStore.

let store = ManagedSettingsStore()
store.shield.webDomains = selection.webDomains
store.shield.applicationCategories = .specific(selection.categories)

Si vous transmettez le token extrait de FamilyActivitySelection à shield.webDomains, un écran de bouclier s’affichera lors de l’accès au site Web correspondant. Un « bouclier » est un écran de blocage créé par Screen Time d’Apple qui recouvre Safari.

Toutes les règles peuvent être annulées avec store.clearAllSettings(). Cet appel est central à la mise en œuvre du processus de déverrouillage.

Cadre de conception

En combinant les trois, le flux de base est le suivant.

Au démarrage, vérifiez l’autorisation avec AuthorizationCenter et émettez une demande en cas d’autorisation. Affichez FamilyActivityPicker sur l’écran des paramètres et enregistrez la sélection de l’utilisateur sous FamilyActivitySelection dans le conteneur partagé du groupe d’applications. Écrivez des règles dans ManagedSettingsStore lors du démarrage du mode de mise au point et libérez-les avec clearAllSettings() à la fin du mode de mise au point.

Il peut sembler que les options de l’utilisateur soient limitées par rapport à la gestion de domaine en texte libre, mais c’est la spécification de cette plateforme. Vous n’avez pas à vous soucier de la maintenance ou d’un enregistrement incorrect, et vous pouvez utiliser la catégorisation d’Apple telle quelle. Au fur et à mesure que vous vous habituez à iOS, la décision de « choisir le cadre fourni par Apple » devient naturelle.

La complexité de la mise en œuvre se concentrera sur la personnalisation de l’écran du bouclier et le déverrouillage du bouclier sur l’application.