logo hsb.horse
← Voltar para o índice do blog

Blog

Projete blocos autolimitantes para iOS com FamilyControls + ManagedSettings

Como os três elementos AuthorizationCenter, FamilyActivityPicker e ManagedSettings são combinados. Organizamos as razões pelas quais um design baseado em token deve ser usado em vez da entrada de domínio de texto livre e a estrutura de sua implementação.

Publicado:

Ao tentar criar um aplicativo de autocontrole usando a API Screen Time, três estruturas aparecem primeiro. Eles são FamilyControls, ManagedSettings e ManagedSettingsUI. Se você é novo no desenvolvimento para iOS, pode ser difícil entender as funções dos frameworks e você pode ficar confuso sobre qual deles importar. Compreender primeiro as responsabilidades de cada pessoa evitará que o projeto entre em colapso posteriormente.

Obtenha permissão primeiro: AuthorizationCenter

Os aplicativos precisam da permissão do usuário para usar a API Screen Time para impor limites. O ponto de entrada é AuthorizationCenter.shared.requestAuthorization(for:) e AuthorizationCenter pertence à estrutura FamilyControls.

Existem dois tipos de autorização. individual permite que os pais controlem os dispositivos de seus filhos e selfRestriction permite que os pais controlem seus próprios dispositivos. Use este último para aplicativos de autocontrole. Se você não está familiarizado com o desenvolvimento iOS, é fácil confundir “autorização” e “permissão (permissão para informações de localização, etc.)”, ​​mas a autorização aqui se refere à aquisição de autoridade para usar toda a função Screen Time e, uma vez obtida, ela é mantida posteriormente.

Em vez de solicitá-lo sempre que o aplicativo for iniciado, ele foi projetado para ser chamado apenas uma vez durante o fluxo de inicialização inicial.

Selecione o que bloquear: FamilyActivityPicker

A Apple fornece uma interface de usuário para selecionar os sites e categorias que você deseja bloquear como FamilyActivityPicker. Isso será exibido como uma planilha SwiftUI.

Um problema comum aqui para pessoas novas no iOS é que elas não conseguem extrair os resultados da seleção como URLs de texto livre ou nomes de domínio. Ele é retornado como um token encapsulado em um modelo chamado FamilyActivitySelection. Este token é compatível com Codable, portanto pode ser salvo em JSON ou em um arquivo, mas a string de URL dentro dele não pode ser lida diretamente.

Se você projetar com a ideia de “Eu mesmo quero gerenciar a lista de domínios”, você ficará preso aqui. A premissa é que o design use FamilyActivitySelection retornado por FamilyActivityPicker como está. Se você tem experiência com desenvolvimento web, talvez queira tratar domínios como strings, mas a API Screen Time do iOS não aceita esse design.

Aplicar regras: ManagedSettings

É função do ManagedSettings impor os limites reais às escolhas feitas pelo usuário. Escreva regras para ManagedSettingsStore.

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

Se você passar o token extraído de FamilyActivitySelection para shield.webDomains, uma tela de escudo será exibida ao acessar o site correspondente. Um “escudo” é uma tela de bloqueio criada pelo Screen Time da Apple que se sobrepõe ao Safari.

Todas as regras podem ser canceladas com store.clearAllSettings(). Esta chamada é fundamental para a implementação do processo de desbloqueio.

Estrutura de design

Combinando os três, o fluxo básico é o seguinte.

Na inicialização, verifique a autorização com AuthorizationCenter e emita uma solicitação se não for autorizado. Exiba FamilyActivityPicker na tela de configurações e salve a seleção do usuário como FamilyActivitySelection no contêiner compartilhado do Grupo de Aplicativos. Escreva regras em ManagedSettingsStore ao iniciar o modo de foco e libere-as com clearAllSettings() ao encerrar o modo de foco.

Pode parecer que as opções do usuário são limitadas em comparação ao gerenciamento de domínios de texto livre, mas esta é a especificação desta plataforma. Não há necessidade de se preocupar com manutenção ou registro incorreto, e você pode usar a categorização da Apple como está. À medida que você se acostuma com o iOS, a decisão de “seguir o framework fornecido pela Apple” se torna natural.

A complexidade da implementação se concentrará na personalização da tela do escudo e no desbloqueio do escudo para o aplicativo.