Suporte a SKAdNetwork
SKAdNetwork é a estrutura de atribuição focada na privacidade da Apple para campanhas de instalação de aplicativos iOS. A partir do SDK do Unreal Engine versão 2.0.11, o SKAdNetwork é ativado por padrão no Modo Gerenciado, em que o Singular atualiza automaticamente os valores de conversão com base no modelo de conversão configurado no painel.
Não é necessária nenhuma configuração adicional: Se estiver usando o SDK do Unreal Engine versão 2.0.11 ou posterior, a SKAdNetwork funcionará imediatamente. Não são necessárias alterações de código ou configurações adicionais para a funcionalidade básica.
Entendendo os modos SKAN
Modo gerenciado (padrão)
No Managed Mode, o Singular lida automaticamente com as atualizações do valor de conversão com base no modelo de conversão configurado no painel. Esta é a abordagem recomendada para a maioria das aplicações, uma vez que requer um código mínimo e fornece um rastreamento de conversão ideal.
- Atualizações automáticas: O Singular gerencia todas as atualizações de valores de conversão com base nos eventos do usuário e no seu modelo configurado.
- Configuração do painel: Projete seu modelo de conversão no dashboard do Singular sem alterações de código.
- Otimização: Beneficie-se da experiência da Singular em maximizar as atualizações do valor de conversão dentro das restrições da Apple.
Modo manual (avançado)
O Modo manual oferece controle total sobre as atualizações de valores de conversão, permitindo implementar uma lógica personalizada para determinar quando e como atualizar os valores de conversão do SKAN. Utilize este modo apenas se tiver requisitos específicos que o Modo Gerido não consegue satisfazer.
Funcionalidade avançada: O Modo manual requer uma implementação cuidadosa e a compreensão das restrições da SKAdNetwork da Apple, incluindo janelas e limitações de atualização de valores de conversão. A maioria das aplicações deve utilizar o Managed Mode.
Opções de configuração
Configure o comportamento da SKAdNetwork no método USingularSDKBPLibrary::Initialize. A tabela seguinte mostra as opções disponíveis e as suas predefinições.
| Opção | Predefinição | Descrição |
| skAdNetworkEnabled | True | Ativar o suporte de SKAdNetwork para rastreamento de atribuição de iOS. |
| manualSKANConversionManagement | False | Ativar o Modo manual para controlar as actualizações do valor de conversão. |
Observação: a partir da versão 2.0.11 do SDK do Unreal Engine, a SKAdNetwork é ativada por padrão. Se estiver a utilizar uma versão mais antiga, terá de ativar a SKAdNetwork definindo ode translatete="no "skAdNetworkEnabled para ode translate="="no "True ou chamando SkanRegisterAppForAdNetworkAttribution().
Versões antigas do SDK
Se estiver a utilizar uma versão do SDK do Unreal Engine anterior à 2.0.11, active manualmente o suporte de SKAdNetwork utilizando o método abaixo.
Ativar via configuração
Defina skAdNetworkEnabled como Trueao inicializar o 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"));
}
Ativar através da chamada de método
Em alternativa, chame o método de registo diretamente no código de inicialização da sua aplicação.
// Register for SKAdNetwork attribution
USingularSDKBPLibrary::SkanRegisterAppForAdNetworkAttribution();
UE_LOG(LogTemp, Log, TEXT("Registered for SKAdNetwork attribution"));
Recomendação: Atualize para a versão mais recente do SDK do Unreal Engine para se beneficiar da ativação automática da SKAdNetwork e dos recursos e correções de erros mais recentes.
Configuração do modo manual
Para implementar uma lógica de valor de conversão personalizada, active o Modo manual e utilize os métodos SDK fornecidos para atualizar e monitorizar os valores de conversão ao longo do ciclo de vida da aplicação.
Ativar o Modo manual
Defina manualSKANConversionManagement para Trueao inicializar o SDK para assumir o controlo das actualizações dos valores de conversão.
// 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"));
}
Atualizar valor de conversão
Utilize este método para atualizar manualmente o valor de conversão SKAdNetwork com base na sua lógica personalizada. O valor de conversão deve ser um número inteiro entre 0 e 63.
Importante: este método só funciona quando manualSKANConversionManagement está definido como True. Se o Managed Mode estiver ativo, as actualizações manuais serão ignoradas.
Assinatura do método
static bool SkanUpdateConversionValue(int conversionValue)
Exemplo de utilização
// 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);
}
Obter valor de conversão atual
Recupera o valor de conversão atual rastreado pelo Singular SDK. Isto é útil para implementar a lógica condicional com base no estado atual.
Assinatura do método
static int SkanGetConversionValue()
Exemplo 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);
}
Monitorar atualizações de valor de conversão
Configure um delegado para receber notificações em tempo real sempre que o valor de conversão for alterado. Isto permite-lhe reagir às actualizações do valor de conversão e registar análises ou desencadear outros comportamentos da aplicação.
Etapas de implementação
- Adicione ode translate="no "o "#include "SingularDelegates.h" ao topo do ficheiro de cabeçalho da sua classe.
-
Adicione a seguinte declaração de delegado ao cabeçalho da classe:
// 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); -
No ficheiro de implementação da sua classe, registe o delegado:
// Register the delegate (typically in BeginPlay or constructor) OnConversionValueUpdated.AddDynamic(this, &UYourClassName::OnNewConversionValue); -
Implemente o método de retorno de chamada:
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(); } }
Melhores práticas: Use o delegado de valor de conversão para manter uma exibição sincronizada do estado de conversão atual em seu aplicativo. Isso é especialmente útil para depurar e garantir que sua lógica personalizada funcione corretamente.
Recursos adicionais
Para obter informações mais abrangentes sobre a implementação e as práticas recomendadas da SKAdNetwork, consulte o Guia de implementação da SKAdNetwork do SDK do iOS.
Suporte ao App Tracking Transparency (ATT)
A App Tracking Transparency (ATT) é a estrutura de privacidade da Apple que exige o consentimento do utilizador antes de aceder ao IDFA (Identificador para Anunciantes) do dispositivo e partilhar dados do utilizador. A implementação correta da ATT é fundamental para a atribuição do iOS e para maximizar a precisão das suas campanhas de aquisição de utilizadores.
Por que a ATT é importante para a atribuição
A partir do iOS 14.5, os aplicativos devem solicitar permissão do usuário por meio da estrutura ATT antes de acessar o IDFA. Embora a atribuição ainda seja possível sem o IDFA usando impressão digital e métodos probabilísticos, ter o IDFA melhora significativamente a precisão da atribuição e fornece correspondência determinística.
- Atribuição determinística: O IDFA permite uma atribuição precisa, ao nível do dispositivo, que liga as impressões de anúncios diretamente às instalações.
- Otimização da rede de anúncios: As redes de anúncios podem otimizar melhor as campanhas e fornecer relatórios mais precisos com o acesso ao IDFA.
- Informações ao nível do utilizador: O acesso ao IDFA permite uma análise mais granular do comportamento do utilizador e um acompanhamento de coortes.
Recomendação: A Singular recomenda vivamente a implementação do prompt ATT e o pedido de consentimento do utilizador. Explique os benefícios para os utilizadores (anúncios personalizados, melhor experiência de aplicação) para maximizar as taxas de aceitação.
Tempo de inicialização do SDK
O momento da inicialização do SDK em relação ao prompt ATT é fundamental. Se o SDK inicializar e enviar a primeira sessão antes que o usuário responda ao prompt ATT, o IDFA não será capturado, resultando em uma atribuição menos precisa.
Por que atrasar a inicialização?
Por padrão, o Singular SDK envia uma sessão imediatamente após a inicialização. Quando essa sessão vem de um novo dispositivo, ela aciona o processo de atribuição do Singular usando apenas os dados disponíveis naquele momento. Se o usuário ainda não tiver respondido ao prompt ATT, o IDFA não estará disponível e a atribuição será baseada em métodos menos precisos.
É fundamental: Solicite sempre o consentimento ATT e recupere o IDFA antes de o SDK Singular enviar a sua primeira sessão. Se não o fizer, perderá permanentemente o IDFA para os dados de atribuição desse dispositivo.
Configurar o tempo limite de espera do SDK
Configure o SDK para aguardar a resposta ATT do usuário antes de inicializar, definindo o parâmetro waitForTrackingAuthorizationWithTimeoutInterval. Esse atraso dá ao usuário tempo para responder ao prompt ATT, evitando atrasos indefinidos se o prompt não for exibido.
Como funciona o atraso ATT
- O SDK inicializa e começa a gravar uma sessão e os eventos do utilizador, mas ainda não os envia para os servidores Singular.
- Assim que o consentimento do App Tracking Transparency é concedido, negado ou o tempo limite expira, o SDK envia a sessão e os eventos em fila para a Singular (com ou sem IDFA).
- A Singular inicia o processo de atribuição, aproveitando o IDFA, se disponível.
Implementação
Exemplo de configuração
Defina o parâmetro waitForTrackingAuthorizationWithTimeoutIntervalao inicializar o SDK. Este valor representa o número máximo de segundos a aguardar pela resposta ATT do utilizador.
// 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"));
}
Consideração do tempo limite: Defina um valor de timeout adequado (normalmente 60-300 segundos). Se o tempo limite decorrer antes de o utilizador responder, o SDK continua a enviar dados sem o IDFA.
Melhores práticas de ATT
- Mensagens de pré-prompt: Mostre aos utilizadores um ecrã pré-ATT que explique por que razão necessita de permissão de rastreio e como isso os beneficia (melhores anúncios, experiência melhorada). Isto pode aumentar significativamente as taxas de aceitação.
- O momento é importante: Mostre o aviso ATT num momento natural do fluxo da aplicação, e não imediatamente no primeiro lançamento. Deixe que os utilizadores experimentem primeiro a sua aplicação.
-
Mensagens personalizadas: Personalize a mensagem de aviso da ATT no ficheiro Info.plist utilizando a tecla
NSUserTrackingUsageDescriptionpara explicar claramente o objetivo do rastreio. - Teste exaustivamente: Teste cenários autorizados e negados para garantir que a sua aplicação funciona corretamente, independentemente da escolha do utilizador.
- Respeite a escolha do utilizador: Nunca solicite repetidamente aos utilizadores que tenham negado o rastreio nem mostre mensagens agressivas que os pressionem a aceitar.
Revisão da App Store: As aplicações que não implementem corretamente a ATT ou que tentem contornar a estrutura podem ser rejeitadas durante a revisão da App Store. Certifique-se de que a sua implementação segue as diretrizes da Apple e respeita as opções de privacidade do utilizador.
Recursos adicionais
Para obter mais informações sobre as alterações e práticas recomendadas do iOS 14+, consulte os seguintes recursos: