Conformidade com as leis de privacidade de dados
Implemente a coleta de dados em conformidade com a privacidade, notificando a Singular sobre as opções de consentimento do usuário para GDPR, CCPA e outros regulamentos de privacidade do consumidor.
Quando os usuários consentirem ou recusarem o compartilhamento das suas informações com terceiros, utilize os métodos de privacidade da Singular para comunicar a sua escolha. Isso garante a conformidade com regulamentos como a Lei de Privacidade do Consumidor da Califórnia (CCPA)e permite que os parceiros respeitem as preferências de privacidade do usuário.
Saiba mais: Consulte Privacidade do usuário e Limitar o compartilhamento de dadospara obter informações detalhadas sobre como a Singular processa o consentimento de privacidade.
Limitar o compartilhamento de dados
Controlar o compartilhamento de dados de terceiros
Notificar a Singular se os usuários consentiram em compartilhar seus dados pessoais com parceiros terceiros usando o método LimitDataSharing.
Assinatura do método:
SingularSDK.LimitDataSharing(bool shouldLimitDataSharing)
Parâmetros:
- false: O usuário optou e consentiu o compartilhamento dos seus dados
- true: O usuário optou por não participar e não consente o compartilhamento dos seus dados
Importante: Embora opcional, este método afecta o compartilhamento de dados de atribuição. Alguns parceiros apenas compartilham informações de atribuição completas quando são explicitamente notificados de que os usuários optaram por participar.
Exemplos de utilização
using UnityEngine;
using Singular;
public class PrivacyManager : MonoBehaviour
{
// User has opted in to share their data
public void OnUserOptedInToDataSharing()
{
SingularSDK.LimitDataSharing(false);
Debug.Log("Data sharing enabled");
}
// User has opted out and declined to share their data
public void OnUserOptedOutOfDataSharing()
{
SingularSDK.LimitDataSharing(true);
Debug.Log("Data sharing limited");
}
// Example: Set based on user preference
public void HandlePrivacyConsent(bool userConsented)
{
// Pass inverse: false = opted in, true = opted out
SingularSDK.LimitDataSharing(!userConsented);
Debug.Log($"Data sharing: {(userConsented ? "Enabled" : "Limited")}");
}
}
Como funciona:
A Singular utiliza esta definição em Postbacks de privacidade do usuárioe transmite-a aos parceiros que a exigem para conformidade regulamentar.
Para a documentação completa de configuração, consulte a referência de limitAdvertisingIdentifiers.
Métodos de conformidade com o GDPR
Gerencie o consentimento de rastreamento do usuário e controle a funcionalidade do SDK para estar em conformidade com o GDPR (Regulamento Geral de Proteção de Dados) e outros regulamentos de privacidade.
Gestão do consentimento de rastreamento
TrackingOptIn
Registra o consentimento explícito do usuário para o rastreamento, enviando um evento GDPR opt-in para os servidores Singular.
Assinatura do método:
SingularSDK.TrackingOptIn()
Quando usar:
- Conformidade com o GDPR: Chamar quando os usuários consentirem explicitamente com o rastreamento em regiões regulamentadas pelo GDPR
- Registro de consentimento: Marca os usuários como tendo fornecido consentimento GDPR nos sistemas da Singular
- Comportamento padrão: Sem esta chamada, o SDK continua a rastrear mas não registra especificamente o consentimento
using UnityEngine;
using Singular;
public class GDPRManager : MonoBehaviour
{
// User accepted tracking consent
public void OnUserAcceptedTracking()
{
SingularSDK.TrackingOptIn();
Debug.Log("User opted in to tracking");
}
// Example: Call after consent dialog
public void ShowGDPRConsentDialog()
{
// Your consent dialog UI logic here
// ...
// If user accepts:
OnUserAcceptedTracking();
}
}
Métodos de controle de rastreamento
StopAllTracking
Desabilita completamente todas as atividades de rastreamento do SDK para o usuário atual neste dispositivo.
Assinatura do método:
SingularSDK.StopAllTracking()
Crítico Aviso: Este método desativa permanentemente o SDK até que ResumeAllTracking() seja chamado. O estado de desativação persiste durante as reinicializações do aplicativo e só pode ser revertido programaticamente.
Comportamento:
- Efeito imediato: Interrompe todo o rastreamento, relatório de eventos e coleta de dados instantaneamente
- Estado persistente: Permanece desativado mesmo depois de o aplicativo ser fechado e reaberto
-
Sem reinicialização automática: Tem de chamar explicitamente
ResumeAllTracking()para voltar a ativar
using UnityEngine;
using Singular;
public class TrackingController : MonoBehaviour
{
// User declined all tracking
public void OnUserDeclinedTracking()
{
SingularSDK.StopAllTracking();
Debug.Log("All tracking stopped");
// Optionally store preference
PlayerPrefs.SetInt("tracking_enabled", 0);
PlayerPrefs.Save();
}
// Example: Handle user opt-out from settings menu
public void HandlePrivacySettingsChange(bool trackingEnabled)
{
if (!trackingEnabled)
{
SingularSDK.StopAllTracking();
Debug.Log("Privacy settings: Tracking disabled");
}
}
}
RetomarTudoRastreio
Reativar o rastreamento depois de ter sido interrompido com StopAllTracking().
Assinatura do método:
SingularSDK.ResumeAllTracking()
Casos de utilização:
- Alteração de consentimento: O usuário altera as preferências de privacidade e volta a optar pelo rastreamento
- Configurações de privacidade: O usuário atualiza o consentimento através do menu de configurações do aplicativo
- Conformidade regional: Reativar o rastreamento quando o usuário se desloca para regiões não regulamentadas
using UnityEngine;
using Singular;
public class TrackingController : MonoBehaviour
{
// User opted back in to tracking
public void OnUserResumedTracking()
{
SingularSDK.ResumeAllTracking();
Debug.Log("Tracking resumed");
// Optionally update stored preference
PlayerPrefs.SetInt("tracking_enabled", 1);
PlayerPrefs.Save();
}
// Example: Handle consent update from settings
public void HandlePrivacySettingsChange(bool trackingEnabled)
{
if (trackingEnabled)
{
SingularSDK.ResumeAllTracking();
Debug.Log("Privacy settings: Tracking enabled");
}
}
}
IsAllTrackingStopped
Verificar se o rastreamento foi desativado para o usuário atual.
Assinatura do método:
bool SingularSDK.IsAllTrackingStopped()
Retorna:
-
true: O rastreamento está atualmente parado através de
StopAllTracking() - false: O rastreamento está ativo (nunca foi interrompido ou retomado)
using UnityEngine;
using UnityEngine.UI;
using Singular;
public class PrivacySettingsUI : MonoBehaviour
{
public Toggle trackingToggle;
public Text statusText;
void Start()
{
// Check current tracking status on startup
UpdatePrivacyUI();
}
// Check current tracking status
public bool IsTrackingEnabled()
{
return !SingularSDK.IsAllTrackingStopped();
}
// Example: Display privacy status in settings
public string GetPrivacyStatusText()
{
if (SingularSDK.IsAllTrackingStopped())
{
return "Tracking: Disabled";
}
else
{
return "Tracking: Enabled";
}
}
// Example: Sync UI with tracking state
public void UpdatePrivacyUI()
{
bool isStopped = SingularSDK.IsAllTrackingStopped();
if (trackingToggle != null)
{
trackingToggle.isOn = !isStopped;
}
if (statusText != null)
{
statusText.text = GetPrivacyStatusText();
}
Debug.Log($"Current tracking state: {(isStopped ? "Stopped" : "Active")}");
}
// Handle toggle change from UI
public void OnTrackingToggleChanged(bool enabled)
{
if (enabled)
{
SingularSDK.ResumeAllTracking();
}
else
{
SingularSDK.StopAllTracking();
}
UpdatePrivacyUI();
}
}
Proteção da privacidade das crianças
TrackingUnder13
Notifica a Singular de que o usuário tem menos de 13 anos de idade para cumprir a COPPA (Children's Online Privacy Protection Act) e outros regulamentos de privacidade infantil.
Assinatura do método:
SingularSDK.TrackingUnder13()
Requisitos de conformidade:
- Conformidade com a COPPA: Necessário para aplicativos que coletam dados de crianças com menos de 13 anos nos Estados Unidos
- Conteúdo com limite de idade: Utilizar quando os usuários se identificam como tendo menos de 13 anos durante o registro ou a verificação da idade
- Rastreamento restrito: Limita a coleta de dados para cumprir as leis de proteção da privacidade das crianças
using UnityEngine;
using Singular;
public class COPPAManager : MonoBehaviour
{
// User identified as under 13
public void OnUserUnder13()
{
SingularSDK.TrackingUnder13();
Debug.Log("COPPA mode enabled for user under 13");
}
// Example: Call after age verification
public void OnAgeVerified(int userAge)
{
if (userAge < 13)
{
SingularSDK.TrackingUnder13();
Debug.Log("COPPA restrictions applied");
// Also limit advertising identifiers
SingularSDK.SetLimitAdvertisingIdentifiers(true);
}
}
}
Importante: Chame este método o mais cedo possível depois de determinar que o usuário tem menos de 13 anos, idealmente durante a inicialização do aplicativo ou imediatamente após a verificação da idade. Isso garante que todo o rastreamento subsequente respeite os regulamentos de privacidade das crianças.
SetLimitAdvertisingIdentifiers
Restringe a coleta e o uso de identificadores de publicidade (GAID no Android, IDFA no iOS) após a inicialização do SDK para aplicativos de público misto.
Assinatura do método:
SingularSDK.SetLimitAdvertisingIdentifiers(bool isEnabled)
Parâmetros:
- true: Ativar o modo de identificadores de publicidade limitados (restringir a coleta)
- false: Desativar o modo de identificadores de publicidade limitados (coleta normal)
Casos de uso:
- Aplicativos de público misto: Aplicativos que servem adultos e crianças em que a idade é determinada após o lançamento do aplicativo
- Controles de privacidade dinâmicos: Ajustar o rastreamento com base nas ações do usuário ou no conteúdo acessado
- Restrições de tempo de execução: Aplicar limitações de identificadores de publicidade após a configuração inicial do SDK
using UnityEngine;
using Singular;
public class AdvertisingIdentifierManager : MonoBehaviour
{
// Limit advertising identifiers after initialization
public void EnableLimitedMode()
{
SingularSDK.SetLimitAdvertisingIdentifiers(true);
Debug.Log("Advertising identifiers limited");
}
// Example: Mixed audience app with age gate
public void OnKidsModeSwitched(bool isKidsMode)
{
if (isKidsMode)
{
SingularSDK.SetLimitAdvertisingIdentifiers(true);
Debug.Log("Advertising identifiers limited for kids mode");
}
else
{
SingularSDK.SetLimitAdvertisingIdentifiers(false);
Debug.Log("Advertising identifiers unrestricted for adult mode");
}
}
// Example: Content-based restrictions
public void OnViewingChildrensContent()
{
SingularSDK.SetLimitAdvertisingIdentifiers(true);
Debug.Log("Ad identifiers restricted for children's content");
}
// Example: Combined with TrackingUnder13
public void OnAgeVerified(int age)
{
if (age < 13)
{
SingularSDK.TrackingUnder13();
SingularSDK.SetLimitAdvertisingIdentifiers(true);
Debug.Log("Full COPPA restrictions applied");
}
}
}
Alternativa de configuração: Também é possível limitar os identificadores de publicidade durante a inicialização do SDK, definindo a propriedade limitAdvertisingIdentifiers na configuração do SDK Singular, se conhecer os requisitos de privacidade antes do início do SDK.
Propriedade de configuração
Definir limitações de identificadores de publicidade durante a inicialização do SDK para aplicativos que conhecem os requisitos de privacidade antecipadamente.
using UnityEngine;
using Singular;
public class SDKInitializer : MonoBehaviour
{
void Start()
{
// Get reference to SingularSDK component
var singularSDK = GetComponent<SingularSDK>();
// Limit advertising identifiers at initialization
singularSDK.limitAdvertisingIdentifiers = true;
// Initialize SDK
if (!singularSDK.InitializeOnAwake)
{
SingularSDK.InitializeSingularSDK();
}
}
}
Práticas recomendadas de implementação
Exemplo de gerenciamento de privacidade completo
Implemente controles de privacidade abrangentes que respeitem as preferências do usuário e cumpram os regulamentos.
using UnityEngine;
using Singular;
public class ComprehensivePrivacyManager : MonoBehaviour
{
private const string PREF_USER_CONSENT = "privacy_user_consent";
private const string PREF_DATA_SHARING = "privacy_data_sharing";
void Start()
{
// Initialize privacy settings on app start
InitializePrivacySettings();
}
/// <summary>
/// Initialize privacy settings on app startup based on stored preferences
/// </summary>
public void InitializePrivacySettings()
{
bool hasUserConsent = GetUserConsent();
bool allowDataSharing = GetDataSharingPreference();
// Apply stored tracking preference
if (hasUserConsent)
{
SingularSDK.TrackingOptIn();
SingularSDK.ResumeAllTracking();
Debug.Log("Privacy initialized: Tracking enabled with consent");
}
else
{
SingularSDK.StopAllTracking();
Debug.Log("Privacy initialized: Tracking disabled");
}
// Set data sharing preference (inverse logic)
SingularSDK.LimitDataSharing(!allowDataSharing);
Debug.Log($"Privacy initialized: consent={hasUserConsent}, sharing={allowDataSharing}");
}
/// <summary>
/// User accepts tracking via consent dialog
/// </summary>
public void OnUserAcceptedTracking()
{
SaveUserConsent(true);
SingularSDK.TrackingOptIn();
SingularSDK.ResumeAllTracking();
Debug.Log("User accepted tracking");
}
/// <summary>
/// User declines tracking
/// </summary>
public void OnUserDeclinedTracking()
{
SaveUserConsent(false);
SingularSDK.StopAllTracking();
Debug.Log("User declined tracking");
}
/// <summary>
/// User updates data sharing preference
/// </summary>
/// <param name="enabled">True to enable data sharing, false to limit it</param>
public void SetDataSharingEnabled(bool enabled)
{
SaveDataSharingPreference(enabled);
// Note: LimitDataSharing uses inverse logic
// false = data sharing enabled, true = data sharing limited
SingularSDK.LimitDataSharing(!enabled);
Debug.Log($"Data sharing: {(enabled ? "Enabled" : "Limited")}");
}
/// <summary>
/// Check if tracking is currently enabled
/// </summary>
/// <returns>True if tracking is active, false if stopped</returns>
public bool IsTrackingEnabled()
{
return !SingularSDK.IsAllTrackingStopped();
}
/// <summary>
/// Get current privacy status as readable text
/// </summary>
/// <returns>Human-readable tracking status</returns>
public string GetPrivacyStatus()
{
bool isEnabled = !SingularSDK.IsAllTrackingStopped();
bool dataSharingEnabled = GetDataSharingPreference();
return $"Tracking: {(isEnabled ? "Enabled" : "Disabled")}\n" +
$"Data Sharing: {(dataSharingEnabled ? "Enabled" : "Limited")}";
}
// Private helper methods for PlayerPrefs storage
private bool GetUserConsent()
{
return PlayerPrefs.GetInt(PREF_USER_CONSENT, 0) == 1;
}
private void SaveUserConsent(bool consent)
{
PlayerPrefs.SetInt(PREF_USER_CONSENT, consent ? 1 : 0);
PlayerPrefs.Save();
}
private bool GetDataSharingPreference()
{
return PlayerPrefs.GetInt(PREF_DATA_SHARING, 0) == 1;
}
private void SaveDataSharingPreference(bool enabled)
{
PlayerPrefs.SetInt(PREF_DATA_SHARING, enabled ? 1 : 0);
PlayerPrefs.Save();
}
}
Melhores práticas:
- Armazenamento persistente: Guarde as preferências do usuário utilizando PlayerPrefs ou uma solução de armazenamento seguro
- Inicialização antecipada: Aplicar configurações de privacidade antes da inicialização do SDK, quando possível
-
Sincronização da IU: Mantenha as configurações da interface do usuário sincronizadas com o estado real do SDK usando
IsAllTrackingStopped() - Comunicação clara: Fornecer controles de privacidade claros e acessíveis nas configurações do aplicativo
-
Lógica inversa: Lembre-se de que
LimitDataSharing(false)significa que o compartilhamento de dados está ativado, enquantotruesignifica que está limitado - Documentação de conformidade: Manter registros de quando e como os usuários fornecem ou revogam o consentimento