Apoyo a SKAdNetwork
SKAdNetwork es el marco de atribución de Apple centrado en la privacidad para campañas de instalación de aplicaciones de iOS. A partir de la versión 2.0.11 del SDK de Unreal Engine, SKAdNetwork está activado por defecto en el modo gestionado, en el que Singular actualiza automáticamente los valores de conversión en función del modelo de conversión configurado en el panel de control.
No requiere configuración adicional: Si utiliza SDK de Unreal Engine versión 2.0.11 o posterior, SKAdNetwork funciona de forma inmediata. No se necesitan cambios de código ni configuraciones adicionales para la funcionalidad básica.
Modos de SKAN
Modo gestionado (por defecto)
En el modo gestionado, Singular gestiona automáticamente las actualizaciones de los valores de conversión basándose en el modelo de conversión configurado en el panel de control. Este es el enfoque recomendado para la mayoría de las aplicaciones, ya que requiere un código mínimo y proporciona un seguimiento óptimo de las conversiones.
- Actualizaciones automáticas: Singular gestiona todas las actualizaciones de los valores de conversión en función de los eventos del usuario y del modelo configurado.
- Configuración del cuadro de mando: Diseñe su modelo de conversión en el cuadro de mandos de Singular sin cambios en el código.
- Optimización: Benefíciese de la experiencia de Singular para maximizar las actualizaciones del valor de conversión dentro de las restricciones de Apple.
Modo Manual (Avanzado)
El modo manual le ofrece un control total sobre las actualizaciones de los valores de conversión, permitiéndole implementar una lógica personalizada para determinar cuándo y cómo actualizar los valores de conversión de SKAN. Utilice este modo sólo si tiene requisitos específicos que el Modo Gestionado no puede cumplir.
Función avanzada: El Modo Manual requiere una cuidadosa implementación y comprensión de las restricciones de SKAdNetwork de Apple, incluyendo las ventanas y limitaciones de actualización de los valores de conversión. La mayoría de las aplicaciones deberían utilizar el Modo Gestionado.
Opciones de configuración
Configure el comportamiento de SKAdNetwork en el método USingularSDKBPLibrary::Initialize. La siguiente tabla muestra las opciones disponibles y sus valores por defecto.
| Opción | Por defecto | Descripción |
| skAdNetworkEnabled | True | Activar la compatibilidad de SKAdNetwork con el seguimiento de atribuciones de iOS. |
| manualSKANConversionManagement | False | Active el modo manual para controlar usted mismo las actualizaciones de los valores de conversión. |
Nota: a partir de la versión 2.0.11 del SDK de Unreal Engine, SKAdNetwork está activado por defecto. Si utiliza una versión anterior, debe activar SKAdNetwork estableciendo ode translatete="no "skAdNetworkEnabled en ode translate="="no "True o llamando a SkanRegisterAppForAdNetworkAttribution().
Versiones anteriores del SDK
Si utiliza una versión del SDK de Unreal Engine anterior a la 2.0.11, active manualmente la compatibilidad con SKAdNetwork mediante el método que se indica a continuación.
Habilitar mediante configuración
Establezca skAdNetworkEnabled en Trueal inicializar el SDK.
// Initialize with SKAdNetwork enabled
bool Success = USingularSDKBPLibrary::Initialize(
TEXT("YOUR_SDK_KEY"),
TEXT("YOUR_SDK_SECRET"),
60, // Session timeout
TEXT(""), // Custom user ID
true, // Enable SKAdNetwork
false, // Manual SKAN management
0, // Wait for tracking authorization
false, // OAID collection
true, // Enable logging
3, // Log level
false, // Clipboard attribution
TEXT(""), // Facebook App ID
TEXT("") // Custom SDID
);
if (Success)
{
UE_LOG(LogTemp, Log, TEXT("SDK initialized with SKAdNetwork enabled"));
}
Activación mediante llamada a método
Alternativamente, llame al método de registro directamente en el código de inicialización de su aplicación.
// Register for SKAdNetwork attribution
USingularSDKBPLibrary::SkanRegisterAppForAdNetworkAttribution();
UE_LOG(LogTemp, Log, TEXT("Registered for SKAdNetwork attribution"));
Recomendación: Actualice a la última versión del SDK de Unreal Engine para beneficiarse de la habilitación automática de SKAdNetwork y de las últimas funciones y correcciones de errores.
Configuración del modo manual
Para implementar una lógica de valores de conversión personalizada, active el modo manual y utilice los métodos del SDK proporcionados para actualizar y supervisar los valores de conversión durante todo el ciclo de vida de su aplicación.
Activar el modo manual
Establezca manualSKANConversionManagement en Trueal inicializar el SDK para tomar el control de las actualizaciones de los valores de conversión.
// Initialize with Manual Mode enabled
bool Success = USingularSDKBPLibrary::Initialize(
TEXT("YOUR_SDK_KEY"),
TEXT("YOUR_SDK_SECRET"),
60, // Session timeout
TEXT(""), // Custom user ID
true, // Enable SKAdNetwork
true, // Enable Manual SKAN management
0, // Wait for tracking authorization
false, // OAID collection
true, // Enable logging
3, // Log level
false, // Clipboard attribution
TEXT(""), // Facebook App ID
TEXT("") // Custom SDID
);
if (Success)
{
UE_LOG(LogTemp, Log, TEXT("SDK initialized with Manual SKAN Mode"));
}
Actualizar valor de conversión
Utilice este método para actualizar manualmente el valor de conversión de SKAdNetwork basándose en su lógica personalizada. El valor de conversión debe ser un número entero entre 0 y 63.
Importante: Este método sólo funciona cuando manualSKANConversionManagement está configurado como True. Si el modo gestionado está activo, se ignorarán las actualizaciones manuales.
Firma del método
static bool SkanUpdateConversionValue(int conversionValue)
Ejemplo de uso
// Track a sign-up event
USingularSDKBPLibrary::SendEvent(TEXT("SignUp"));
// Update the conversion value to 7
bool Success = USingularSDKBPLibrary::SkanUpdateConversionValue(7);
if (Success)
{
UE_LOG(LogTemp, Log, TEXT("Conversion value updated to 7"));
}
else
{
UE_LOG(LogTemp, Warning, TEXT("Failed to update conversion value"));
}
// Example: Update based on purchase tier
void OnPurchaseComplete(float PurchaseAmount)
{
// Track revenue event
USingularSDKBPLibrary::SendRevenue(TEXT("purchase"), TEXT("USD"), PurchaseAmount);
// Calculate conversion value based on amount
int ConversionValue = 10; // Default
if (PurchaseAmount >= 100.0f)
{
ConversionValue = 63; // High value
}
else if (PurchaseAmount >= 50.0f)
{
ConversionValue = 40; // Medium value
}
else if (PurchaseAmount >= 10.0f)
{
ConversionValue = 20; // Low value
}
USingularSDKBPLibrary::SkanUpdateConversionValue(ConversionValue);
}
Obtener valor de conversión actual
Recupera el valor de conversión actual rastreado por Singular SDK. Esto es útil para implementar lógica condicional basada en el estado actual.
Firma del método
static int SkanGetConversionValue()
Ejemplo de uso
// Get the current conversion value
int CurrentValue = USingularSDKBPLibrary::SkanGetConversionValue();
UE_LOG(LogTemp, Log, TEXT("Current conversion value: %d"), CurrentValue);
// Only update if current value is below threshold
if (CurrentValue < 30)
{
USingularSDKBPLibrary::SkanUpdateConversionValue(30);
UE_LOG(LogTemp, Log, TEXT("Conversion value updated from %d to 30"), CurrentValue);
}
Monitorizar actualizaciones del valor de conversión
Configure un delegado para recibir notificaciones en tiempo real cada vez que cambie el valor de conversión. Esto le permite reaccionar a las actualizaciones del valor de conversión y registrar análisis o activar otros comportamientos de la aplicación.
Pasos de implementación
- Añade ode translate="no "o "#include "SingularDelegates.h" al principio del archivo de cabecera de tu clase.
-
Añade la siguiente declaración de delegado a la cabecera de tu clase:
// Delegate to register for conversion value updates UPROPERTY(BlueprintAssignable, Category = "Singular-SDK") FOnConversionValueUpdated OnConversionValueUpdated; // Method that will handle the conversion value update UFUNCTION() void OnNewConversionValue(int32 ConversionValue); -
En el archivo de implementación de la clase, registra el delegado:
// Register the delegate (typically in BeginPlay or constructor) OnConversionValueUpdated.AddDynamic(this, &UYourClassName::OnNewConversionValue); -
Implementa el método de devolución de llamada:
ode class="="cpp"void UYourClassName::OnNewConversionValue(int32 ConversionValue) { // This method is called whenever the conversion value is updated UE_LOG(LogTemp, Log, TEXT("Conversion value updated to: %d"), ConversionValue); // Log the update to your analytics LogConversionValueUpdate(ConversionValue); // Trigger any app-specific behavior if (ConversionValue >= 50) { UnlockPremiumFeature(); } }
Práctica recomendada: Utiliza el delegado de valor de conversión para mantener una vista sincronizada del estado de conversión actual en toda tu aplicación. Esto resulta especialmente útil para depurar y garantizar que la lógica personalizada funciona correctamente.
Recursos adicionales
Para obtener más información sobre la implementación de SKAdNetwork y las prácticas recomendadas, consulte la Guía de implementación de SKAdNetwork del SDK de iOS.
Compatibilidad con App Tracking Transparency (ATT)
App Tracking Transparency (ATT) es el marco de privacidad de Apple que requiere el consentimiento del usuario antes de acceder al IDFA (identificador para anunciantes) del dispositivo y compartir los datos del usuario. Implementar ATT correctamente es fundamental para la atribución de iOS y maximizar la precisión de sus campañas de adquisición de usuarios.
Por qué la ATT es importante para la atribución
A partir de iOS 14.5, las apps deben solicitar permiso al usuario a través del marco ATT antes de acceder al IDFA. Aunque la atribución sigue siendo posible sin el IDFA utilizando métodos de huella digital y probabilísticos, disponer del IDFA mejora significativamente la precisión de la atribución y proporciona una correspondencia determinista.
- Atribución determinista: El IDFA permite una atribución precisa a nivel de dispositivo que conecta directamente las impresiones publicitarias con las instalaciones.
- Optimización de la red publicitaria: Las redes publicitarias pueden optimizar mejor las campañas y proporcionar informes más precisos con el acceso al IDFA.
- Información a nivel de usuario: El acceso al IDFA permite un análisis más granular del comportamiento del usuario y el seguimiento de cohortes.
Recomendación: Singular recomienda encarecidamente implementar el aviso ATT y solicitar el consentimiento del usuario. Explique los beneficios a los usuarios (anuncios personalizados, mejor experiencia de aplicación) para maximizar las tasas de opt-in.
Momento de inicialización del SDK
Si el SDK inicializa y envía la primera sesión antes de que el usuario responda a la solicitud de ATT, el IDFA no será capturado, resultando en una atribución menos precisa.
¿Por qué retrasar la inicialización?
Por defecto, Singular SDK envía una sesión inmediatamente después de la inicialización. Cuando esta sesión proviene de un nuevo dispositivo, activa el proceso de atribución de Singular utilizando sólo los datos disponibles en ese momento. Si el usuario aún no ha respondido a la solicitud de ATT, el IDFA no estará disponible y la atribución se basará en métodos menos precisos.
Crítico: Solicite siempre el consentimiento de la ATT y recupere el IDFA antes de que Singular SDK envíe su primera sesión. Si no lo hace, perderá permanentemente el IDFA para los datos de atribución de ese dispositivo.
Configurar el tiempo de espera del SDK
Configure el SDK para que espere a la respuesta ATT del usuario antes de inicializar configurando el parámetro waitForTrackingAuthorizationWithTimeoutInterval. Este retardo da tiempo al usuario para responder a la solicitud ATT a la vez que evita retrasos indefinidos si no se muestra la solicitud.
Cómo funciona el retardo ATT
- El SDK se inicializa y comienza a grabar una sesión y los eventos del usuario, pero aún no los envía a los servidores de Singular.
- En cuanto se concede o deniega el consentimiento de App Tracking Transparency, o transcurre el tiempo de espera, el SDK envía la sesión y los eventos en cola a Singular (con o sin IDFA).
- Singular inicia el proceso de atribución, aprovechando el IDFA si está disponible.
Implementación
Ejemplo de configuración
Establezca el parámetro waitForTrackingAuthorizationWithTimeoutIntervalal inicializar el SDK. Este valor representa el número máximo de segundos a esperar la respuesta ATT del usuario.
// Initialize with ATT delay
bool Success = USingularSDKBPLibrary::Initialize(
TEXT("YOUR_SDK_KEY"),
TEXT("YOUR_SDK_SECRET"),
60, // Session timeout
TEXT(""), // Custom user ID
true, // Enable SKAdNetwork
false, // Manual SKAN management
300, // Wait up to 300 seconds (5 minutes) for ATT response
false, // OAID collection
true, // Enable logging
3, // Log level
false, // Clipboard attribution
TEXT(""), // Facebook App ID
TEXT("") // Custom SDID
);
if (Success)
{
UE_LOG(LogTemp, Log, TEXT("SDK initialized with ATT delay"));
}
Consideración del tiempo de espera: Establezca un valor de tiempo de espera apropiado (normalmente 60-300 segundos). Si el tiempo de espera transcurre antes de que el usuario responda, el SDK procede a enviar los datos sin el IDFA.
Mejores prácticas ATT
- Mensajes previos: Muestre a los usuarios una pantalla previa a la ATT en la que se explique por qué necesita el permiso de seguimiento y en qué les beneficia (mejores anuncios, mejor experiencia). Esto puede aumentar significativamente las tasas de aceptación.
- El momento es importante: Muestre la solicitud de TCA en un momento natural del flujo de su aplicación, no inmediatamente después del primer lanzamiento. Deje que los usuarios experimenten primero su aplicación.
-
Mensajes personalizados: Personalice su mensaje de aviso de ATT en su archivo Info.plist utilizando la tecla
NSUserTrackingUsageDescriptionpara explicar claramente su propósito de seguimiento. - Pruebe a fondo: Pruebe tanto las situaciones autorizadas como las denegadas para asegurarse de que su aplicación funciona correctamente independientemente de la elección del usuario.
- Respete la elección del usuario: Nunca preguntes repetidamente a los usuarios que han denegado el seguimiento ni muestres mensajes agresivos que les presionen para que acepten.
Revisión de la App Store: Las aplicaciones que no implementen correctamente la TCA o que intenten eludir el marco pueden ser rechazadas durante la revisión de la App Store. Asegúrese de que su aplicación sigue las directrices de Apple y respeta las opciones de privacidad del usuario.
Recursos adicionales
Para obtener más información sobre los cambios y las mejores prácticas de iOS 14+, consulte los siguientes recursos: