logo hsb.horse
← Zur Blog-Übersicht

Blog

Entwerfen Sie selbstlimitierende Blöcke für iOS mit FamilyControls + ManagedSettings

Wie die drei Elemente AuthorizationCenter, FamilyActivityPicker und ManagedSettings kombiniert werden. Wir haben die Gründe, warum ein tokenbasiertes Design anstelle der Freitext-Domain-Eingabe verwendet werden sollte, und den Rahmen seiner Implementierung zusammengestellt.

Veröffentlicht:

Beim Versuch, mithilfe der Screen Time API eine Selbstkontroll-App zu erstellen, tauchen zunächst drei Frameworks auf. Sie sind FamilyControls, ManagedSettings und ManagedSettingsUI. Wenn Sie neu in der iOS-Entwicklung sind, ist es möglicherweise schwierig, die Rollen von Frameworks zu verstehen, und Sie wissen möglicherweise nicht, welches Framework importiert werden soll. Wenn Sie zunächst die Verantwortlichkeiten jeder Person verstehen, können Sie verhindern, dass der Entwurf später zusammenbricht.

Zuerst die Erlaubnis einholen: AuthorizationCenter

Apps benötigen die Erlaubnis des Benutzers, die Screen Time API zum Durchsetzen von Grenzwerten zu verwenden. Der Einstiegspunkt ist AuthorizationCenter.shared.requestAuthorization(for:) und AuthorizationCenter gehört zum FamilyControls-Framework.

Es gibt zwei Arten der Autorisierung. Mit individual können Eltern die Geräte ihrer Kinder steuern, und mit selfRestriction können Eltern ihre eigenen Geräte steuern. Letzteres nutzen Sie für Selbstkontroll-Apps. Wenn Sie mit der iOS-Entwicklung nicht vertraut sind, kann es leicht passieren, dass „Autorisierung“ und „Erlaubnis (Erlaubnis für Standortinformationen usw.)“ verwechselt werden. Die Autorisierung bezieht sich hier jedoch auf den Erwerb der Berechtigung zur Nutzung der gesamten Bildschirmzeitfunktion. Sobald sie erhalten wurde, wird sie danach beibehalten.

Anstatt es jedes Mal anzufordern, wenn die App gestartet wird, ist es so konzipiert, dass es nur einmal während des ersten Startvorgangs aufgerufen wird.

Wählen Sie aus, was blockiert werden soll: FamilyActivityPicker

Apple bietet eine Benutzeroberfläche zum Auswählen der Websites und Kategorien, die Sie blockieren möchten, als FamilyActivityPicker. Dies wird als SwiftUI-Blatt angezeigt.

Ein häufiges Problem für iOS-Neulinge besteht darin, dass sie die Auswahlergebnisse nicht als Freitext-URLs oder Domänennamen extrahieren können. Es wird als Token zurückgegeben, das in ein Modell namens FamilyActivitySelection eingeschlossen ist. Dieses Token ist Codable-kompatibel, sodass es in JSON oder einer Datei gespeichert werden kann, die darin enthaltene URL-Zeichenfolge jedoch nicht direkt gelesen werden kann.

Wenn Sie mit der Idee entwerfen: „Ich möchte die Liste der Domains selbst verwalten“, bleiben Sie hier stecken. Die Voraussetzung ist, dass das Design FamilyActivitySelection verwendet, das von FamilyActivityPicker zurückgegeben wird, wie es ist. Wenn Sie Erfahrung mit der Webentwicklung haben, möchten Sie vielleicht Domänen als Strings behandeln, aber die Screen Time API von iOS übernimmt dieses Design nicht.

Regeln anwenden: ManagedSettings

Es ist die Aufgabe von ManagedSettings, die tatsächlichen Grenzen der vom Benutzer getroffenen Entscheidungen durchzusetzen. Schreiben Sie Regeln für ManagedSettingsStore.

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

Wenn Sie das aus FamilyActivitySelection extrahierte Token an shield.webDomains übergeben, wird beim Zugriff auf die entsprechende Website ein Schutzbildschirm angezeigt. Ein „Schutzschild“ ist ein von Apples Screen Time erstellter Blockbildschirm, der Safari überlagert.

Alle Regeln können mit store.clearAllSettings() aufgehoben werden. Dieser Aufruf ist von zentraler Bedeutung für die Umsetzung des Entsperrvorgangs.

Design-Framework

Durch die Kombination dieser drei ergibt sich folgender Grundablauf.

Überprüfen Sie beim Start die Autorisierung mit AuthorizationCenter und geben Sie bei Nichtautorisierung eine Anfrage aus. Zeigen Sie FamilyActivityPicker auf dem Einstellungsbildschirm an und speichern Sie die Auswahl des Benutzers als FamilyActivitySelection im freigegebenen Container der App-Gruppe. Schreiben Sie Regeln in ManagedSettingsStore, wenn Sie den Fokusmodus starten, und geben Sie sie mit clearAllSettings() frei, wenn Sie den Fokusmodus beenden.

Es mag den Anschein haben, dass die Möglichkeiten des Benutzers im Vergleich zur Freitext-Domänenverwaltung begrenzt sind, aber das ist die Spezifikation dieser Plattform. Sie müssen sich keine Gedanken über Wartung oder falsche Registrierung machen und können die Kategorisierung von Apple unverändert verwenden. Wenn Sie sich an iOS gewöhnen, liegt die Entscheidung nahe, „das von Apple bereitgestellte Framework zu verwenden“.

Die Komplexität der Implementierung wird sich auf die Anpassung des Shield-Bildschirms und die Freischaltung des Shields für die App konzentrieren.