Enlaces profundos diferidos extendidos de iOS
Resumen General
Los enlaces profundos diferidos extendidos permiten los enlaces profundos para nuevos usuarios en ciertos escenarios:
- Cuando UDL devuelve
NOT_FOUND
even though a relevant install occurred.
Main example for such a scenario:- El tiempo entre el clic y la instalación excede la ventana retrospectiva UDL (15 minutos).
- Cuando UDL devuelve
FOUND
pero a los datos de enlaces profundos les faltan parámetros, que no sondeep_link_value
anddeep_link_sub1-10
.
Principales ejemplos para tales escenarios:- Al hacer clic en un enlace en una red de autorreporte (SRN), como Anuncios de Meta o Twitter.
- Al hacer clic en un enlace que no contiene
deep_link_value
ordeep_link_sub1-10
utilizados para enlaces profundos, por ejemplo, enlaces antiguos creados antes de quedeep_link_value
existiera que todavía están en uso. - El tiempo entre el clic y la instalación excede la ventana retrospectiva UDL (15 minutos).
Para permitir los enlaces profundos diferidos cuando UDL devuelve la devolución de llamada NOT_FOUND
, onConversionDataSuccess
, debes verificar si debe manejar los enlaces profundos diferidos.
onConversionDataSuccess
forma parte de la API Get Conversion Data (GCD). Su propósito principal es recopilar datos de conversión dentro del dispositivo.
En el caso de uso que se describe aquí, onConversionDataSuccess
aprovecha el hecho de que todos los parámetros de enlaces profundos diferidos se transmiten a la devolución de llamada, además de los datos de conversión.
Requisitos previos
- Implementar enlaces profundos unificados para manejar tanto los enlaces profundos diferidos como los enlaces profundos directos.
- Implementar
onConversionDataSuccess
para manejar los enlaces profundos diferidos usando la API de GCD.
Implementación
onConversionDataSuccess
debe detectar los casos en los que debería ocurrir un enlace profundo diferido que UDL no manejó.onConversionDataSuccess
debe enrutar al usuario al destino de enlace profundo diferido en función de los parámetros de enlace profundo transmitidos a la devolución de llamada.
Ejemplo de código
Code dissect
- Implementa el delegado de la API Get Conversion Data
AppsFlyerLibDelegate
.Implementa solo
onConversionDataSuccess
andonConversionDataFail
.
Los métodosonAppOpenAttribution
andonAttributionFailure
son mutuamente excluyentes con UDL, y no serán llamados. - Detecta escenarios de enlaces profundos diferidos filtrando la carga útil de los datos de conversión con:
af_status == Non-organic
is_first_launch == true
- Cuando se detectan enlaces profundos diferidos, filtra los casos que ya fueron manejados por UDL.
En el ejemplo que sigue, todos los enlaces contienendeep_link_value
.
Se recomienda que UDL señale con un indicador que el enlace profundo diferido ya se ha manejado, yonConversionDataSuccess
debe omitirse. onConversionDataSuccess
debe verificar que los datos de conversión contienen los parámetros que se utilizan para enrutar a los usuarios dentro de la aplicación. Por ejemplo:fruit_name
en el ejemplo que sigue.- Enruta al usuario al destino de enlace profundo diferido.
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)")
}
}
⇲ Enlaces de Github: Swift
Pruebas
Importante
El siguiente escenario de prueba demuestra el manejo de enlaces profundos diferidos desde enlaces que contienen parámetros personalizados pero no los parámetros
deep_link_value
anddeep_link_sub1-10
.
Este escenario de prueba también es relevante para todos los enlaces profundos diferidos extendidos descritos anteriormente.
Before you begin
- Completa la implementación descrita anteriormente.
- Registrar tu dispositivo de prueba.
- Activa el modo de depuración en la aplicación.
- Asegúrate de que la aplicación no esté instalada en tu dispositivo.
The test link
Puedes usar un enlace de OneLink existente o pedirle a tu marketer que cree uno nuevo para probar. Se pueden usar URL de OneLink tanto cortas como largas.
Agregar parámetros ad-hoc al enlace
- Utiliza solo el dominio y la plantilla de OneLink de tu enlace, por ejemplo:
https://onelink-basic-app.onelink.me/H5hv
. - Agrega parámetros personalizados de OneLink que no sean
deep_link_value
anddeep_link_sub1-10
, según lo esperado por tu aplicación. - Los parámetros deben agregarse como parámetros de la consulta.
- Ejemplo:
https://onelink-basic-app.onelink.me/H5hv?deep_link_value=apples&deep_link_sub1=23
- Ejemplo:
Perform the test
- Haz clic en el enlace en tu dispositivo.
- OneLink te redirige de acuerdo con la configuración del enlace, ya sea al App Store o a un sitio web.
- Instala la aplicación.
Importante
- Si la aplicación aún está en desarrollo y aún no se ha subido a la tienda, se muestra esta imagen:
- Instala la aplicación desde Xcode o cualquier otro IDE que utilices.
- Si la aplicación aún está en desarrollo y aún no se ha subido a la tienda, se muestra esta imagen:
- UDL detecta los enlaces profundos diferidos, empareja la instalación con el clic y recupera los parámetros de OneLink para la devolución de llamada de
didResolveDeepLink
. UDL no encontrará ningún parámetro para enrutar y salir. onConversionDataSuccess
es la devolución de llamada que se llama con los datos de conversión, que contienen tanto parámetros personalizados como datos de atribución.onConversionDataSuccess
establece los parámetros personalizados para enrutar al usuario dentro de la aplicación.
Expected logs results
Los siguientes registros solo están disponibles cuando [el modo de depuración está habilitado].(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
-
La API UDL se inicia:
[AppsFlyerSDK] [com.appsflyer.serial] [DDL] Start DDL
-
UDL envía una consulta al servicio de AppsFlyer para consultar una coincidencia con esta instalación:
[AppsFlyerSDK] [com.appsflyer.serial] [DDL] URL: https://dlsdk.appsflyer.com/v1.0/ios/id1512793879?sdk_version=6.6&af_sig=c9a1d5b34d68e584d0db2a20f4049fb7cd2e785c3383bXXXXXXXXXXXXXXXXXXXXXXXX
-
UDL obtuvo una respuesta y llama a la devolución de llamada de
didResolveDeepLink
constatus=FOUND
y datos del enlace de 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":""}
-
GCD está recopilando los datos de conversión:
[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
se llama con los datos de conversión 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,
...
}
Actualizado hace 11 meses