Unreal Engine SDK - Integração básica

Documento

Guia de integração do SDK do Unreal Engine

Guia para Desenvolvedores Registro de alterações
Pré-requisitos
Compatibilidade Unreal Engine 4.23+
Guias de integração
  1. Integração básica
  2. Acompanhamento de eventos e receita
  3. Implementação de links profundos
  4. Adicionando suporte a SKAdNetwork
  5. Opções avançadas

Instalar o SDK

  1. Faça o download e extraia o arquivo SDK.
  2. Na pasta raiz Project, crie uma pasta Plugins se ela não existir.
  3. Crie uma pasta "SingularSDK" na pasta "Plugins" da sua aplicação.
  4. Copie os ficheiros de arquivo extraídos para a pasta "SingularSDK" " na pasta Plugins da sua aplicação.

    unreal_sdk_install.png

    Sugestão: Para evitar um aviso de versão ao carregar o plug-in, remova a linha "EngineVersion" : "4.25.0" do ficheiro SingularSDK.uplugin.

  5. Atualize o "Plugins/SingularSDK/Source/SingularSDK/SingularSDK.Build.cs" com o seguinte:

    • Adicione o using System.IO; à parte superior do ficheiro.
    • Na condição Target.Platform == UnrealTargetPlatform.IOS:
      • Substituir

        PublicAdditionalLibraries.Add("sqlite3.0");
        PublicAdditionalLibraries.Add("z");

        Por isto:

        // System libraries with explicit paths
        string XcodeSDKPath = "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib";
        PublicAdditionalLibraries.AddRange(new string[] {
             Path.Combine(XcodeSDKPath, "libsqlite3.tbd"),
             Path.Combine(XcodeSDKPath, "libz.tbd")
        });
        PublicSystemLibraryPaths.Add(XcodeSDKPath);
      • Atualizar

        PublicFrameworks.AddRange(new string[] { 
             "AdSupport", 
             "StoreKit", 
             "SystemConfiguration", 
             "Security"
        });

        Com isto:

        PublicFrameworks.AddRange(new string[] {
             "AdSupport",
             "AppTrackingTransparency",
             "StoreKit",
             "SystemConfiguration",
             "Security",
             "AdServices",
             "WebKit",
             "Singular"
        });

    Exemplo:

    using System.IO;
    // ...
    if (Target.Platform == UnrealTargetPlatform.IOS)
    {    // ...
         // System libraries with explicit paths
         string XcodeSDKPath = "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib";
         PublicAdditionalLibraries.AddRange(new string[] {
            Path.Combine(XcodeSDKPath, "libsqlite3.tbd"),
            Path.Combine(XcodeSDKPath, "libz.tbd")
         });
         PublicSystemLibraryPaths.Add(XcodeSDKPath);
         //....
         PublicFrameworks.AddRange(new string[] {
         "AdSupport",
         "AppTrackingTransparency",
         "StoreKit",
         "SystemConfiguration",
         "Security",
         "AdServices",
         "WebKit",
         "Singular"
         });
         //...
    }
  6. Feche seu projeto Unreal se ele estiver aberto.
  7. Reabra seu projeto. Se for solicitado um prompt de Módulos ausentes, escolha Sim para continuar.
    unrealModules.png
  8. Ative o SingularSDK Plugin no menu: "Edit>Plugins". Procure por Singular.
    unreal_plugin_enabled.png
  9. Adicione SingularSDK como uma dependência ao array PublicDependencyModuleNames no ficheiro Build.cs da sua aplicação (Source/ProjectName/<YOUR_APP>.Build.cs):
    app_build.png

    PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject",
      "Engine", "InputCore", "SingularSDK" });
KNOWN ISSUE on Build: fatal error: 'Singular/Singular.h' file not found

PROBLEMACONHECIDO: Durante a primeira compilação, pode ocorrer o seguinte erro fatal:

Plugins/SingularSDK/Source/SingularSDK/Private/SingularSDKBPLibrary.cpp:14:9: fatal error: 'Singular/Singular.h' file not found

Para contornar este problema, siga estes passos:

  • Extraia o ficheiro Singular.framework.zip de "Plugins/SingularSDK/Source/ThirdParty/iOS"
  • Mova a pasta Singular.framework para "/Users/Shared/Epic Games/UE_5.5/Engine/Intermediate/UnzippedFrameworks/Singular"
  • Abra e modifique o ficheiro SingularConfig.h a partir de "/Users/Shared/Epic Games/UE_5.5/Engine/Intermediate/UnzippedFrameworks/Singular/Singular.framework/Headers"

    • Adicionar a seguinte linha ao topo do ficheiro:

      #pragma clang diagnostic ignored "-Wobjc-property-no-attribute"
      config_update.png
framework.png

Inicializar o SDK

Observação: Lembre-se de permanecer em conformidade com as várias leis de privacidade promulgadas nas regiões em que faz negócios, incluindo, mas não se limitando a, GDPR, CCPA e COPPA ao implementar os SDKs Singular. Para obter mais informações, consulte Práticas de aceitação e exclusão de SDK.

O código de inicialização do SDK deve ser chamado sempre que seu aplicativo for aberto. Ele é um pré-requisito para todas as funcionalidades de atribuição do Singular e também envia uma nova sessão para o Singular que é usada para calcular a retenção de usuários. Recomendamos inicializar o SDK o mais cedo possível na execução do seu aplicativo.

Para inicializar o SDK, chame o método USingularSDKBPLibrary::Initialize na classe SingularSDKBPLibrary:

  • Um bom lugar para inicializar o SDK é no construtor do modo de jogo, e para imprimir o identificador idfv para iOS também:
USingularSDKBPLibrary::Initialize Method
Descrição Inicializa o SDK do Singular e envia uma sessão de utilizador para os servidores do Singular.
Assinatura
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);
Exemplo de uso
// Copyright Epic Games, Inc. All Rights Reserved.

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

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

AMyProject2GameMode::AMyProject2GameMode()
	: Super()
{
	#if PLATFORM_IOS
    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

	USingularSDKBPLibrary::Initialize(
            "SDK KEY",    // API Key from config
            "SDK SECRET", // Secret from config
            60,                // Session timeout (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 (iOS-specific)
        );
	
	// set default pawn class to our Blueprinted character
	static ConstructorHelpers::FClassFinder PlayerPawnClassFinder(TEXT("/Game/FirstPerson/Blueprints/BP_FirstPersonCharacter"));
	DefaultPawnClass = PlayerPawnClassFinder.Class;

}

Parâmetros do método

Parâmetro Necessário? Descrição Predefinição
sdkKey Para obter estas chaves, inicie sessão na sua conta Singular e aceda a"Developer Tools > SDK Integration > SDK Keys".
sdkSecret

sessionTimeout

Define um tempo limite de sessão personalizado (em segundos). 60
customUserId Enviar o ID do utilizador para a Singular. Saiba mais abaixo
waitForTrackingAuthorization WithTimeoutInterval (iOS) Atrasa o envio de uma sessão/eventos para a Singular até que o usuário concorde ou se recuse a compartilhar seus dados de identificação do dispositivo. Saiba mais abaixo Falso
skAdNetworkEnabled (iOS) Defina como True para que a Singular rastreie o valor de conversão do usuário. Consulte Introdução à solução SKAdNetwork da Singular para obter mais informações. Falso
manualSkanConversion Management (iOS) Defina como True (Verdadeiro) se pretender gerir manualmente o valor de conversão da SKAdNetwork (o utilizador define-o e actualiza-o no código). Consulte Introdução à solução SKAdNetwork da Singular para obter mais informações. Falso
oaidCollection (Android) Defina como verdadeiro para recolher o OAID do dispositivo. Falso


Definir uma ID de utilizador

Você pode enviar seu ID de usuário interno para a Singular usando um método do SDK da Singular.

Nota: Se você usar a solução Cross-Device da Singular, você deve coletar a ID de usuário em todas as plataformas.

  • A ID de usuário pode ser qualquer identificador e não deve expor PII (Informações de identificação pessoal). Por exemplo, não deve utilizar o endereço de correio eletrónico, o nome de utilizador ou o número de telefone de um utilizador. A Singular recomenda o uso de um valor com hash exclusivo apenas para seus dados primários.
  • O valor da ID de usuário passado para a Singular também deve ser a mesma ID de usuário interna que você captura em todas as plataformas (Web/Mobile/PC/Console/Offline).
  • A Singular incluirá o ID de utilizador nas exportações ao nível do utilizador, ETL e postbacks do BI interno (se configurado). O ID do usuário é um dado primário e a Singular não o compartilha com outras partes.
  • O valor da ID de usuário, quando definido com o método Singular SDK, persistirá até que seja desmarcado usando o método UnsetCustomUserId ou até que o aplicativo seja desinstalado. Fechar ou reiniciar a aplicação não anula a definição do ID de utilizador.

Para definir o ID de utilizador, utilize o método SetCustomUserId. Para a anular (por exemplo, se o Utilizador "sair" da conta), ligue para UnsetCustomUserId.

Nota: Se vários Utilizadores utilizarem um único dispositivo, recomendamos a implementação de um fluxo de fim de sessão para definir e anular a definição do ID de Utilizador para cada início e fim de sessão.

Se você já sabe a ID de usuário quando o aplicativo é aberto, chame SetCustomUserId antes de inicializar o SDK do Singular. Dessa forma, o Singular pode ter a ID de usuário desde a primeira sessão. No entanto, a ID de usuário normalmente não está disponível até que o usuário se registre ou faça um login. Nesse caso, chame SetCustomUserId após a conclusão do fluxo de registo.

Método SetCustomUserId do SingularSDK
Descrição Envia o ID do usuário para o Singular.
Assinatura static void SetCustomUserId(FString customUserId)
Exemplo de uso
USingularSDKBPLibrary::SetCustomUserId("custom_user_id");
Método UnsetCustomUserId do SingularSDK
Descrição Anula a definição do ID de utilizador que foi enviado para o Singular.
Assinatura static void UnsetCustomUserId()
Exemplo de uso
USingularSDKBPLibrary::UnsetCustomUserId();

Opcional: Mapeamento do dispositivo de ID de utilizador personalizado

Importante: Esta funcionalidade avançada da Enterprise só está disponível em casos excepcionais. Consulte um dos engenheiros de soluções da Singular antes de implementá-lo.

A Singular pode receber dados adicionais de rastreamento de eventos móveis por meio de uma integração de servidor para servidor. Para utilizar esse recurso, é necessário mapear o ID do usuário para o identificador de rastreamento de dispositivos móveis da Singular.

Nota: Chame este método o mais rápido possível após a inicialização do Singular SDK ou assim que tiver o ID do usuário.

Método SetCustomUserId do SingularSDK
Descrição Define o ID do usuário personalizado igual ao login e o mapeia para o identificador de rastreamento do Singular.
Assinatura static void SetDeviceCustomUserId(FString customUserId)
Exemplo de uso
USingularSDKBPLibrary::SetDeviceCustomUserId("custom_user_id");


Suporte à transparência de rastreamento de aplicativos do iOS 14+

No iOS 14+, os aplicativos precisam solicitar o consentimento do usuário antes de compartilhar dados do usuário, incluindo o uso do valor IDFA do dispositivo (consulte Transparência do rastreamento de aplicativos). A Singular se beneficia muito de ter o IDFA para identificar dispositivos e realizar a atribuição de instalação. Portanto, você deve solicitar o consentimento do usuário antes que o SDK Singular comece a enviar uma sessão de usuário e eventos de usuário para os servidores Singular.

Depois que o SDK envia uma sessão, ele aciona o processo de atribuição de instalação do Singular, com base apenas nos dados que estão disponíveis para o Singular naquele momento.

Para atrasar o envio de uma sessão de usuário e eventos de usuário pelo SDK, inicialize o Singular SDK com o parâmetro waitForTrackingAuthorizationWithTimeoutInterval. Se isso for feito:

  1. O SDK será inicializado e começará a gravar uma sessão e eventos de usuário, mas ainda não os enviará para o servidor Singular.
  2. Assim que o consentimento do App Tracking Transparency for concedido/negado ou o tempo limite definido terminar, o SDK enviará a sessão e quaisquer eventos em fila para o servidor Singular (com ou sem o IDFA).
  3. Em seguida, o Singular iniciará o processo de atribuição, aproveitando o IDFA se ele estiver disponível.

Para obter mais informações, consulte Preparando para o iOS 14.