SDK de Unreal Engine - Integración básica


Inicialización del SDK

Inicialice el SDK de Singular cada vez que inicie su aplicación para habilitar el seguimiento de atribuciones, la gestión de sesiones y los informes de eventos.

Acerca del SDID

El Singular Device ID (SDID) es un identificador a nivel de dispositivo que Singular genera y administra. En una integración híbrida, donde este SDK se ejecuta en tu app y tu servidor también envía eventos a través de la API Server-to-Server (S2S), enviar el mismo SDID en esos eventos del lado del servidor los vincula al mismo dispositivo que el SDK está rastreando. Esto permite que Singular atribuya la actividad del SDK y de S2S a un único dispositivo sin depender de identificadores publicitarios específicos de la plataforma.

SDID habilitado de forma predeterminada: A partir del 15 de julio de 2026, el Singular Device ID (SDID) está habilitado de forma predeterminada para los nuevos clientes de Singular. El SDK genera y resuelve el SDID automáticamente durante la inicialización, por lo que no se requiere configuración adicional. El siguiente ejemplo registra el callback de recepción del SDID para que puedas confirmar en tus logs que el SDK recibió el SDID.

El SDID personalizado es una función enterprise: Establecer un SDID personalizado es una función enterprise y no está habilitada de forma predeterminada. No configures un SDID personalizado a menos que tu cuenta esté habilitada para ello; comunícate con tu Singular Customer Success Manager. Los ejemplos a continuación intencionalmente no configuran un SDID personalizado.

Cumplimiento de la privacidad: Recuerde cumplir con las leyes de privacidad promulgadas en las regiones donde hace negocios, incluyendo GDPR, CCPA y COPPA al implementar Singular SDK. Para obtener más información, consulte Prácticas de inclusión y exclusión del SDK.

Por qué inicializar el SDK

La inicialización del SDK es un requisito previo para toda la funcionalidad de atribución de Singular. Crea una nueva sesiónenviada a Singular para calcular las métricas de retención de usuarios.

Práctica recomendada: Inicialice el SDK lo antes posible en el ciclo de vida de su aplicación, por ejemplo, en el constructor del modo de juego.


Método Initialize

USingularSDKBPLibrary::Inicializar

Llame al método Initialize para iniciar el SDK de Singular y enviar una sesión de usuario a los servidores de Singular.

Firma del método

C++
static bool Initialize(
    FString sdkKey, 
    FString sdkSecret,
    int sessionTimeout = 60,
    FString customUserId = TEXT(""),
    bool skAdNetworkEnabled = true,
    bool manualSkanConversionManagement = false,
    int waitForTrackingAuthorizationWithTimeoutInterval = 0,
    bool oaidCollection = false,
    bool enableLogging = false,
    int logLevel = 0,
    bool clipboardAttribution = false,
    FString facebookAppId = TEXT(""),
    FString customSdid = TEXT("")
);

Ejemplo de implementación

Inicialice el SDK en su constructor de modo de juego con las credenciales de la API y las opciones de configuración.

C++
// Copyright Epic Games, Inc. All Rights Reserved.

#include "MyProject2GameMode.h"
#include "MyProject2Character.h"
#include "UObject/ConstructorHelpers.h"
#include "SingularSDKBPLibrary.h"
#include "SingularDelegates.h"

#if PLATFORM_IOS
#include "IOS/IOSPlatformMisc.h"
#import <UIKit/UIKit.h>
#endif

AMyProject2GameMode::AMyProject2GameMode()
    : Super()
{
#if PLATFORM_IOS
    // Log IDFV for iOS testing
    NSString *idfv = [[UIDevice currentDevice] identifierForVendor].UUIDString;
    if (idfv)
    {
        FString IDFVString = FString(idfv);
        UE_LOG(LogTemp, Log, TEXT("IDFV: %s"), *IDFVString);
    }
    else
    {
        UE_LOG(LogTemp, Warning, TEXT("Failed to retrieve IDFV"));
    }
#endif

    // Register the SDID accessor handler before initialization to confirm the SDK
    // received the SDID (SDID is enabled by default for new accounts)
    USingularDelegates* SingularDelegates = CreateDefaultSubobject<USingularDelegates>(TEXT("SingularSdidAccessorHandler"));
    SingularDelegates->OnSingularSdidReceived.AddDynamic(this, &AMyProject2GameMode::OnSingularSdidReceived);
    SingularDelegates->OnSingularDidSetSdid.AddDynamic(this, &AMyProject2GameMode::OnSingularDidSetSdid);

    // Initialize Singular SDK
    bool Success = USingularSDKBPLibrary::Initialize(
        "YOUR_SDK_KEY",        // API Key from Singular dashboard
        "YOUR_SDK_SECRET",      // Secret from Singular dashboard
        60,                      // Session timeout in seconds
        TEXT(""),               // Custom user ID (optional)
        true,                    // Enable SKAdNetwork for iOS
        false,                   // Manual SKAdNetwork conversion management
        30,                      // Wait 30 seconds for ATT prompt
        false,                   // Disable OAID collection
        true,                    // Enable logging for debugging
        3,                       // Log level (0-5, higher = more verbose)
        false,                   // Clipboard attribution
        TEXT(""),               // Facebook App ID (optional)
        TEXT("")                // Custom SDID (optional)
    );

    if (Success)
    {
        UE_LOG(LogTemp, Log, TEXT("Singular SDK initialized successfully"));
    }
    else
    {
        UE_LOG(LogTemp, Error, TEXT("Failed to initialize Singular SDK"));
    }

    // Set default pawn class
    static ConstructorHelpers::FClassFinder<APawn> PlayerPawnClassFinder(
        TEXT("/Game/FirstPerson/Blueprints/BP_FirstPersonCharacter")
    );
    DefaultPawnClass = PlayerPawnClassFinder.Class;
}

void AMyProject2GameMode::OnSingularSdidReceived(const FString result)
{
    UE_LOG(LogTemp, Log, TEXT("Singular SDID received: %s"), *result);
}

void AMyProject2GameMode::OnSingularDidSetSdid(const FString result)
{
    UE_LOG(LogTemp, Log, TEXT("Singular SDID set: %s"), *result);
}

Add the matching handler declarations to your game mode header (for example, AMyProject2GameMode.h ):

UFUNCTION()
void OnSingularSdidReceived(const FString result);

UFUNCTION()
void OnSingularDidSetSdid(const FString result);

Parámetros de configuración

Parámetros requeridos

Estos parámetros son necesarios para la inicialización del SDK. Obtenga sus credenciales del panel de control de Singular.

  • sdkKey: Su clave del SDK de Singular desde"Developer Tools > SDK Integration > SDK Keys" en su cuenta de Singular.
  • sdkSecret: Su secreto del SDK de Singular desde la misma ubicación en su cuenta de Singular.

Importante: Mantenga sus credenciales SDK seguras y no las envíe a repositorios públicos de control de versiones.


Parámetros opcionales

Personalice el comportamiento del SDK con estos parámetros de configuración opcionales.

  • sessionTimeout (predeterminado: 60): Establezca un tiempo de espera de sesión personalizado en segundos. Tras este periodo de inactividad, se crea una nueva sesión cuando el usuario vuelve a la aplicación.
  • customUserId (Predeterminado: vacío): Establece un identificador de usuario personalizado en la inicialización. Más información sobre identificadores de usuario personalizados.
  • skAdNetworkEnabled (Predeterminado: true, sólo iOS): Habilite la compatibilidad con SKAdNetwork para la atribución de iOS. Consulte Introducción a la solución SKAdNetwork de Singular.
  • manualSkanConversionManagement (Predeterminado: false, sólo iOS): Establezca en true para gestionar manualmente los valores de conversión de SKAdNetwork en lugar de dejar que Singular los gestione automáticamente.
  • waitForTrackingAuthorizationWithTimeoutInterval(Predeterminado: 0, sólo iOS): Retrasa el envío de sesiones/eventos a Singular hasta que el usuario responde a la solicitud de ATT (App Tracking Transparency) o transcurre el tiempo de espera. Más información sobre la compatibilidad con ATT.
  • oaidCollection (Predeterminado: false, sólo Android): Establézcalo como true para recopilar el OAID (Open Anonymous Device Identifier) del dispositivo en dispositivos Android.
  • enableLogging (Por defecto: false): Habilitar el registro de depuración SDK para la solución de problemas. Debe desactivarse en las versiones de producción.
  • logLevel (Predeterminado: 0): Establece el nivel de detalle del registro (0-5). Los valores más altos producen registros más detallados.
  • clipboardAttribution (Predeterminado: false, sólo iOS): activa la lectura del portapapeles para la atribución de enlaces universales.
  • facebookAppId (por defecto: vacío): Establezca su ID de aplicación de Facebook para la integración de atribución de Facebook.
  • customSdid (Predeterminado: vacío): Establezca un ID de dispositivo singular personalizado en lugar de utilizar el identificador generado automáticamente.