Configurar un ID de usuario y User Details hasheados
Envíe su ID de usuario interno a Singular para habilitar el tracking entre dispositivos y los reportes de datos a nivel de usuario.
Nota: Si utiliza la solución entre dispositivos de Singular , debe recopilar el ID de usuario en todas las plataformas.
Requisitos del ID de usuario
Privacidad y mejores prácticas
Siga estas pautas al implementar el tracking del ID de usuario para garantizar el cumplimiento de la privacidad y una medición correcta entre dispositivos.
- Sin PII: El ID de usuario no debe exponer información de identificación personal (PII) como direcciones de correo electrónico, nombres de usuario o números de teléfono. Use un valor hasheado y único de sus datos propios (first-party). Para enviar una dirección de correo electrónico o un número de teléfono, use en su lugar la API dedicada de User Details hasheados.
- Consistencia entre plataformas: El valor del ID de usuario debe ser el mismo identificador interno que captura en todas las plataformas (Web/Móvil/PC/Consola/Offline) para una medición precisa entre dispositivos.
- Datos propios (first-party): Singular incluye el ID de usuario en las exportaciones a nivel de usuario, ETL y postbacks de BI internos (si están configurados). El ID de usuario son datos propios y no se comparten con terceros.
-
Persistencia:
El ID de usuario persiste hasta que se desactiva explícitamente
usando
unsetCustomUserId()o hasta que se desinstala la aplicación. Cerrar o reiniciar la aplicación no borra el ID de usuario.
Resumen de la implementación
Cuándo configurar el ID de usuario
Utilice
setCustomUserId()
para configurar el identificador de usuario y
unsetCustomUserId()
para borrarlo durante el cierre de sesión.
Mejor práctica:
Si varios usuarios comparten un mismo
dispositivo, implemente un flujo de cierre de sesión que llame a
setCustomUserId()
en el inicio de sesión y a
unsetCustomUserId()
en el cierre de sesión.
Si ya conoce el ID de usuario cuando se abre la aplicación, llame a
setCustomUserId()
antes de inicializar el SDK de Singular.
Esto garantiza que Singular reciba el ID de usuario desde la primera sesión. Sin embargo,
el ID de usuario normalmente no está disponible hasta que el usuario se registra o inicia
sesión, en cuyo caso llame a
setCustomUserId()
después de que se complete el flujo de
registro o autenticación.
Métodos del SDK
Configurar el Custom User ID
Envíe su ID de usuario interno a Singular para el tracking entre dispositivos y los reportes a nivel de usuario.
// Set the user ID after login or registration
Singular.setCustomUserId("custom_user_id")
// Set the user ID after login or registration
[Singular setCustomUserId:@"custom_user_id"];
Firma del método:
+ (void)setCustomUserId:(NSString *)customUserId;
+setCustomUserId:
devuelve
void
— no hay señal de éxito/error en el punto de llamada. El ID de usuario se
adjunta a la siguiente sesión y evento que envía el SDK.
El método de nombre similar
+setDeviceCustomUserId:
está anotado como
__attribute__((deprecated))
y existe únicamente por compatibilidad con código heredado. Llame siempre a
+setCustomUserId:
en el código nuevo.
Desactivar el Custom User ID
Borre el ID de usuario cuando un usuario cierre sesión para garantizar un tracking preciso de las sesiones en dispositivos multiusuario.
// Unset the user ID on logout
Singular.unsetCustomUserId()
// Unset the user ID on logout
[Singular unsetCustomUserId];
Firma del método:
+ (void)unsetCustomUserId;
User Details hasheados (correo electrónico y teléfono)
El ID de usuario descrito arriba es su propio identificador opaco. Si además desea enviar la dirección de correo electrónico o el número de teléfono del usuario a Singular, use la API independiente SingularUserDetails. El SDK normaliza y aplica un hash SHA-256 a estos valores en el dispositivo, por lo que la dirección de correo electrónico y el número de teléfono sin procesar nunca se transmiten.
Disponibilidad: Versión 12.14.0 y superiores del SDK de iOS. Esta API no está disponible en la versión Kids del SDK.
Elegir un modo de hasheo
Hay dos formas de proporcionar los User Details. Elija una por usuario y manténgala de forma consistente.
- Hasheo por el SDK (recomendado): Pase el correo electrónico o el número de teléfono en texto claro. El SDK normaliza el valor, le aplica hash y genera todas las variantes con las que Singular puede hacer matching.
- Pre-hasheado: Pase valores que usted ya normalizó y hasheó con SHA-256. El SDK los almacena exactamente como se los proporciona y no realiza ningún procesamiento adicional. Use esta opción cuando su app no pueda mantener User Details en texto claro en el momento de la llamada.
Importante: Si establece tanto un valor en texto claro como su variante pre-hasheada correspondiente, prevalece el valor pre-hasheado.
Setters de SingularUserDetails
| Setter | Detalles |
|---|---|
setEmail
|
Modo: Hasheo por el SDK
Dirección de correo electrónico en texto claro. El SDK elimina los espacios y convierte el valor a minúsculas antes de aplicar el hash. Para las direcciones de
Ejemplo:
|
setPhoneNumber
|
Modo: Hasheo por el SDK
Número de teléfono en texto claro. El SDK genera dos variantes: una en formato E.164 que conserva el
Ejemplo:
|
setEmailSTD
|
Modo: Pre-hasheado Hash SHA-256 de la dirección de correo electrónico después de eliminar los espacios y convertirla a minúsculas. |
setEmailNoDots
|
Modo: Pre-hasheado
Hash SHA-256 de la dirección de correo electrónico después de eliminar los espacios, convertirla a minúsculas y quitar el sufijo |
setPhoneE164
|
Modo: Pre-hasheado
Hash SHA-256 del número de teléfono en formato E.164, conservando el |
setPhoneDigits
|
Modo: Pre-hasheado
Hash SHA-256 del número de teléfono con todos los caracteres no numéricos eliminados, incluido el |
Cada setter tiene un getter correspondiente (getEmail, getPhoneNumber, getEmailSTD, getEmailNoDots, getPhoneE164, getPhoneDigits) que devuelve el valor que estableció.
Establecer los User Details en la inicialización
Asigne el objeto a SingularConfig.userDetails antes de llamar a start para que los User Details se adjunten a la primera sesión que envía el SDK.
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)
SingularConfig *config = [[SingularConfig alloc] initWithApiKey:@"SDK KEY"
andSecret:@"SDK SECRET"];
SingularUserDetails *userDetails = [SingularUserDetails new];
[userDetails setEmail:@"user@example.com"];
[userDetails setPhoneNumber:@"+15551234567"];
config.userDetails = userDetails;
[Singular start:config];
Establecer los User Details después de la inicialización
Si la dirección de correo electrónico o el número de teléfono solo se conocen después del inicio de sesión o del registro, llame a setUserDetails en ese momento. A partir de entonces, los valores se adjuntan a todas las sesiones y eventos que envía el SDK.
// 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)
// Cleartext values, hashed by the SDK
SingularUserDetails *userDetails = [SingularUserDetails new];
[userDetails setEmail:@"user@example.com"];
[userDetails setPhoneNumber:@"+15551234567"];
[Singular setUserDetails:userDetails];
// Or supply your own SHA-256 hashes
SingularUserDetails *hashed = [SingularUserDetails new];
[hashed setEmailSTD:@"b4c9a289323b21a01c3e940f150eb9b8c542587f1abfd8f0e1cc1ffc5e475514"];
[hashed setPhoneE164:@"8a59780bb8cd2ba022bfa5ba2ea3b6e07af17a7d8b30c1f9b3390e36f69019e4"];
[Singular setUserDetails:hashed];
Firma del método:
+ (void)setUserDetails:(SingularUserDetails *)userDetails;
Borrar los User Details
Los User Details almacenados persisten en el Keychain de iOS entre inicios de la app. Llame a clearUserDetails al cerrar sesión, o cuando el usuario retire su consentimiento, para eliminarla.
// Remove stored user details on logout
Singular.clearUserDetails()
// Remove stored user details on logout
[Singular clearUserDetails];
Firma del método:
+ (void)clearUserDetails;
Nota:
Como los valores se persisten, asignar SingularConfig.userDetails en un inicio posterior no borra lo que se almacenó antes. clearUserDetails es la única forma de eliminarlo.
Validación y comportamiento de privacidad
-
Validación del correo electrónico:
Un correo electrónico en texto claro debe contener exactamente una
@y un punto después de ella. Los valores no válidos se rechazan y se registran en el log; no se envían. - Validación del teléfono: Un número de teléfono en texto claro debe contener al menos 6 dígitos. Los valores más cortos se rechazan y se registran en el log.
-
Protección contra el modo incorrecto:
Un valor que ya parece hasheado es rechazado por
setEmailysetPhoneNumber. De la misma forma, los setters pre-hasheados rechazan cualquier valor que no sea una cadena hexadecimal SHA-256 de 64 caracteres. - Limit Data Sharing: Mientras Limit Data Sharing esté habilitado, la carga de User Details se excluye de todas las solicitudes. Consulte: Privacidad de datos.
- Consentimiento: Recopile y envíe direcciones de correo electrónico y números de teléfono únicamente cuando tenga una base legal para hacerlo. El hasheo no elimina sus obligaciones bajo el GDPR, la CCPA o regulaciones equivalentes.