Deferred deep linking estendido do iOS
Visão Geral
O deferred deep linking permite deep links para novos usuários em determinados cenários:
- Quando o UDL retornar
NOT_FOUND
mesmo que tenha ocorrido uma instalação relevante. - Quando o UDL retornar
FOUND
mas os dados de deep linking não têm parâmetros, que não sãodeep_link_value
anddeep_link_sub1-10
.
Exemplos principais para tais cenários:- Clicar em um link em uma rede de autorrelato (SRN), como anúncios do Meta ou Twitter.
- Clicar em um link que não contém
deep_link_value
ordeep_link_sub1-10
usado para deep linking, por exemplo, links antigos criados antes dedeep_link_value
que ainda estão em uso. - O tempo entre o clique e a instalação excede a janela de lookback do UDL (15 minutos).
Para permitir deferred deep linking quando o UDL retornar NOT_FOUND
, onConversionDataSuccess
deve verificar se deve lidar com o deferred deep linking.
onConversionDataSuccess
faz parte da API Get Conversion Data (GCD). Seu principal objetivo era coletar dados de conversão dentro do dispositivo.
No caso de uso descrito aqui onConversionDataSuccess
aproveita o fato de que todos os parâmetros de deferred deep linking serem passados para o callback, além dos dados de conversão.
Pré-requisitos
- Implemente Unified Deep Linking para manipular com deferred deep linking e deep links.
- Implemente
onConversionDataSuccess
para manipular deferred deep linking usndo a API GDC.
Implementação
onConversionDataSuccess
deve detectar casos em que devem ocorrer deferred deep linking que o UDL não manipulou.onConversionDataSuccess
deve encaminhar o usuário para o destino de deferred deep linking com base nos parâmetros de deep linking passados para o callback.
Exemplo de código
Code dissect
- Implemente o representante da API Get Conversion Data
AppsFlyerLibDelegate
.Apenas implementar
onConversionDataSuccess
andonConversionDataFail
.
Os métodosonAppOpenAttribution
andonAttributionFailure
são mutuamente exclusivos com UDL e não serão chamados. - Detecte cenários de deferred deep linking filtrando a carga de dados de conversão com:
af_status == Non-Organic
is_first_launch == true
- Quando deferred deep linking forem detectados, filtre os casos que já foram tratados pelo UDL.
No exemplo a seguir, todos os links contêmdeep_link_value
.
Recomenda-se que o UDL avise com um sinalizador que o deferred deep linking já foi manipulado eonConversionDataSuccess
deve ser pulado. onConversionDataSuccess
deve verificar se os dados de conversão contêm parâmetros usados para rotear usuários dentro do aplicativo. Por exemplofruit_name
no exemplo a seguir.- Encaminhe o usuário para o destino do deferred deep linking.
Code snippet
extension AppDelegate: AppsFlyerLibDelegate {
// Handle Organic/Non-organic installation
func onConversionDataSuccess(_ data: [AnyHashable: Any]) {
ConversionData = data
print("onConversionDataSuccess data:")
for (key, value) in data {
print(key, ":", value)
}
if let conversionData = data as NSDictionary? as! [String:Any]? {
if let status = conversionData["af_status"] as? String {
if (status == "Non-organic") {
if let sourceID = conversionData["media_source"],
let campaign = conversionData["campaign"] {
NSLog("[AFSDK] This is a Non-Organic install. Media source: \(sourceID) Campaign: \(campaign)")
}
} else {
NSLog("[AFSDK] This is an organic install.")
}
if let is_first_launch = conversionData["is_first_launch"] as? Bool,
is_first_launch {
NSLog("[AFSDK] First Launch")
if !conversionData.keys.contains("deep_link_value") && conversionData.keys.contains("fruit_name"){
switch conversionData["fruit_name"] {
case let fruitNameStr as String:
NSLog("This is a deferred deep link opened using conversion data")
walkToSceneWithParams(fruitName: fruitNameStr, deepLinkData: conversionData)
default:
NSLog("Could not extract deep_link_value or fruit_name from deep link object using conversion data")
return
}
}
} else {
NSLog("[AFSDK] Not First Launch")
}
}
}
}
func onConversionDataFail(_ error: Error) {
NSLog("[AFSDK] \(error)")
}
}
⇲ Links do Github: Swift
Testes
Importante
O cenário de teste a seguir demonstra o tratamento de deferred deep linking de links que contêm parâmetros personalizados, mas não parâmetros
deep_link_value
anddeep_link_sub1-10
.
Este cenário de teste também é relevante para todos os deferred deep linking estendidos descritos anteriormente.
Before you begin
- Conclua a implementação descrita anteriormente.
- Registre seu dispositivo de teste.
- Ative o modo de depuração no aplicativo.
- Verifique se o aplicativo não está instalado no seu dispositivo.
The test link
Você pode usar um link do OneLink existente ou pedir ao seu profissional de marketing para criar um novo para teste. Podem ser usadas URLs curtas e longas do OneLink.
Adicionando parâmetros ad hoc ao link
- Use apenas o domínio e template do OneLink do seu link, por exemplo:
https://onelink-basic-app.onelink.me/H5hv
. - Adicionar parâmetros personalizados do OneLink diferentes de
deep_link_value
anddeep_link_sub1-10
, conforme esperado pelo seu aplicativo. - Os parâmetros devem ser adicionados como parâmetros de consulta .
- Exemplo:
https://onelink-basic-app.onelink.me/H5hv?deep_link_value=apples&deep_link_sub1=23
- Exemplo:
Perform the test
- Clique no link no seu dispositivo.
- O OneLink redireciona você de acordo com a configuração do link para acessar a App Store ou um site.
- Instale o aplicativo.
Importante
- Se o aplicativo ainda estiver em desenvolvimento e ainda não tiver sido carregado na loja, a seguinte imagem será exibida:
- Instale o aplicativo do Xcode ou de qualquer outro IDE que você usar.
- Se o aplicativo ainda estiver em desenvolvimento e ainda não tiver sido carregado na loja, a seguinte imagem será exibida:
- O UDL detecta o deferred deep linking, corresponde a instalação ao clique e recupera os parâmetros do OneLink para o callback
didResolveDeepLink
. UDL não encontrará nenhum parâmetro para rotear e sair. onConversionDataSuccess
callback é chamado com os dados de conversão, que contém parâmetros personalizados e dados de atribuição.onConversionDataSuccess
define os parâmetros personalizados para rotear o usuário dentro do aplicativo.
Expected logs results
Os logs a seguir estão disponíveis somente quando [modo de depuração está ativado].(https://dev.appsflyer.com/hc/docs/integrate-ios-sdk#enabling-debug-mode)
-
SDK inicializado:
[AppsFlyerSDK] [com.apple.main-thread] AppsFlyer SDK version 6.6.0 started build
-
A API UDL começa:
[AppsFlyerSDK] [com.appsflyer.serial] [DDL] Start DDL
-
O UDL envia consulta ao serviço AppsFlyer para consultar uma correspondência com esta instalação:
[AppsFlyerSDK] [com.appsflyer.serial] [DDL] URL: https://dlsdk.appsflyer.com/v1.0/ios/id1512793879?sdk_version=6.6&af_sig=c9a1d5b34d68e584d0db2a20f4049fb7cd2e785c3383bXXXXXXXXXXXXXXXXXXXXXXXX
-
UDL obteve uma resposta e chama o callback
didResolveDeepLink
comstatus=FOUND
e dados de link do OneLink:[AppsFlyerSDK] [com.appsflyer.serial] [DDL] Calling didResolveDeepLink with: {"af_sub4":"","click_http_referrer":"","af_sub1":"","click_event":{"af_sub4":"","click_http_referrer":"","af_sub1":"","af_sub3":"","deep_link_value":"","campaign":"","match_type":"probabilistic","af_sub5":"","campaign_id":"","media_source":"","af_sub2":""},"af_sub3":"","deep_link_value":"","campaign":"","match_type":"probabilistic","af_sub5":"","media_source":"","campaign_id":"","af_sub2":""}
-
O GCD está buscando os dados de conversão:
[AppsFlyerSDK] [com.appsflyer.serial] [GCD-B01] GCD 4.0 URL: https://gcdsdk.appsflyer.com/install_data/v4.0/id1512793879?devkey=s*****4&device_id=1672050642148-9221195
onConversionDataSuccess
é chamado com dados de conversão como entrada:
[AppsFlyerSDK] [com.appsflyer.serial] [GCD-A02] -[basic_app.AppDelegate onConversionDataSuccess:]:
{
...
is_first_launch=true,
...
fruit_amount=56,
fruit_name=apples,
...
af_status=Non-organic,
...
}
Atualizado 29 dias atrás