Configurações de MDM para Administradores
O RedirectWeb suporta a Configuração de Aplicativo Gerenciado (Managed App Configuration) da Apple, permitindo que você (administradores de TI) implante e gerencie as configurações do aplicativo centralmente em dispositivos de funcionários/alunos por meio de uma solução de Gerenciamento de Dispositivos Móveis (MDM), como Jamf, Intune, Kandji, etc.
Esta página descreve as chaves configuráveis, comportamentos do aplicativo, melhores práticas e limitações.
Visão Geral
Para Implantações via Apple Business Manager / Apple School Manager (VPP): O aplicativo RedirectWeb padrão usa um modelo freemium de Compra no Aplicativo (In-App Purchase), que não é elegível para compras em volume do VPP. Para implantar o aplicativo totalmente desbloqueado em sua organização, adquira o aplicativo RedirectWeb Pro, que é uma versão paga projetada especificamente para distribuição via MDM/VPP.
Ao enviar configurações através do seu MDM, você pode alcançar o seguinte:
- Regras Forçadas: Aplique regras de redirecionamento em toda a organização que os usuários não podem modificar ou excluir.
- Distribuição Inicial de Regras: Distribua um conjunto de regras de modelo que serve como padrão no primeiro lançamento do aplicativo.
- Controle de UI: Restrinja o acesso a recursos específicos (como a Biblioteca) e indique claramente dentro do aplicativo que ele está sob gerenciamento organizacional.
- Busca de Grandes Regras (Fallback): Ignore os limites de tamanho da carga útil do MDM buscando regras de um servidor externo.
Casos de Uso
- Roteamento contínuo durante migrações de sistema:
Ao migrar de um sistema interno legado (ex:
legacy-crm.internal.local) para uma nova plataforma (ex:salesforce.com), distribua umenforcedRuleSet. Mesmo que os funcionários usem favoritos antigos, eles são redirecionados automaticamente para o novo sistema, eliminando tickets de suporte de TI sobre links desatualizados. - Assistência de Acesso à Intranet: Distribua regras de redirecionamento usando esquemas de URL personalizados para facilitar o acesso aos recursos da intranet por meio de túneis VPN por aplicativo, como o Omnissa Web.
Os envios de configuração de MDM são aplicados imediatamente apenas se o usuário abrir o aplicativo RedirectWeb. Embora o aplicativo utilize tarefas em segundo plano para enviar atualizações de MDM para a extensão do navegador silenciosamente, esta é uma execução de "melhor esforço" ditada pelo sistema operacional. O tempo de execução é altamente imprevisível e a tarefa pode não ser executada. Portanto, este recurso não deve ser confiado para resposta a incidentes críticos em termos de tempo (ex: tentar redirecionar instantaneamente todos os funcionários para um site de backup em poucos minutos após uma interrupção de serviço na nuvem).
Demonstração
O arquivo plist usado no vídeo está disponível como sample-mdm.plist, que usa chaves de Dicionário (<dict>). Também existe o sample-mdm-json-string.plist, que usa chaves de String JSON (mesmos dados).
No vídeo, o MDM da ManageEngine foi usado para implantar a configuração, mas a mesma configuração pode ser usada para outras soluções de MDM, desde que suportem a Configuração de Aplicativo Gerenciado da Apple.
Dicionário vs. String JSON: Embora o tipo Dicionário seja mais seguro em termos de tipo, algumas soluções de MDM (como o Omnissa Workspace ONE UEM) não suportam o tipo Dicionário na configuração de aplicativo gerenciado. Nesses casos, usar o tipo String JSON é uma alternativa recomendada.
Chaves Configuráveis
Implante as seguintes chaves e valores para a Configuração de Aplicativo Gerenciado via seu console MDM, normalmente no formato plist.
| Nome da Chave | Tipo | Descrição |
|---|---|---|
enforcedRuleSet | Conjunto de Regras | Um conjunto de regras aplicado com prioridade maior do que as regras normais. A primeira regra na lista tem precedência. Os usuários não podem editar, excluir ou reordenar essas regras. Elas estão sempre ativas, ignorando o botão global de desativação do aplicativo, e não sincronizam via iCloud. |
enforcedRuleSetJSONString | String JSON | O mesmo que enforcedRuleSet, mas o conjunto de regras é fornecido como uma string JSON bruta. Isso é útil para plataformas MDM que não suportam o tipo Dicionário na configuração de aplicativo gerenciado. |
prefilledRuleSet | Conjunto de Regras | Um conjunto de regras criado no lugar da regra de exemplo padrão quando um usuário inicia o aplicativo pela primeira vez sem regras existentes. Uma vez distribuídas, elas agem como regras normais, permitindo modificação, exclusão e sincronização via iCloud pelo usuário. |
prefilledRuleSetJSONString | String JSON | O mesmo que prefilledRuleSet, mas o conjunto de regras é fornecido como uma string JSON bruta. Isso é útil para plataformas MDM que não suportam o tipo Dicionário na configuração de aplicativo gerenciado. |
organizationName | String | Exibe "Gerenciado por [organizationName]" no topo da tela de configurações do aplicativo, indicando ao usuário que o aplicativo é gerenciado. |
managedConfigVersion | String | Uma string de versão arbitrária para a configuração. Exibida na UI, permitindo que o suporte de TI verifique se a carga útil mais recente do MDM chegou ao dispositivo durante a resolução de problemas. |
showsLibrarySection | Boolean | Se definido como false, o recurso de Biblioteca de Regras é ocultado e a seção é substituída por uma mensagem de erro "Restrito pela sua organização". |
fallback | Fallback | Especifique isso quando o limite de tamanho da carga útil do MDM for excedido. O aplicativo buscará a configuração na URL especificada em fallbackDataURL. |
fallbackJSONString | String JSON | O mesmo que fallback, mas a configuração de fallback é fornecida como uma string JSON bruta. Isso é útil para plataformas MDM que não suportam o tipo Dicionário na configuração de aplicativo gerenciado. |
Essas chaves são todas opcionais.
Tipos de Valores de Configuração
Conjunto de Regras
Cada objeto de regra tem o mesmo formato daquele que você pode compartilhar/exportar via o aplicativo, mas você precisa convertê-lo de JSON para plist, assim:
...
<key>enforcedRuleSet</key>
<dict>
<key>kind</key>
<string>RedirectList</string>
<key>bundleID</key>
<string>io.github.mshibanami.RedirectWebForSafari</string>
<key>formatVersion</key>
<string>5</string>
<key>redirects</key>
<array>
<dict>
<key>kind</key>
<string>Redirect</string>
<key>type</key>
<string>originalRedirect</string>
<key>title</key>
<string>My enforced Rule</string>
<key>sourceURLPattern</key>
<dict>
<key>type</key>
<string>wildcard</string>
<key>value</key>
<string>https://example.com/1</string>
</dict>
<key>destinationURLPattern</key>
<string>https://google.com/search?q=1</string>
</dict>
</array>
</dict>
...
Fallback
| Nome da Chave | Tipo | Descrição |
|---|---|---|
fallbackDataURL | String (URL) | Uma URL de endpoint de um arquivo JSON/XML contendo conjuntos de regras. |
authToken | String | Um token de autenticação anexado ao cabeçalho HTTP ao buscar da fallbackDataURL. (Usado como Authorization: Bearer [authToken]). |
String JSON
Algumas plataformas MDM (ex: Omnissa Workspace ONE UEM) não suportam o tipo Dicionário (<dict>) na configuração de aplicativo gerenciado. Como alternativa, as chaves que terminam em JSONString (como enforcedRuleSetJSONString, prefilledRuleSetJSONString e fallbackJSONString) aceitam os mesmos dados que suas contrapartes de Dicionário, mas codificados como uma string JSON bruta dentro de um elemento plist <string>.
A string JSON pode ser minificada ou formatada com quebras de linha e recuo para legibilidade, conforme mostrado no exemplo a seguir:
...
<key>enforcedRuleSetJSONString</key>
<string>{
"kind": "RedirectList",
"bundleID": "io.github.mshibanami.RedirectWebForSafari",
"formatVersion": "5",
"redirects": [
{
"kind": "Redirect",
"type": "originalRedirect",
"title": "My enforced Rule",
"sourceURLPattern": {
"type": "wildcard",
"value": "https://example.com/1"
},
"destinationURLPattern": "https://google.com/search?q=1"
}
]
}</string>
...
Se tanto uma chave de Dicionário quanto sua chave JSONString correspondente estiverem presentes (ex: tanto enforcedRuleSet quanto enforcedRuleSetJSONString), a chave de Dicionário terá precedência.
Avaliação de Regras e Resolução de Conflitos
- Se um
enforcedRuleSetfor fornecido, suas regras serão aplicadas com prioridade absoluta. - Se não houver regras normais, mas um
prefilledRuleSetexistir, oprefilledRuleSetserá salvo como regras normais. - A "Regra de redirecionamento de exemplo" padrão é gerada apenas se nenhuma regra de MDM for configurada e não houver regras normais.
Comportamento da URL de Fallback
Quando uma chave existe tanto na carga útil do MDM embutida quanto nos dados buscados via fallbackDataURL, o aplicativo lida com o conflito da seguinte forma:
- Antes da Conclusão da Busca: As configurações embutidas são estritamente priorizadas e usadas.
- Após Busca Bem-sucedida: Os dados recuperados da
fallbackDataURLsubstituem as configurações embutidas correspondentes. - Após Falha na Busca: O aplicativo continua a usar as configurações embutidas.
- Chaves Independentes: Chaves que existem apenas na carga útil embutida são sempre preservadas.
Feedback de MDM e Verificação de Status
Você pode verificar se a configuração foi aplicada com sucesso via canal de feedback de MDM (com.apple.feedback.managed) se a sua solução de MDM suportar. Após processar a configuração (ou concluir a busca da URL), o aplicativo retorna os seguintes dados:
managedConfigVersion: A string de versão da tentativa de configuração.result:successouerror.messages: Um array contendo mensagens detalhadas de erro ou aviso, se aplicável.