Skip to main content
Existem dois tipos principais:
  • Deep Links padrão (URI Schemes): utilizam um esquema personalizado como meuapp://produto/123.
  • Deep Links baseados em URLs da web: também chamados de Universal Links no iOS e App Links no Android, utilizam links HTTPS como https://meudominio.com/produto/123.
A seguir, veja como configurar esses links em Android (Kotlin) e iOS (Swift). Para permitir que seu aplicativo Android abra a partir de um link da web com UTMs, siga os seguintes passos:

1. Adicione o intent-filter no AndroidManifest.xml

<activity android:name=".MainActivity">
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data
            android:scheme="https"
            android:host="meudominio.com"
            android:pathPrefix="/promo" />
    </intent-filter>
</activity>
O atributo autoVerify="true" informa ao Android para verificar automaticamente que o domínio pertence ao aplicativo. Crie e hospede o arquivo JSON no seguinte caminho:
https://meudominio.com/.well-known/assetlinks.json
Conteúdo de exemplo:
[
  {
    "relation": ["delegate_permission/common.handle_all_urls"],
    "target": {
      "namespace": "android_app",
      "package_name": "com.seuapp.nemu",
      "sha256_cert_fingerprints": ["SHA256_DO_SEU_CERTIFICADO"]
    }
  }
]
Esse arquivo permite que o Android associe o domínio ao aplicativo. O SHA256 pode ser obtido usando a ferramenta keytool. No seu código Kotlin, Para fim de testes você pode capturar os parâmetros do link da seguinte forma:
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    val appLinkData: Uri? = intent?.data
    if (appLinkData != null) {
        val utmSource = appLinkData.getQueryParameter("utm_source")
        Log.d("DeepLink", "utm_source: $utmSource")
        // Passe os dados para o SDK de tracking se necessário
    }
}
No iOS, os Universal Links funcionam de forma semelhante, mas exigem configuração no Xcode e no domínio.

1. Configure os Capabilities do projeto

No Xcode:
  • Vá em Signing & Capabilities.
  • Adicione Associated Domains.
  • Insira: applinks:meudominio.com.

2. Adicione o arquivo apple-app-site-association ao seu domínio

Hospede o seguinte arquivo no caminho:
https://meudominio.com/.well-known/apple-app-site-association
Conteúdo de exemplo:
{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "TEAMID.com.seuapp.nemu",
        "paths": ["/promo/*"]
      }
    ]
  }
}
O TEAMID pode ser encontrado na sua conta Apple Developer. O appID é composto por TEAMID.bundleID. Se estiver usando SwiftUI, use o modificador onOpenURL para capturar o link:
@main
struct MyApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
                .onOpenURL { url in
                    let utmSource = URLComponents(url: url, resolvingAgainstBaseURL: false)?
                        .queryItems?
                        .first(where: { $0.name == "utm_source" })?
                        .value
                    print("utm_source: \(utmSource ?? "n/a")")
                }
        }
    }
}
Se estiver usando UIKit, você pode capturar o link no AppDelegate com:
func application(_ application: UIApplication, continue userActivity: NSUserActivity,
                 restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    if let incomingURL = userActivity.webpageURL {
        let components = URLComponents(url: incomingURL, resolvingAgainstBaseURL: false)
        let utmSource = components?.queryItems?.first(where: { $0.name == "utm_source" })?.value
        print("utm_source: \(utmSource ?? "n/a")")
    }
    return true
}