
1. Introdução
WWDC15 - Apple anuncia a transição para o Universal Links. O significado deles é proibitivo - envie o usuário ao aplicativo se ele for para a página do site que o aplicativo suporta. Geralmente é usado em cartas enviadas após o registro para confirmar o email. Assim, o Universal Links elimina a necessidade de os usuários retornarem ao aplicativo por conta própria - e isso é bom para a experiência do usuário e para as estatísticas.

Muitos agora podem pensar que este artigo não está sendo escrito muito bem, mas você, caro leitor, pode não ter visto o que está acontecendo no Stackoverflow no tópico Universal Links.
Implementação
Agora, analisaremos quatro pontos que permitirão implementar o Universal Links sem a dor extra e as surpresas ofuscantes que eu tive que enfrentar. No final, tocaremos facilmente em outras publicações e links, o que pode lhe proporcionar uma compreensão mais profunda dos Links Universais.
Vamos para o primeiro ponto.
Domínios associados em IDs de aplicativo

Se você não registrou um ID de aplicativo para seu aplicativo, faça-o agora no site da
Apple Developer . Ao se registrar, certifique-se de conectar os domínios associados. Se o ID do aplicativo já estiver registrado, vá para a próxima etapa e ative Domínios Associados diretamente do Xcode.
Domínios Associados no Xcode

Para ser claro, mesmo para um iniciante, não faremos isso diretamente no arquivo .entitlements e seguiremos o caminho claro: Xcode → Projeto → Recursos → Domínios Associados.
Aqui precisamos clicar em "+" e adicionar os domínios que nos interessam. Os domínios são necessariamente adicionados via assinatura do applink, por exemplo ...
applink:habr.com
Nesse caso, fingiremos que queremos ensinar o aplicativo Habr a abrir ao mudar para um dos hubs, para que eu possa dizer com segurança ao habr.com. De fato, não poderemos testar o trabalho do Universal Links no Habré, e se você imediatamente decidiu mudar da teoria para a prática, recomendo criar um domínio no Github Pages agora e indicá-lo através do applink.
AppDelegate.swift
Aqui é o suficiente para copiar e colar esse código, mas depois vem a explicação para o inquisitivo.
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: [Any?] -> Void) -> Bool { guard userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL else { return false } print(url)
Ao iniciar o aplicativo pelo Universal Link, você receberá um objeto NSUserActivity com um valor activityType. A propriedade webpageURL contém o URL em que o usuário clicou e pode ser analisada em pedaços usando NSURLComponents.
NSURLComponents é um tópico bastante simples que foi descoberto muitas vezes por pequenos projetos no Playground. Se você não entende do que se trata,
aqui está uma boa captura de tela .
Arquivo Apple-app-site-association
É um arquivo sem extensão, mas armazena dados no formato JSON. Parece aproximadamente como se segue.
{ "applinks": { "apps": [], "details": [{ "appID": "teamId.com.bundleId.of.your.app", "paths": ["/path-for-redirectionl/*"] }] } }
Além disso, exorto você a corrigi-lo na memória agora mesmo, para que esse arquivo
seja armazenado no diretório raiz do domínio .
De fato, no código, estamos interessados apenas em dois campos. O appID em apple-app-site-association é uma combinação do seu Team Identifier e Bundle Identifier. No código acima, eu já substituí os dados de tal forma que seria mais conveniente copiá-los e alterar algumas linhas.
Como procurar o Team Identifier? Para fazer isso, vá para developer.apple.com → Conta → Entrar → Associação. O terceiro campo é o seu identificador de equipe. Para mim, é 74D322Z5HV.
Como procurar um identificador de pacote configurável? Xcode → Projeto → Geral. Seu identificador de pacote está escrito na seção Identidade, segundo campo. Para mim, este é com.habrahabr.ios.application.
Agora vamos criar este appID para associação de sites de aplicativos da apple.
"appID": "74D322Z5HV.com.habrahabr.ios.application"
Feito! Você é incrível! Agora vamos falar sobre caminhos. Esse campo informa diretamente à testa quais páginas do site o aplicativo suporta e de quais páginas você deve ser enviado ao aplicativo. Você pode adicionar páginas quantas quiser. Além disso, um pouco de ajuda sobre como isso funciona e para torná-lo ainda mais claro, lembro que estamos solicitando o habr.com
"paths": [ "/path-for-redirection/*" // URL – habr.com/path-for-redirection/ - ( *), URL habr.com/path-for-redirection/ok/funny-video-with-dogs/ . "/path-for-redirection/" // URL – habr.com/path-for-redirection/, , , , habr.com/path-for-redirection/ok/. "*" // - . "NOT /path-for-redirection/*" // , - URL NOT – , , NOT. ]
E aqui parecerá uma associação de site de aplicativo da Apple se, por exemplo, tivermos dois aplicativos: um para o hub Swift e outro para o hub de desenvolvimento do iOS.
{ "applinks": { "apps": [], "details": [{ "appID": "74D322Z5HV.com.habrahabr.ios.application.iosdev", "paths": ["/hub/ios_dev/*"] }, { "appID": "74D322Z5HV.com.habrahabr.ios.application.swift", "paths": ["/hub/swift/*"] }] } }
Agora você pode salvar o arquivo apple-app-site-association sem a extensão (formato) e carregá-lo no servidor. Em seguida, envie a URL necessária para o seu email, monte no Xcode um projeto com Domínios Associados e codifique em AppDelegate.swift. Você deve verificar o trabalho acessando o URL desejado no aplicativo de email padrão.
Fatos e dicas dignos de nota
- O Universal Links não funciona no navegador. Quando você acessa o URL necessário no Safari, verá uma placa informando que pode acessar o aplicativo.
- O Universal Links não funciona em cadeias de redirecionamento. Quando você chegar ao URL desejado, o site simplesmente mostrará uma placa na parte superior, informando que você pode acessar o aplicativo.
- Os links universais podem ser testados sem seu próprio servidor virtual ou dedicado usando as páginas do GitHub.
- O URL da transição deve necessariamente começar com "https: //".
- Você pode verificar se está tudo bem com o arquivo apple-app-site-association através da Ferramenta de validação da App Search API .
- Para causar uma transição para o aplicativo a partir do URL desejado, não é necessário ter nenhum conteúdo nesse URL. Ou seja, a transição será realizada mesmo se o navegador neste URL fornecer 404.
- Uma pressão longa no Universal Link no aplicativo de email solicitará que você escolha entre abrir o aplicativo e abrir o navegador.
Referências e referências
Tendo em vista que um dos objetivos desta publicação é oferecer o máximo de entendimento da Universal Links, quero finalizá-la com referências à literatura que foi usada para escrever o artigo e / ou apenas fornecer uma compreensão mais profunda da Universal Links.
Espero que esta publicação tenha sido a melhor que você encontrou sobre o assunto em russo. Além disso, terei prazer em orientá-lo ainda mais aqui (nos comentários). Se eu perdi alguns pontos ou me enganei em algo, peço também que você me informe sobre isso.
Obrigada