User Identifier and Property

Managing User Identifiers

User identifiers are used to uniquely identify different users.
Refer to the Managing User Identifiers document for an in-depth definition and understanding of why user identifiers are so important during experimentation.

Use your own managed user identifiers

Since the server-side SDK is not user-specific, you must always always pass the user identifier directly as a parameter.
The identifier delivered can be a directly managed primary key, device identifier, member ID, email, hash value, etc.

Example

The following is an example of tracking and sending user events after distributing you traffic into different test groups.

User user = User.of("ae2182e0");

// Traffic distribution
Variation variation = hackleClient.variation(experimentKey, user);

// Send user events 
hackleClient.track(event, user);
val user = Hackle.user("ae2182e0")

// Traffic distribution to different test groups
val variation = hackleClient.variation(experimentKey, user)

// Send user events 
hackleClient.track(event, user)

Additional Identifiers

In addition to the default identifier, additional identifiers can be sent through the example code below.

User user = User.builder("ae2182e0") // Default identifier provided
    .userId("143")                   // User ID (Hackle integrated identifier supported)
    .deviceId("ae2182e0")            // Device ID (Hackle integrated identifier supported)
    .identifier("myCustomId", "42")  // Custom ID
    .build()
val user = Hackle.user("ae2182e0") { // Default identifier provided
    userId("143")                    // User ID (Hackle integrated identifier supported)
    deviceId("ae2182e0")             // Device ID (Hackle integrated identifier supported)
    identifier("myCustomId", "42")   // Custom ID
}

Property

Hackle SDK supports adding properties to a User object.

  • Properties must be sent as a pair with both property name (key) and a property value (value).
  • The maximum number of properties that can be added to a User object is 64.

Property Key (Name)

  • The key should be set as a general name, but easily identifiable.
  • The character limit is 64 characters.
  • It is not case sensitive. For example, AGE and age are recognized as the same key.

Property Value

  • The value supports boolean, string, and number types.
  • In the case of string type, the character limit is 64 characters.
  • The string type is case-sensitive. For example, APPLE and apple are recognized as different property values.
  • In the case of number type, up to 15 integers and up to 6 decimal places are supported.

Example

User objects are used as parameters in distributing traffic into test groups, determining feature flags, and sending user events.

Refer to the example code and add the desired properties to each user. In the example below, you can see that three properties (age, grade, is_paying_user) have been added.

User user = User.builder(userId)
    .property("age", 30)
    .property("grade", "GOLD")
    .property("is_paying_user", false)
    .build();
    
// Traffic distribution
Variation variation = hackleClient.variation(experimentKey, user);

// Feature flag determination
boolean featureOn = hackleClient.isFeatureOn(featureKey, user);

// Send user events
hackleClient.track(event, user);
val user = Hackle.user(userId) {
    property("age", 30)
    property("grade", "GOLD")
    property("is_paying_user", false)
}
    
//  Traffic distribution to different test groups
val variation = hackleClient.variation(experimentKey, user)

// Feature flag determination
val featureOn = hackleClient.isFeatureOn(featureKey, user)

// Send user events
hackleClient.track(event, user)