Skip to main content
Skip table of contents

User Identification and Properties in Mobile SDK

image-20250902-073646.png

Zeta’s Mobile SDK provides a flexible way to capture user properties that help personalize engagement, track behaviors, and optimize experiences. By default, the SDK supports identification and collection of standard properties (such as user ID, email, and phone number).

In addition, you can extend the SDK to collect custom user properties. This allows you to define and capture attributes relevant to your unique business and user context—going beyond the defaults to model what truly matters for your customer experience.

User Identification in ZMP

ZMP supports flexible user identification to ensure accurate profile creation and session association. When establishing the identification field from mobile app to ZMP, that will beome then the primary key field to update a profile’s record on. A user_id or email are the out of the box native identifiers, with the unique_client_id being a value that can be setup by your account team to allow for 1 or many other client identifiers to be used to create/update a profile with. When establishing the primary identifer field, it is important to note that a profile can have one or more identifiers, although it is most common to see only one across the following:

  • user_id (“uid”)

  • email

  • unique_client_id (“uclid” for short)

A unique user in ZMP can be identified using:

User Identification Support Matrix

Identifier

iOS SDK Support

Android SDK Support

Version Notes

user_id

✅ Supported

✅ Supported

Supported in all SDK versions. When loaded to ZMP, it becomes ‘uid’

email

✅ Supported

✅ Supported

Supported in all SDK versions

client-defined unique identifier (UCLID)

✅ Supported

✅ Supported

Supported from v0.2.0 onwards (not supported below 0.2.0)

Standard User Properties

The SDK provides built-in support for collecting commonly used properties:

Category

Property

Description

Identity

uid

Your app’s stable user identifier. Setting this starts an identity session.

Identity

name, firstName, lastName

Display and structured names.

Identity

source

Optional source tag for where/how the user was created.

Lifecycle

signedUpAt

ISO‑8601 UTC timestamp when the user signed up.

Contact

email

Email address: supports additional info (subscription status, preferences, timestamps, custom contact properties).

Contact

phone

Phone number; supports additional info (type, opt‑in, timestamps, custom contact properties).

Device

Push token

Device push token for notifications.

Device

IDFA, IDFV (iOS)

Apple advertising/vendor identifiers, if available and permitted.

Location

latitude, longitude, isForeground

Last known coordinates and capture state.

System

BSIN (read‑only)

Zeta’s unique user identifier; retrievable from the SDK and via delegate.

These properties are typically set during the user identification process.


Collecting Custom Properties

Every business has unique attributes it needs to capture, such as loyalty tier, preferred language, subscription type, or even app-specific behaviors.

The SDK supports this through custom user property collection. You can define any key-value pair and attach it to the user profile.

Example (iOS SDK – Swift)

CODE
// Setting standard properties
ZetaSDK.shared.setUserId("user_12345")
ZetaSDK.shared.setEmail("jane.doe@example.com")

// Setting custom properties
let customProperties: [String: Any] = [
    "loyalty_tier": "Gold",
    "preferred_language": "French",
    "subscription_status": "active"
]

ZetaSDK.shared.setCustomProperties(customProperties)

Example (iOS SDK – Objective-C)

CODE
// Setting standard properties
[[ZetaSDK shared] setUserId:@"user_12345"];
[[ZetaSDK shared] setEmail:@"jane.doe@example.com"];

// Setting custom properties
NSDictionary *customProperties = @{
    @"loyalty_tier": @"Gold",
    @"preferred_language": @"French",
    @"subscription_status": @"active"
};

[[ZetaSDK shared] setCustomProperties:customProperties];

Client-Defined Unique Identifier (UCLID)

This allows clients to use their own stable customer identifiers (for example, customer_id, external_user_id, or account_id) to uniquely identify users within their ZMP namespace.

Key Characteristics

  • Must be unique within the client’s namespace

  • Acts as a primary identity key

  • Can be used for profile creation and retrieval

  • Used for session association

  • Reduces dependency on email or Zeta-generated identifiers

This enables deterministic mapping between a client’s internal systems and ZMP profiles.

Identity Resolution Behavior

When a UCLID (or other supported identifier) is provided:

1. ZMP checks for an existing profile associated with that identifier.

2. If found → the session is attached to the existing profile.

3. If not found → a new profile is created.

4. A system-level identifier (BSIN) is generated internally for platform reference.

BSIN remains a system-generated, read-only identifier retrievable via the SDK

The SDK includes built-in support for standard identifiers such as:

  • user_id — Your app’s stable user identifier

  • email — Contact email address

These can be used independently or alongside a client-defined identifier, depending on the client’s identity strategy.

UCLID is not a custom property.

Custom properties store additional attributes (e.g., loyalty tier, subscription status) and are key-value pairs used for segmentation. On the other hand,

UCLID is used for identity resolution, determining how profiles are created and merged, and also functions as a primary identifier.


Best Practices

  • Keep keys consistent: Define a schema for your property names (e.g., snake_case or camelCase).

  • Use meaningful values: Ensure values are descriptive and can be used effectively in segmentation.

  • Avoid sensitive data: Do not send sensitive identifiers such as passwords or financial details.

  • Test before release: Validate custom properties in your staging environment before going live.

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.