Configurações de MDM para Administradores
O RedirectWeb suporta a Configuração de Aplicações Geridas da Apple (Managed App Configuration), permitindo-lhe (administradores de TI) implementar e gerir as configurações da aplicação de forma centralizada nos dispositivos de funcionários/alunos através de uma solução de Gestão de Dispositivos Móveis (MDM), como Jamf, Intune, Kandji, etc.
Esta página descreve as chaves configuráveis, os comportamentos da aplicação, as melhores práticas e as limitações.
Visão Geral
Para Implementações via Apple Business Manager / Apple School Manager (VPP): A aplicação RedirectWeb padrão utiliza um modelo freemium de Compras na Aplicação (In-App Purchase), o qual não é elegível para compras em volume VPP. Para implementar a aplicação totalmente desbloqueada na sua organização, adquira a aplicação RedirectWeb Pro, que é uma versão de pagamento único concebida especificamente para distribuição via MDM/VPP.
Ao enviar configurações através do seu MDM, pode alcançar o seguinte:
- Regras Forçadas: Aplicar regras de redirecionamento a nível organizacional que os utilizadores não podem modificar nem eliminar.
- Distribuição Inicial de Regras: Distribuir um conjunto de regras modelo que serve como predefinição no primeiro lançamento da aplicação.
- Controlo da Interface: Restringir o acesso a funcionalidades específicas (como a Biblioteca) e indicar claramente dentro da aplicação que esta se encontra sob gestão organizacional.
- Obtenção de Regras Grandes (Fallback): Contornar os limites de tamanho do payload de MDM obtendo regras a partir de um servidor externo.
Casos de Uso
- Encaminhamento simples durante migrações de sistemas:
Ao migrar de um sistema interno antigo (ex:
legacy-crm.internal.local) para uma nova plataforma (ex:salesforce.com), distribua umenforcedRuleSet. Mesmo que os funcionários utilizem marcadores antigos, são automaticamente redirecionados para o novo sistema, eliminando pedidos de suporte de TI relativos a links desatualizados. - Assistência no Acesso à Intranet: Distribua regras de redirecionamento utilizando esquemas de URL personalizados para facilitar o acesso a recursos da intranet através de túneis VPN por aplicação (Per-App VPN), como o Omnissa Web.
Os envios de configuração de MDM são aplicados imediatamente apenas se o utilizador abrir a aplicação RedirectWeb. Embora a aplicação utilize tarefas em segundo plano para enviar atualizações de MDM para a extensão do browser de forma silenciosa, esta é uma execução de "melhor esforço" ditada pelo SO. O momento da execução é altamente imprevisível e a tarefa pode nem chegar a ser executada. Portanto, esta funcionalidade não deve ser utilizada para resposta a incidentes críticos (ex: tentar redirecionar instantaneamente todos os funcionários para um site de reserva poucos minutos após uma falha num serviço cloud).
Demo
O ficheiro plist utilizado no vídeo está disponível aqui: sample-mdm.plist, que utiliza chaves de dicionário (<dict>). Também está disponível o ficheiro sample-mdm-json-string.plist, que utiliza chaves de String JSON (mesmos dados).
No vídeo, foi utilizado o MDM da ManageEngine para implementar a configuração, mas a mesma configuração pode ser utilizada para outras soluções de MDM, desde que suportem a Configuração de Aplicações Geridas da Apple.
Dicionário (Dictionary) vs. String JSON: Embora o tipo Dicionário (Dictionary) seja mais seguro em termos de tipos, algumas soluções de MDM (como o Omnissa Workspace ONE UEM) não suportam o tipo Dicionário na configuração de aplicações geridas. Nesses casos, utilizar o tipo String JSON é uma solução alternativa recomendada.
Chaves Configuráveis
Implemente as seguintes chaves e valores para a Configuração de Aplicações Geridas através da sua consola de MDM, normalmente no formato plist.
| Nome da Chave | Tipo | Descrição |
|---|---|---|
enforcedRuleSet | Conjunto de regras | Um conjunto de regras aplicado com prioridade superior às regras normais. A primeira regra na lista tem precedência. Os utilizadores não podem editar, eliminar nem reordenar estas regras. Estão sempre ativas, ignorando o interruptor global da aplicação, e não sincronizam via iCloud. |
enforcedRuleSetJSONString | String JSON | Igual a enforcedRuleSet, mas o conjunto de regras é fornecido como uma string JSON não formatada. Isto é útil para plataformas MDM que não suportam o tipo Dicionário na configuração de aplicações geridas. |
prefilledRuleSet | Conjunto de regras | Um conjunto de regras criado em vez da regra de exemplo padrão quando um utilizador lança a aplicação pela primeira vez sem regras existentes. Uma vez distribuídas, estas funcionam como regras normais, permitindo a modificação e eliminação pelo utilizador e sincronização via iCloud. |
prefilledRuleSetJSONString | String JSON | Igual a prefilledRuleSet, mas o conjunto de regras é fornecido como uma string JSON não formatada. Isto é útil para plataformas MDM que não suportam o tipo Dicionário na configuração de aplicações geridas. |
organizationName | String | Apresenta "Gerido por [organizationName]" no topo do ecrã de definições na aplicação, indicando ao utilizador que a aplicação é gerida. |
managedConfigVersion | String | Uma string de versão arbitrária para a configuração. Apresentada na interface, permitindo que o suporte de TI verifique se o payload de MDM mais recente chegou ao dispositivo durante a resolução de problemas. |
showsLibrarySection | Boolean | Se definido como false, a funcionalidade de Biblioteca de Regras é ocultada e a secção é substituída por uma mensagem de erro "Restringido pela sua organização.". |
fallback | Fallback | Especifique isto quando as configurações excederem os limites de payload do MDM. A aplicação irá obter a configuração a partir do URL especificado em fallbackDataURL. |
fallbackJSONString | String JSON | Igual a fallback, mas a configuração de fallback é fornecida como uma string JSON não formatada. Isto é útil para plataformas MDM que não suportam o tipo Dicionário na configuração de aplicações geridas. |
Estas chaves são todas opcionais.
Tipos de Valores de Configuração
Conjunto de Regras
Cada objeto de regra tem o mesmo formato do que pode partilhar/exportar através da aplicação, mas terá de o converter de JSON para plist, desta forma:
...
<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>Minha regra forçada</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) | Um URL de endpoint de um ficheiro JSON/XML contendo conjuntos de regras. |
authToken | String | Um token de autenticação anexado ao cabeçalho HTTP ao obter dados do fallbackDataURL. (Utilizado 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 aplicações geridas. Como solução, as chaves terminadas em JSONString (como enforcedRuleSetJSONString, prefilledRuleSetJSONString e fallbackJSONString) aceitam os mesmos dados que os seus equivalentes de Dicionário, mas codificados como uma string JSON não formatada dentro de um elemento <string> de um plist.
A string JSON pode ser minificada ou formatada com quebras de linha e indentação para facilitar a leitura, como demonstrado no seguinte exemplo:
...
<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 estiverem presentes tanto uma chave de Dicionário como a sua chave JSONString correspondente (ex: ambas enforcedRuleSet e enforcedRuleSetJSONString), a chave de Dicionário terá precedência.
Avaliação de Regras e Resolução de Conflitos
- Se um
enforcedRuleSetfor fornecido, as suas regras são aplicadas com prioritude absoluta. - Se não existirem regras normais, mas existir um
prefilledRuleSet, oprefilledRuleSeté guardado como regras normais. - A "Regra de redirecionamento de exemplo" padrão é gerada apenas se não existirem regras de MDM configuradas e se não existirem regras normais.
Comportamento do URL de Fallback
Quando uma chave existe tanto no payload de MDM inline como nos dados obtidos via fallbackDataURL, a aplicação lida com o conflito da seguinte forma:
- Antes da Conclusão da Obtenção: As definições inline são estritamente priorizadas e utilizadas.
- Após Obtenção com Sucesso: Os dados recuperados do
fallbackDataURLsubstituem as definições inline correspondentes. - Após Falha na Obtenção: A aplicação continua a utilizar as definições inline.
- Chaves Independentes: As chaves que existem apenas no payload inline são sempre preservadas.
Feedback de MDM e Verificação de Estado
Pode verificar se a configuração foi aplicada com sucesso através do canal de feedback de MDM (com.apple.feedback.managed), caso a sua solução de MDM o suporte. Após processar a configuração (ou concluir a obtenção do URL), a aplicação devolve 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.