SDK do iOS - Configurando um ID de usuário e PII hasheada

Configurando um ID de usuário e PII hasheada

Envie seu ID de usuário interno para o Singular para habilitar o rastreamento entre dispositivos e relatórios de dados em nível de usuário.

Observação: Se você usa a solução entre dispositivos do Singular , é necessário coletar o ID de usuário em todas as plataformas.

Requisitos do ID de usuário

Privacidade e melhores práticas

Siga estas diretrizes ao implementar o rastreamento do ID de usuário para garantir a conformidade com a privacidade e a medição correta entre dispositivos.

  • Sem PII: O ID de usuário não deve expor Informações de Identificação Pessoal (PII), como endereços de e-mail, nomes de usuário ou números de telefone. Use um valor hasheado e único dos seus dados próprios (first-party). Para enviar um endereço de e-mail ou número de telefone, use a API dedicada de PII do usuário.
  • Consistência entre plataformas: O valor do ID de usuário deve ser o mesmo identificador interno que você captura em todas as plataformas (Web/Mobile/PC/Console/Offline) para uma medição precisa entre dispositivos.
  • Dados próprios (first-party): O Singular inclui o ID de usuário em exportações em nível de usuário, ETL e postbacks de BI internos (se configurados). O ID de usuário é um dado próprio e não é compartilhado com terceiros.
  • Persistência: O ID de usuário persiste até ser explicitamente desativado usando unsetCustomUserId() ou até que o aplicativo seja desinstalado. Fechar ou reiniciar o aplicativo não limpa o ID de usuário.

Visão geral da implementação

Quando configurar o ID de usuário

Use setCustomUserId() para configurar o identificador do usuário e unsetCustomUserId() para limpá-lo durante o logout.

Melhor prática: Se vários usuários compartilham um único dispositivo, implemente um fluxo de logout que chame setCustomUserId() no login e unsetCustomUserId() no logout.

Se você já conhece o ID de usuário quando o aplicativo é aberto, chame setCustomUserId() antes de inicializar o SDK do Singular. Isso garante que o Singular receba o ID de usuário desde a primeira sessão. No entanto, o ID de usuário normalmente não está disponível até que o usuário se registre ou faça login. Nesse caso, chame setCustomUserId() após a conclusão do fluxo de registro ou autenticação.


Métodos do SDK

Configurar o Custom User ID

Envie seu ID de usuário interno para o Singular para rastreamento entre dispositivos e relatórios em nível de usuário.

Swift Objective-C
// Set the user ID after login or registration
Singular.setCustomUserId("custom_user_id")

Assinatura do método:

+ (void)setCustomUserId:(NSString *)customUserId;

+setCustomUserId: retorna void — não há sinal de sucesso/falha no ponto de chamada. O ID de usuário é anexado à próxima sessão e evento que o SDK enviar.

O método de nome semelhante +setDeviceCustomUserId: está anotado como __attribute__((deprecated)) e existe apenas para compatibilidade com código legado. Sempre chame +setCustomUserId: em código novo.


Desativar o Custom User ID

Limpe o ID de usuário quando um usuário fizer logout para garantir o rastreamento preciso das sessões em dispositivos multiusuário.

Swift Objective-C
// Unset the user ID on logout
Singular.unsetCustomUserId()

Assinatura do método:

+ (void)unsetCustomUserId;

PII do usuário (e-mail e telefone)

O ID de usuário descrito acima é o seu próprio identificador opaco. Se você também quiser enviar o endereço de e-mail ou o número de telefone do usuário ao Singular, use a API separada SingularUserDetails. O SDK normaliza e aplica hash SHA-256 a esses valores no dispositivo, portanto o endereço de e-mail e o número de telefone brutos nunca são transmitidos.

Disponibilidade: Versão 12.14.0 e superiores do SDK do iOS. Esta API não está disponível na versão Kids do SDK.

Escolher um modo de hash

Há duas formas de fornecer PII. Escolha uma por usuário e mantenha a consistência.

  • Hash pelo SDK (recomendado): Passe o e-mail ou o número de telefone em texto simples. O SDK normaliza o valor, aplica hash e gera todas as variantes que o Singular pode usar para correspondência.
  • Pré-hasheado: Passe valores que você já normalizou e submeteu a hash SHA-256. O SDK os armazena exatamente como fornecidos e não realiza nenhum processamento adicional. Use esta opção quando seu app não puder manter PII em texto simples no momento da chamada.

Importante: Se você definir tanto um valor em texto simples quanto a sua variante pré-hasheada correspondente, o valor pré-hasheado prevalece.

Setters de SingularUserDetails

Setter Detalhes
setEmail

Modo: Hash pelo SDK

Endereço de e-mail em texto simples. O SDK remove espaços e converte o valor para minúsculas antes de aplicar o hash. Para endereços gmail.com e googlemail.com, ele também gera uma segunda variante com o sufixo +tag e todos os pontos removidos da parte local.

Exemplo: user@example.com

setPhoneNumber

Modo: Hash pelo SDK

Número de telefone em texto simples. O SDK gera duas variantes: uma no formato E.164 que mantém o + inicial e remove todos os outros caracteres não numéricos, e outra apenas com dígitos, que remove também o +. Inclua o código do país para que a variante E.164 seja utilizável.

Exemplo: +15551234567

setEmailSTD

Modo: Pré-hasheado

Hash SHA-256 do endereço de e-mail após remover os espaços e convertê-lo para minúsculas.

setEmailNoDots

Modo: Pré-hasheado

Hash SHA-256 do endereço de e-mail após remover os espaços, convertê-lo para minúsculas e retirar o sufixo +tag e todos os pontos da parte local. Aplica-se a endereços do tipo Gmail.

setPhoneE164

Modo: Pré-hasheado

Hash SHA-256 do número de telefone no formato E.164, mantendo o + inicial.

setPhoneDigits

Modo: Pré-hasheado

Hash SHA-256 do número de telefone com todos os caracteres não numéricos removidos, incluindo o + inicial.

Cada setter tem um getter correspondente (getEmail, getPhoneNumber, getEmailSTD, getEmailNoDots, getPhoneE164, getPhoneDigits) que retorna o valor definido.


Definir a PII na inicialização

Atribua o objeto a SingularConfig.userDetails antes de chamar start para que a PII seja anexada à primeira sessão enviada pelo SDK.

Swift Objective-C
let config = SingularConfig(apiKey: "SDK KEY", andSecret: "SDK SECRET")

let userDetails = SingularUserDetails()
userDetails.setEmail("user@example.com")
userDetails.setPhoneNumber("+15551234567")

config.userDetails = userDetails
Singular.start(config)

Definir a PII após a inicialização

Se o endereço de e-mail ou o número de telefone só forem conhecidos após o login ou o registro, chame setUserDetails nesse momento. A partir daí, os valores são anexados a todas as sessões e eventos enviados pelo SDK.

Swift Objective-C
// Cleartext values, hashed by the SDK
let userDetails = SingularUserDetails()
userDetails.setEmail("user@example.com")
userDetails.setPhoneNumber("+15551234567")
Singular.setUserDetails(userDetails)

// Or supply your own SHA-256 hashes
let hashed = SingularUserDetails()
hashed.setEmailSTD("b4c9a289323b21a01c3e940f150eb9b8c542587f1abfd8f0e1cc1ffc5e475514")
hashed.setPhoneE164("8a59780bb8cd2ba022bfa5ba2ea3b6e07af17a7d8b30c1f9b3390e36f69019e4")
Singular.setUserDetails(hashed)

Assinatura do método:

+ (void)setUserDetails:(SingularUserDetails *)userDetails;

Limpar a PII

A PII armazenada persiste no Keychain do iOS entre inicializações do app. Chame clearUserDetails no logout, ou quando o usuário retirar o consentimento, para removê-la.

Swift Objective-C
// Remove stored PII on logout
Singular.clearUserDetails()

Assinatura do método:

+ (void)clearUserDetails;

Observação: Como os valores são persistidos, atribuir SingularConfig.userDetails em uma inicialização posterior não apaga o que foi armazenado antes. clearUserDetails é a única forma de removê-los.


Validação e comportamento de privacidade

  • Validação de e-mail: Um e-mail em texto simples deve conter exatamente um @ e um ponto depois dele. Valores inválidos são rejeitados e registrados em log, não enviados.
  • Validação de telefone: Um número de telefone em texto simples deve conter pelo menos 6 dígitos. Valores mais curtos são rejeitados e registrados em log.
  • Proteção contra modo incorreto: Um valor que já parece hasheado é rejeitado por setEmail e setPhoneNumber. Da mesma forma, os setters pré-hasheados rejeitam qualquer valor que não seja uma string hexadecimal SHA-256 de 64 caracteres.
  • Limit Data Sharing: Enquanto o Limit Data Sharing estiver habilitado, o payload de PII é excluído de todas as solicitações. Consulte: Privacidade de dados.
  • Consentimento: Colete e envie endereços de e-mail e números de telefone apenas quando houver base legal para isso. O uso de hash não elimina suas obrigações sob o GDPR, a CCPA ou regulamentações equivalentes.