Por que o Safari exibe que o endereço é inválido para um URL scheme? O Safari pode exibir um erro de endereço inválido ou de incapacidade de abrir a página quando uma página web navega para um esquema de URL personalizado que o sistema não consegue resolver para um manipulador disponível. Resolver esse problema exige a migração para Universal Links verificados ou a implementação de fallbacks acionados por gestos do usuário que encaminham usuários sem o aplicativo instalado para as lojas de aplicativos.
O alerta "O Safari não pode abrir a página porque o endereço é inválido" pode ocorrer quando o Safari móvel tenta navegar para um esquema de URL personalizado em um dispositivo que não possui o aplicativo nativo de destino ou um manipulador qualificado. Resolver esse problema envolve a transição de esquemas de URI legados para Universal Links verificados ou a implementação de arquiteturas de fallback compatíveis com gestos do usuário que direcionam usuários sem o aplicativo para as lojas sem disparar erros de protocolo não manipulado.
| Termo | Definição | Entidade Relacionada | Intenção de Busca |
|---|---|---|---|
| Custom URL Scheme | Um protocolo de URI definido pelo aplicativo que permite que links web externos iniciem aplicativos nativos. | Roteamento de Deep Link | Informativa / Comercial |
| Universal Links | Um mecanismo HTTPS padrão que vincula domínios web verificados diretamente a visualizações de aplicativos iOS nativos. | Mobile Deep Linking | Técnica / Informativa |
| Web to App | O processo arquitetural de encaminhar visitantes do navegador web para aplicativos móveis nativos. | Funil de Conversão | Informativa |
Por que o Safari exibe o erro de Endereço Inválido em esquemas personalizados

A causa raiz: Como o WebKit responde a protocolos de URI não registrados
Quando um usuário interage com um link em uma página web móvel, o motor de renderização do navegador avalia o esquema de URI para determinar o protocolo de transporte ou o manipulador de aplicativo apropriado. No Apple Safari, movido pelo motor WebKit, protocolos web padrão como http:// e https:// são manipulados internamente pelo carregador de recursos de rede.
Quando uma página web instrui o Safari a navegar para um esquema de URI personalizado (como myapp://product/detail/1024), o sistema operacional tenta localizar um aplicativo instalado que tenha registrado esse esquema específico na configuração do seu bundle CFBundleURLTypes. Se o aplicativo de destino estiver presente, o iOS pode iniciar o app nativo. No entanto, se o aplicativo não estiver instalado no dispositivo, o esquema não pode ser resolvido através de DNS padrão ou camadas de transporte web. Como o Safari não possui um manipulador web interno para esquemas personalizados, tentar navegar para um protocolo personalizado não manipulado pode exibir um alerta informando que o Safari não pode abrir a página porque o endereço é inválido.
A barreira do Sandbox: Por que o JavaScript não consegue verificar o status de instalação de um aplicativo nativo
Desenvolvedores front-end frequentemente tentam contornar esse alerta escrevendo JavaScript no lado do cliente que verifica se um aplicativo está instalado antes de disparar o esquema. Sob a arquitetura de segurança e privacidade do sistema operacional da Apple, essa verificação é estruturalmente indisponível para conteúdo web.
O Safari móvel impõe um isolamento de sandbox rigoroso entre o conteúdo web e o sistema operacional host. O JavaScript da página web está proibido de consultar registros do sistema de arquivos local, inspecionar pacotes de aplicativos instalados ou verificar se um esquema de URI externo possui um manipulador ativo. Como o navegador não pode verificar o status de instalação com antecedência, executar um esquema personalizado não manipulado em um dispositivo sem o app correspondente corre o risco de disparar o alerta de falha do WebKit.
Danos à Experiência do Usuário: Como alertas do sistema nativo aumentam as taxas de rejeição em páginas de destino
Encontrar um modal de sistema informando que “o endereço é inválido” prejudica a confiança do usuário e interrompe os funis de conversão:
- Ansiedade de Segurança: Usuários podem interpretar alertas de “endereço inválido” como indicadores de um site quebrado, software não confiável ou avisos de segurança.
- Interrupção do Funil: O alerta exige que o usuário reconheça e feche uma caixa de diálogo de bloqueio antes de interagir com a página novamente, aumentando a desistência imediata.
- Hand-off Fragmentado para a Loja: Se um alerta de não manipulado aparecer simultaneamente com scripts de redirecionamento secundário para a loja, a transição para a App Store parece desconexa.
Por que as soluções alternativas históricas falham nas versões modernas do WebKit
As limitações de sondagem com Iframe oculto no Safari moderno
Em versões anteriores do iOS, desenvolvedores frequentemente utilizavam sondagem com iframe oculto. Um script injetava um elemento <iframe> invisível no DOM e definia sua origem para o esquema personalizado (myapp://), enquanto executava um temporizador JavaScript concorrente. A intenção era que um app instalado fosse iniciado sem navegar na janela principal, enquanto um app não instalado falharia silenciosamente dentro do quadro.
Nos navegadores móveis contemporâneos, essa abordagem não é confiável:
- O WebKit moderno aplica restrições de navegação e sandbox que podem limitar transferências de protocolo externo a partir de iframes, especialmente quadros em sandbox.
- Tentar carregar esquemas não registrados dentro de iframes ainda pode disparar caixas de diálogo de erro ao nível do navegador ou falhar silenciosamente sem fornecer um fallback limpo.
- Como a sondagem por iframe é inconsistente entre as versões do iOS e contextos de sandbox, ela não deve ser tratada como um mecanismo confiável para avaliar a presença de um app.

Cascata de window.location baseada em temporizador: Por que navegadores modernos restringem redirecionamentos automatizados
Outra técnica legada envolvia executar uma cascata baseada em temporizador usando window.location.href:
// Anti-padrão legado: Frágil e restrito em navegadores modernos
window.location.href = "myapp://product/detail";
setTimeout(function() {
window.location.href = "https://apps.apple.com/app/id123456789";
}, 2000);
Essa abordagem cria múltiplos modos de falha técnica e de experiência do usuário:
- Alertas Concorrentes: Se o app não estiver instalado, o Safari pode exibir o popup “endereço é inválido” ao avaliar o esquema personalizado, forçando o usuário a fechar o alerta enquanto o temporizador em segundo plano inicia uma navegação secundária.
- Redirecionamento Não Intencional: Se o app estiver instalado e for aberto com sucesso, o navegador ainda pode executar o temporizador pendente ao retornar do segundo plano, redirecionando o usuário para a App Store desnecessariamente quando ele volta ao Safari.
Ativação do Usuário e Políticas de Navegação do Navegador
Navegadores móveis modernos impõem políticas de ativação do usuário que restringem navegações não solicitadas. O WebKit limita redirecionamentos de janela automatizados e transferências de protocolo originadas de temporizadores em segundo plano, callbacks assíncronos ou scripts de carregamento sem interação recente do usuário.
Transferências programáticas que executam sem uma interação direta do usuário são menos previsíveis e podem ser suprimidas dependendo do contexto do navegador. Para um roteamento confiável, as transferências para aplicativos nativos devem originar-se diretamente de um gesto explícito do usuário, como um toque físico em um elemento interativo.
Por que os Universal Links foram projetados pela Apple como a solução preferencial
Para eliminar os modos de falha de esquemas de URL proprietários, a Apple introduziu os Universal Links no iOS 9. Os Universal Links substituem esquemas personalizados (myapp://) por URLs HTTPS padrão e verificadas (https://app.example.com/product/1024).
Ao ancorar o deep linking na infraestrutura HTTPS padrão, a Apple removeu o modo de falha de protocolo não registrado. Se o aplicativo estiver instalado, associado e qualificado no contexto de navegação atual, o iOS roteia o link diretamente para manipuladores nativos; se o aplicativo não estiver instalado, o Safari continua navegando na URL HTTPS como um recurso web normal, carregando uma página web ou fallback da loja sem alertas de protocolo.
Como os Universal Links eliminam o alerta de Endereço Inválido

A base HTTPS: Removendo o modo de falha de protocolo não registrado
A principal diferença entre um esquema de URL personalizado e um Universal Link reside na forma como a pilha de rede do navegador avalia a URL solicitada:
- Esquema Personalizado (
myapp://): Um protocolo não padrão. O WebKit não consegue resolvê-lo via DNS ou transporte web padrão. Se nenhum app registrado manipular o esquema, a solicitação pode exibir uma falha de endereço inválido. - Universal Link (
https://app.example.com): Uma URL HTTPS padrão totalmente qualificada. O WebKit resolve e carrega endereços HTTPS nativamente.
Como um Universal Link é fundamentalmente uma URL web válida, o Safari nunca encontra um protocolo não registrado. Se a transferência para o app nativo não ocorrer, o Safari simplesmente carrega o conteúdo web hospedado nesse endereço.
A associação bidirecional: Coordenando direitos nativos com o arquivo AASA hospedado
Os Universal Links estabelecem um roteamento verificado através de uma associação entre o binário do aplicativo móvel e o domínio do site:
- Direito de Aplicativo: O aplicativo iOS declara um direito de
Associated Domainscontendo a string do domínio de destino:applinks:app.example.com. - Declaração do Servidor: O domínio do site hospeda um arquivo JSON em
https://app.example.com/.well-known/apple-app-site-association(AASA). Esse arquivo especifica identificadores de aplicativos autorizados e componentes de correspondência de caminho. - Resolução ao Nível do SO: Quando o usuário instala o app, o iOS valida a associação do domínio. Quando um link associado é tocado, o sistema operacional avalia se um app qualificado pode manipular o destino.
Degradação web graciosa: O que acontece quando um app não está instalado
Quando um usuário sem o aplicativo toca em um Universal Link:
- O sistema operacional iOS avalia a URL em relação ao seu registro de associações verificadas.
- Não encontrando nenhum app instalado correspondente ao domínio, o iOS delega o link ao Safari como navegação web padrão.
- O Safari carrega a página web hospedada nessa URL sem exibir nenhum alerta de erro do sistema.
- A página web hospedada pode exibir conteúdo de produto relevante, apresentar um CTA da App Store ou coordenar a recuperação de parâmetros adiados.
Gerenciando a ressalva de navegação no mesmo domínio do Safari usando subdomínios dedicados
Ao implementar Universal Links em páginas web, as equipes devem considerar o comportamento de navegação no mesmo domínio do Safari, conforme documentado na Documentação do Desenvolvedor Apple sobre Como permitir que apps e sites façam links para o seu conteúdo.
Se um usuário navega em uma página web hospedada em https://example.com/promo e toca em um Universal Link que aponta para o exato mesmo domínio (https://example.com/product/1024), o Safari assume que o usuário pretende continuar navegando no site e carrega a página web em vez de abrir o app nativo.
Usar um host de roteamento associado separadamente evita o caso de continuação no mesmo domínio documentado e permite que o Universal Link seja avaliado para roteamento nativo quando sua associação de domínio for válida:
- Hospede o site principal em seu domínio raiz ou subdomínio web:
https://www.example.com. - Configure o roteamento de Universal Link através de um subdomínio dedicado e associado separadamente:
https://app.example.com.
Tocar entre limites de subdomínios distintos satisfaz as heurísticas de navegação do Safari, suportando a execução direta do aplicativo nativo.
Implementando transferências Web-to-App resilientes com SDKs JavaScript
Arquitetando fallbacks de múltiplos níveis: Universal Links primeiro, Fallback explícito depois
Arquiteturas de web-to-app em produção implantam uma cascata de redirecionamento de múltiplos níveis:
- Nível 1 (Universal Links): O botão principal de call-to-action invoca um Universal Link verificado que aponta para um subdomínio associado. Em dispositivos com o app instalado, isso permite roteamento nativo sem o modo de alerta de esquema personalizado não registrado.
- Nível 2 (Fallback Web Contextual): Se o app não estiver instalado, o Universal Link navega suavemente para a página de destino web hospedada, apresentando um botão de download da App Store.
- Nível 3 (Fallback de Esquema Personalizado): Onde esquemas personalizados legados (
myapp://) são mantidos para versões mais antigas do sistema operacional ou containers incorporados específicos, invoque-os como um fallback que deve geralmente originar-se de interação explícita do usuário em vez de scripts automatizados.

Usando a Page Visibility API como um sinal de heurística de supressão
Ao implementar temporizadores de fallback junto com esquemas personalizados, scripts de cliente avaliam se o documento perdeu a visibilidade do primeiro plano para cancelar redirecionamentos pendentes para a loja. Como o JavaScript não pode inspecionar diretamente a execução do processo nativo, arquiteturas de frontend utilizam o Padrão HTML WHATWG sobre Visibilidade de Página.
Quando uma guia do navegador transita para o segundo plano após uma transferência externa, o script detecta a mudança de visibilidade:
// Atraso de fallback ilustrativo; calibre com base nos requisitos de UX do aplicativo
var fallbackTimer = setTimeout(function() {
if (!document.hidden) {
// O documento permaneceu visível em primeiro plano; prossiga com CTA de fallback
window.location.href = "https://apps.apple.com/app/id123456789";
}
}, 2000);
document.addEventListener("visibilitychange", function() {
if (document.hidden) {
// O documento tornou-se oculto; suprima o temporizador de fallback pendente
clearTimeout(fallbackTimer);
}
});
Uma mudança de visibilidade indica que o documento tornou-se oculto, o que serve como um sinal de supressão útil para evitar redirecionamentos falsos para a loja. No entanto, mudanças de visibilidade não provam que um aplicativo de destino específico abriu com sucesso, já que ações do usuário como alternar guias, minimizar o navegador ou bloquear o dispositivo também disparam transições de estado de segundo plano. O atraso de 2000ms é uma heurística ilustrativa e não deve ser tratado como um limiar de protocolo padronizado.
Vinculando gestos do usuário a âncoras de Universal Link progressivas
Para roteamento de link direto, desenvolvedores front-end vinculam elementos de âncora progressivos diretamente a endpoints de Universal Link verificados. Quando ocorrem cliques do usuário, o navegador navega no link HTTPS, permitindo que o iOS intercepte a rota.
Em funis de aquisição avançados, plataformas como OpoInstall suportam a recuperação de parâmetros adiados como um canal de ingestão auxiliar separado. Ao registrar o contexto web no momento do clique e correlacioná-lo com sinais de inicialização pós-instalação via ganchos de SDK nativo, o aplicativo nativo pode recuperar parâmetros de campanha personalizados na inicialização inicial sem alterar a validação padrão da URL do Universal Link. Revise a documentação de integração do SDK para detalhes sobre a integração de listeners de atribuição adiada junto com manipuladores nativos de Universal Link.
[Usuário toca no botão CTA Web]
│
▼
[Avaliar Primitiva de Roteamento]
┌─────────┴─────────┐
▼ ▼
[Esquema Personalizado: myapp://] [Universal Link: https://]
│ │
▼ ▼
[Safari tenta resolução] [SO avalia associação]
├─ App resolve -> App abre ├─ App instalado + qualificado -> App nativo
└─ Sem manipulador / bloqueado -> └─ Não instalado ->
Pode exibir alerta de sistema Carrega destino web graciosamente
"Endereço é inválido" │
▼
[Apresenta App Store ou Fallback Web]
Implementação do lado do cliente: Roteamento de Universal Link e manipulação de fallback
Configurando scripts de redirecionamento de Universal Link modernos em HTML/JavaScript front-end
A implementação front-end estrutura um elemento de âncora interativo que se vincula diretamente a uma URL de Universal Link verificada em um subdomínio associado, fornecendo um fallback de aprimoramento progressivo se a execução do script for bloqueada.
Recepção nativa no iOS em arquiteturas de ciclo de vida baseadas em cena
Para aplicativos iOS baseados em cena, Universal Links entregues pelo Safari são processados através do ciclo de vida UIWindowSceneDelegate: scene(_:willConnectTo:options:) na inicialização a frio e scene(_:continue:) quando o aplicativo está em execução ou suspenso na memória. A implementação nativa valida se o NSUserActivity recebido tem um tipo de atividade NSUserActivityTypeBrowsingWeb, extrai a webpageURL e valida a rota.
A implementação técnica abaixo demonstra como configurar a âncora progressiva do front-end e lidar com URLs de Universal Link recebidas com segurança em Swift nativo.
// Web: Transferência de Universal Link front-end com fallback de âncora progressiva
// Configura um destino HTTPS Universal Link limpo com sanitização de consulta no lado do cliente.
(function() {
var ctaButton = document.getElementById("openAppBtn");
if (!ctaButton) return;
// 1. Estado inicial: Universal Link verificado em subdomínio dedicado evita a continuação no mesmo domínio do Safari
var targetBaseUrl = "https://app.example.com/detail/1024";
// 2. Extraia e sanitize parâmetros de consulta dinâmicos da URL da página atual
var urlParams = new URLSearchParams(window.location.search);
var rawId = urlParams.get("id") || "";
var rawPromo = urlParams.get("promo_code") || "";
var rawSource = urlParams.get("utm_source") || "web_landing";
var idRegex = /^[A-Za-z0-9_-]{1,64}$/;
var targetId = idRegex.test(rawId) ? rawId : "";
var promoCode = idRegex.test(rawPromo) ? rawPromo : "";
var utmSource = idRegex.test(rawSource) ? rawSource : "web_landing";
var finalUrl = targetBaseUrl + "?utm_source=" + encodeURIComponent(utmSource);
if (targetId.length > 0) {
finalUrl += "&id=" + encodeURIComponent(targetId);
}
if (promoCode.length > 0) {
finalUrl += "&promo_code=" + encodeURIComponent(promoCode);
}
// Aprimoramento progressivo: o href da âncora fornece navegação direta de Universal Link sem alertas
if (ctaButton.tagName.toLowerCase() === "a") {
ctaButton.setAttribute("href", finalUrl);
} else {
ctaButton.addEventListener("click", function(e) {
e.preventDefault();
window.location.assign(finalUrl);
});
}
})();
// iOS: SceneDelegate.swift - Processamento de Universal Link & Sanitização de Rota
// Exemplo de integração. Verifique as assinaturas de método e o roteamento em relação à sua arquitetura implantada.
import UIKit
struct ValidatedAppRoute {
let path: String
let queryParams: [String: String]
}
class AppRouteValidator {
private static let allowedHosts = Set(["app.example.com"])
private static let allowedPathPrefixes = ["/detail/", "/promo/"]
private static let allowedKeys = Set(["id", "promo_code", "utm_source"])
static func validate(url: URL) -> ValidatedAppRoute? {
guard let scheme = url.scheme?.lowercased(), scheme == "https" else {
return nil
}
guard let host = url.host?.lowercased(), allowedHosts.contains(host) else {
return nil
}
let path = url.path
guard allowedPathPrefixes.contains(where: { path.hasPrefix($0) }) else {
return nil
}
var sanitizedParams: [String: String] = [:]
var seenKeys = Set<String>()
if let components = URLComponents(url: url, resolvingAgainstBaseURL: false),
let queryItems = components.queryItems {
let validChars = CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-")
for item in queryItems {
// Validação fechada: rejeita URL se existirem chaves de consulta desconhecidas
guard allowedKeys.contains(item.name), !seenKeys.contains(item.name) else {
return nil
}
seenKeys.insert(item.name)
let value = item.value ?? ""
if value.count <= 64 && value.rangeOfCharacter(from: validChars.inverted) == nil {
sanitizedParams[item.name] = value
} else {
return nil
}
}
}
return ValidatedAppRoute(path: path, queryParams: sanitizedParams)
}
}
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
func scene(
_ scene: UIScene,
willConnectTo session: UISceneSession,
options connectionOptions: UIScene.ConnectionOptions
) {
guard let _ = (scene as? UIWindowScene) else { return }
// Tratar inicialização a frio via Universal Link
if let userActivity = connectionOptions.userActivities.first(where: { $0.activityType == NSUserActivityTypeBrowsingWeb }),
let webpageURL = userActivity.webpageURL {
processIncomingUniversalLink(url: webpageURL)
}
}
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
// Tratar retomada a quente via Universal Link
if userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let webpageURL = userActivity.webpageURL {
processIncomingUniversalLink(url: webpageURL)
}
}
private func processIncomingUniversalLink(url: URL) {
// Impor lista de permissões estrita e sanitização no Universal Link recebido
if let route = AppRouteValidator.validate(url: url) {
DispatchQueue.main.async {
AppNavigator.shared.navigateTo(path: route.path, params: route.queryParams)
}
} else {
DispatchQueue.main.async {
AppNavigator.shared.navigateToDefaultHome()
}
}
}
}
// Coordenador de navegação específico do aplicativo (não é uma API de SDK)
class AppNavigator {
static let shared = AppNavigator()
func navigateTo(path: String, params: [String: String]) {
// Executar transição de controlador de visualização de interface interna com base no caminho e parâmetros de consulta
}
func navigateToDefaultHome() {
// Voltar com segurança para a tela inicial em deep links malformados ou não reconhecidos
}
}
Sanitizando parâmetros de entrada: Impondo filtragem estrita de lista de permissões em rotas nativas
De acordo com o Guia de Teste de Segurança de Aplicativos Móveis da OWASP sobre Deep Links Inseguros, todos os parâmetros entregues via Universal Links devem ser tratados como entrada não confiável:
- Validação de Caminho: Verifique se o caminho da URL corresponde a uma lista de permissões autorizada de controladores de exibição (
/detail/,/promo/). - Filtragem de Consulta: Imponha chaves de consulta permitidas (
id,promo_code,utm_source) e descarte chaves inesperadas. - Limites de Comprimento e Caractere: Restrinja os valores dos parâmetros a conjuntos de caracteres alfanuméricos (
caracteres).
Matriz de Protocolo de Deep Linking do Safari e Mitigação de Erros
Lista de verificação abrangente de comparação de protocolos e prevenção de erros
Selecionar o protocolo de deep linking apropriado é crítico para prevenir erros de navegação no WebKit. A matriz abaixo compara os principais mecanismos de deep linking em relação aos comportamentos de erro e requisitos da plataforma:
Comparando URL Schemes, Universal Links e Smart App Banners em relação aos comportamentos de erro
| Protocolo de Roteamento | Protocolo Subjacente | Comportamento quando o App está instalado | Comportamento quando o App não está instalado | Risco de alerta de "Endereço Inválido" |
|---|---|---|---|---|
| Custom URL Scheme | myapp:// |
Inicia o aplicativo nativo se registrado | Pode disparar alerta de “Endereço inválido” no Safari | Possível (Ocorre quando nenhum app manipula o esquema) |
| Universal Link | https:// |
Abre o app associado quando qualificado no contexto atual | Continua a navegação web para a página de destino hospedada | Baixo (Elimina o modo de erro de esquema não registrado) |
| Apple Smart App Banner | WebKit Nativo <meta> |
Apresenta affordance nativa para abrir o app | Apresenta affordance nativa para visualizar a App Store | Não aplicável à falha de esquema personalizado não registrado |
| Custom Web Banner | JavaScript + Universal Link | Executa o despertar direto do app via SDK | Dispara redirecionamento para a loja ou CTA web | Baixo (Usa roteamento HTTPS verificado) |
Perguntas Frequentes (FAQ)
Posso detectar se um aplicativo iOS está instalado usando JavaScript antes de disparar um URL scheme?
Como os Universal Links previnem o erro de endereço inválido no Safari?
Por que um Universal Link às vezes abre o site em vez do app no Safari?
Resumo e Estrutura de Decisão
O alerta "O Safari não pode abrir a página porque o endereço é inválido" é uma consequência operacional do uso de esquemas de URI personalizados em dispositivos onde não existe um manipulador de aplicativo correspondente. Confiar na sondagem legada por iframe oculto ou cascatas de temporizador automatizadas introduz fragilidade de navegação e prejudica os funis de conversão de web-to-app.
Migrar para Universal Links verificados remove o modo de falha de protocolo personalizado não registrado e fornece um caminho de fallback HTTPS confiável. Ao combinar associações HTTPS verificadas com padrões de integração web compatíveis com gestos do usuário, as equipes de engenharia reduzem alertas disruptivos no navegador, preservam parâmetros de marketing durante downloads na loja e suportam experiências de integração confiáveis em funis web móveis.
Para saber como implementar Universal Links e passagem automática de parâmetros, revise a documentação de integração do SDK.
Materiais Relacionados
- Conceitos: Custom URL Scheme, Universal Links, Redirecionamento Web to App, Mitigação de Erros do WebKit, Restauração de Cena
- Tecnologias: Apple WebKit, iOS UIKit, Apple App Site Association (AASA), SDK JS Web OpoInstall
- Padrões: IETF RFC 3986 Uniform Resource Identifier, Apple Associated Domains Specification, OWASP Mobile Application Security Testing Guide (MASTG)
- APIs:
UIApplication.shared.open,UIWindowSceneDelegate.scene(_:continue:), WHATWG HTML Page Visibility - Documentação Oficial & Referências:
- Documentação do Desenvolvedor Apple sobre Como definir um URL scheme personalizado para o seu app
- Documentação do Desenvolvedor Apple sobre Como permitir que apps e sites façam links para o seu conteúdo
- Nota Técnica Apple TN3155 sobre Depuração de Universal Links
- Padrão HTML WHATWG sobre Visibilidade de Página
- Guia de Teste de Segurança de Aplicativos Móveis da OWASP sobre Deep Links Inseguros
Share this article



