User profile
User ID
This method is used to initialize the user in applications where you have set calculation by user ID specified by the developer, applications that are part of a cross-platform project.
You can also use this method when calculating by device ID (by default) to pass in the user ID used on your servers so that you can easily find the user on devtodev.
To set a new value as the user ID, use the setUserId method.
DTDAnalytics.setUserId(userId: "Custom User ID")To get the current value of the user ID, use the asynchronous method 
getDeviceId(_ completionHandler: @escaping (String) -> Void)
DTDAnalytics.getUserId { userId in
  // your code
}To set a new value as the user ID, use the setUserId method.
[DTDAnalytics userId:@"Custom User ID"];To get the current value of the user ID, use the asynchronous method 
(void)deviceIdHandler:( void (^ _Nonnull)(NSString * _Nonnull))completion-Handler;
[DTDAnalytics userIdHandler:^(NSString * _Nonnull userId) {
  // your code
}];To set a new value as the user ID, use the setUserId method. 
DTDAnalytics.setUserId(userId: "Custom User ID")To get the current value of the user ID, use the asynchronous method 
getDeviceId(block: (String) -> Unit)
DTDAnalytics.getUserId { userId ->
  // your code
}To set a new value as the user ID, use the SetUserId method. 
DTDAnalytics.SetUserId(userId: "Custom User ID")To get the current value of the user ID, use the asynchronous method:
var userId = await DTDAnalytics.GetUserId();To set a new value as the user ID, use the SetUserId method. 
DTDAnalytics.SetUserId(userId: "Custom User ID")To get the current value of the user ID, use the asynchronous method:
DTDAnalytics.GetUserId(id =>
{
  //your code
});To set a new value as the user ID, use the setUserId method.
window.devtodev.setUserId("Custom User ID")To get the current value of the user ID, use the getUserIdmethod 
var userId = window.devtodev.getUserId()To set a new value as the user ID, use method:

userId
FString
User ID.
UDTDAnalyticsBPLibrary::SetUserId("Name");To get the current value of the user ID, use the asynchronous method:

onResult
- FAnalyticsDynamicGetterStringDelegate 
- FDTDGetterStringDelegate 
Callback
auto onResult = new FDTDGetterStringDelegate();
onResult->BindLambda([](const FString& value)
{
	// Your code...
});
UDTDAnalyticsBPLibrary::GetUserId(*onResult);Replace
This method is used in very rare cases. It is applicable in the case when the calculation of users in the project is carried out by the user ID specified by the developer. In this case, the application can change this identifier. For example, calculation in the application is carried out by user emails and in the application, it is possible to change this email to another one. At the time of replacement, you need to call this method, specifying the user's previous email and the one with which it was replaced.
DTDAnalytics.replace(fromUserId: "Old user id", toUserId: "New user id")[DTDAnalytics replaceFromUserId:@"Old user id" toUserId:@"New user id"];DTDAnalytics.replace(fromUserId: "Old user id", toUserId: "New user id")DTDAnalytics.Replace(fromUserId: "Old user id", toUserId: "New user id");DTDAnalytics.Replace(fromUserId: "Old user id", toUserId: "New user id");window.devtodev.replace( "Old user id", "New user id")
fromUserId
FString
From user ID
toUserId
FString
To user ID
UDTDAnalyticsBPLibrary::ReplaceUserId("UserIdBefore", "UserIdAfter");Do not use this method to re-login as a different user! The setUserId method is used for relogging.
Current user level
This method is used in cross-platform and data synchronized applications. The method is required to update user level data.
To set the current value to the user level, use setCurrentLevel(currentLevel: Int) method:
DTDAnalytics.setCurrentLevel(value: 2)We recommend that you use the setCurrentLevel method immediately after using the setUserID method or specify the current user level in the initialization configuration (the level property of an instance of the DTDAnalyticsConfiguration).
Do not use the setCurrentLevel method when the user reaches a new level. In this case, you must use the levelUp method.
To get the user-level value stored by the SDK, use getCurrentLevel(completionHandler: @escaping (Int) -> Void) method
DTDAnalytics.getCurrentLevel { level in
  // your code
}To set the current value to the user level, use (void)currentLevel:(NSInteger)currentLevel; method:
[DTDAnalytics currentLevel:2];We recommend that you use the setCurrentLevel method immediately after using the setUserID method or specify the current user level in the initialization configuration (the level property of an instance of the DTDAnalyticsConfiguration).
Do not use the setCurrentLevel method when the user reaches a new level. In this case, you must use the levelUp method.
To get the user-level value stored by the SDK, use (void)currentLevelHandler:( void (^ _Nonnull)(NSInteger))completionHandler; method
[DTDAnalytics currentLevelHandler:^(NSInteger level) {
  // your code
}];To set the current value to the user level, use method:
DTDAnalytics.setCurrentLevel(value: 2)We recommend that you use the setCurrentLevel method immediately after using the setUserID method or specify the current user level in the initialization configuration (the level property of an instance of the DTDAnalyticsConfiguration).
Do not use the setCurrentLevel method when the user reaches a new level. In this case, you must use the levelUp method.
To get the user-level value stored by the SDK, use getCurrentLevel(completionHandler: @escaping (Int) -> Void) method
DTDAnalytics.getCurrentLevel { level ->
  // your code
}To set the current value to the user level, use method:
DTDAnalytics.SetCurrentLevel(level: 3);We recommend that you use the SetCurrentLevel method immediately after using the SetUserID method or specify the current user level in the initialization configuration (the level property of an instance of the DTDAnalyticsConfiguration).
Do not use the SetCurrentLevel method when the user reaches a new level. In this case, you must use the LevelUp method.
To get the user-level value stored by the SDK, use GetCurrentLevel method:
var currentLevel = await DTDAnalytics.GetCurrentLevel();To set the current value to the user level, use method:
DTDAnalytics.SetCurrentLevel(level: 3);We recommend that you use the SetCurrentLevel method immediately after using the SetUserID method or specify the current user level in the initialization configuration (the level property of an instance of the DTDAnalyticsConfiguration).
Do not use the SetCurrentLevel method when the user reaches a new level. In this case, you must use the LevelUp method.
To get the user-level value stored by the SDK, use GetCurrentLevel method:
DTDAnalytics.GetCurrentLevel(level =>
{
  //your code
});To set the current value to the user level, use method:
window.devtodev.setCurrentLevel(2)We recommend that you use the setCurrentLevel method immediately after using the setUserID method or specify the current user level in the initialization configuration (the level property of an instance of the DTDAnalyticsConfiguration).
Do not use the setCurrentLevel method when the user reaches a new level. In this case, you must use the levelUp method.
To get the user-level value stored by the SDK, use getCurrentLevel method.
var currentLevel = window.devtodev.getCurrentLevel()To set the current value to the user level, use method:

level
int32
Current level.
UDTDAnalyticsBPLibrary::SetCurrentLevel(7);We recommend that you use the SetCurrentLevel method immediately after using the SetUserID method or specify the current user level in the initialization configuration (the level property of an instance of the EDTDAnalyticsConfiguration).
Do not use the SetCurrentLevel method when the user reaches a new level. In this case, you must use the LevelUp method.
To get the user-level value stored by the SDK, use method:

onResult
- FAnalyticsDynamicGetterIntDelegate 
- FDTDGetterIntDelegate 
Callback
auto onResult = new FDTDGetterIntDelegate();
onResult->BindLambda([](int32 value)
{
	// Your code...
});
UDTDAnalyticsBPLibrary::GetCurrentLevel(*onResult);Cheater
If you have your own methods for detecting cheaters in the application, you can tag such users. Actions taken by these users will not be counted in statistics.
DTDUserCard.setCheater(cheater: true)To get the current value of the 'Cheater' flag, use
getCheater(completionHandler: @escaping (Bool) -> Void)
DTDUserCard.getCheater { isCheater in
  // your code
}[DTDUserCard setCheater:true];To get the current value of the 'Cheater' flag, use(void)getCheaterHandler:( void (^ _Nonnull)(BOOL))completionHandler;
[DTDUserCard getCheaterHandler:^(BOOL cheater) {
  // your code
}];DTDUserCard.setCheater(cheater: true)To get the current value of the 'Cheater' flag, use
getCheater(handler: (Boolean) -> Unit)
DTDUserCard.getCheater { isCheater ->
  // your code
}DTDUserCard.SetCheater(cheater: true);To get the current value of the 'Cheater' flag, use
var isCheater = await DTDUserCard.GetCheater();DTDUserCard.SetCheater(cheater: true);To get the current value of the 'Cheater' flag, use
DTDUserCard.GetCheater(cheater=>
{
  //your code
});window.devtodev.user.setCheater(true)To get the current value of the 'Cheater' flag, use getCheater method:
var isCheater = window.devtodev.user.getCheater()
cheater
bool
Cheater flag
UDTDUserCardBPLibrary::SetCheater(true);To get the current value of the 'cheater' flag, use

onResult
- FUserCardDynamicGetterBoolDelegate 
- FDTDGetterBoolDelegate 
Callback
auto onResult = new FDTDGetterBoolDelegate();
onResult->BindLambda([](bool value)
{
	// Your code...
});
UDTDUserCardBPLibrary::GetCheater(*onResult);Reserved user properties
Attention! We strongly discourage the storage of personal user data! If you plan to pass this data, be sure to indicate this in the ‘Nutrition label’ when submitting the application to the App Store review.
Property
Getter
Setter
Name
setName(name: String)
getName(completionHandler: @escaping (String?) -> Void)
setEmail(email: String)
getEmail(completionHandler: @escaping (String?) -> Void)
Phone
setPhone(phone: String)
getPhone(completionHandler: @escaping (String?) -> Void)
Photo
setPhoto(photo: String) 
getPhoto(completionHandler: @escaping (String?) -> Void)
Gender
setGender(gender: DTDGender)
getGender(completionHandler: @escaping (DTDGender) -> Void)
Age
setAge(age: Int)
getAge(completionHandler: @escaping (Int) -> Void
Attention! We strongly discourage the storage of personal user data! If you plan to pass this data, be sure to indicate this in the ‘Nutrition label’ when submitting the application to the App Store review.
Property
Setter
Getter
Age
[DTDUserCard setAge:(NSInteger)];
[DTDUserCard getAgeHandler:^(NSInteger age) { }]
[DTDUserCard setEmail:(NSString * _Nonnull)];
[DTDUserCard getEmailHandler:^(NSString * email) { }];
Gender
[DTDUserCard setGender:(enum Gender)];
[DTDUserCard getGenderHandler:^(enum Gender gender) { }];
Name
[DTDUserCard setName:(NSString * _Nonnull)];
[DTDUserCard getNameHandler:^(NSString * name) { }];
Phone
[DTDUserCard setPhone:(NSString * _Nonnull)];
[DTDUserCard getPhoneHandler:^(NSString * phone) { }];
Photo
[DTDUserCard setPhoto:(NSString * _Nonnull)];
[DTDUserCard getPhotoHandler:^(NSString * photo) { }];
Property
Getter
Setter
Name
setName(name: String)
getName(handler: (String) -> Unit)
setEmail(email: String)
getEmail(handler: (String) -> Unit)
Phone
setPhone(phone: String)
getPhone(handler: (String) -> Unit)
Photo
setPhoto(photo: String) 
getPhoto(handler: (String) -> Unit)
Gender
setGender(gender: DTDGender)
getGender(handler: (DTDGender) -> Void)
Age
setAge(age: Int)
getAge(handler: (String) -> Unit)
Property
Getter
Setter
Name
SetName(name: string)
Task<string> GetName();
SetEmail(email: string)
Task<string> GetEmail()
Phone
SetPhone(phone: string)
Task<string> GetPhone()
Photo
SetPhoto(photo: string) 
Task<string> GetPhoto()
Gender
SetGender(gender: DTDGender)
Task<DTDGender> GetGender()
Age
SetAge(age: long)
Task<long> GetAge()
Attention! We strongly discourage the storage of personal user data! If you plan to pass this data, be sure to indicate this in the ‘Nutrition label’ when submitting the application to the App Store review.
Property
Getter
Setter
Name
SetName(name: string)
GetName(Action<string> onGetName)
SetEmail(email: string)
GetEmail(Action<string> onGetEmail)
Phone
SetPhone(phone: string)
GetPhone(Action<string> onGetPhone)
Photo
SetPhoto(photo: string) 
GetPhoto(Action<string> onGetPhoto)
Gender
SetGender(gender: DTDGender)
GetGender(Action<DTDGender> onGetGender)
Age
SetAge(age: long)
GetAge(Action<string> onGetAge)
Property
Getter
Setter
Type
Name
getName()
setName("John Doe")
String
Phone
getPhone()
setPhone("+15555555555")
String
Photo
getPhoto()
setPhoto("https://domain.com/photo.jpg") 
String
Gender
getGender()
setGender(gender)
Age
getAge()
setAge(age)
Int
Attention! We strongly discourage the storage of personal user data! If you plan to pass this data, be sure to indicate this in the ‘Nutrition label’ when submitting the application to the App Store review.
Name
SetName(name: FString)
- GetName(delegate: FUserCardDynamicGetterStringDelegate)
- GetName(delegate: FDTDGetterStringDelegate)
Email
SetEmail(email: FString)
- GetEmail(delegate: FUserCardDynamicGetterStringDelegate)
- GetEmail(delegate: FDTDGetterStringDelegate)
Phone
SetPhone(phone: FString)
- GetPhone(delegate: FUserCardDynamicGetterStringDelegate)
- GetPhone(delegate: FDTDGetterStringDelegate)
Photo
SetPhoto(photo: FString) 
- GetPhoto(delegate: FUserCardDynamicGetterStringDelegate)
- GetPhoto(delegate: FDTDGetterStringDelegate)
Gender
SetGender(gender: EDTDGender)
- GetGender(delegate: FUserCardDynamicGetterGenderDelegate)
- GetGender(delegate: FDTDGetterGenderDelegate)
Age
SetAge(age: int64)
- GetAge(delegate: FUserCardDynamicGetterLongDelegate)
- GetAge(delegate: FDTDGetterLongDelegate)
Example:

UDTDUserCardBPLibrary::SetEmail("Email");
auto onResult = new FDTDGetterStringDelegate();
onResult->BindLambda([](const FString& value)
{
	// Your code...
});
UDTDUserCardBPLibrary::GetEmail(*onResult);Custom user property
Each devtodev project can have up to 30 custom user properties. User custom property values can be a number, a string, or a boolean value.
This is how you can set properties on the current user profile:
DTDUserCard.set(key: "key for string value", value: "string value")
DTDUserCard.set(key: "key for int value", value: 10)
DTDUserCard.set(key: "key for double value", value: 12.5)
DTDUserCard.set(key: "key for bool value", value: true)To get the current value stored in the user profile on the SDK, you need to use the method:
getValue(key: String, _completionHandler: @escaping (Any) -> Void)
DTDUserCard.getValue(key: "key for value") { value in
  // your code
}This is how you can set properties on the current user profile:
[DTDUserCard setString:@"key for string value" value:@"string value"];
[DTDUserCard setInt:@"key for int value" value:10];
[DTDUserCard setDouble:@"key for double value" value:12.5];
[DTDUserCard setBool:@"key for bool value" value:true];To get the current value stored in the user profile on the SDK, you need to use the method:
(void)getValueWithKey:(NSString *  _Nonnull)key :(void (^ _Nonnull)(id _Nullable))completionHandler;
[DTDUserCard getValueWithKey:@"key for value" :^(id object) {
  // your code
}];This is how you can set properties on the current user profile:
DTDUserCard.set(key: "key for string value", value: "string value")
DTDUserCard.set(key: "key for int value", value: 10)
DTDUserCard.set(key: "key for double value", value: 12.5)
DTDUserCard.set(key: "key for bool value", value: true)To get the current value stored in the user profile on the SDK, you need to use the method:
getValue(key: String, handler: (Any?) -> Unit)
DTDUserCard.getValue(key: "key for value") { value ->
  // your code
}This is how you can set properties on the current user profile:
DTDUserCard.Set(key: "key for string value", value: "string value");
DTDUserCard.Set(key: "key for int value", value: 10);
DTDUserCard.Set(key: "key for double value", value: 12.5);
DTDUserCard.Set(key: "key for bool value", value: true);To get the current value stored in the user profile on the SDK, you need to use the method:
var value = await DTDUserCard.Get(key: "key for value");
switch (value)
{
    case bool boolValue:
        break;
    case long longValue:
        break;
    case double doubleValue:
        break;
    case string stringValue:
        break;
}This is how you can set properties on the current user profile:
DTDUserCard.Set(key: "key for string value", value: "string value");
DTDUserCard.Set(key: "key for int value", value: 10);
DTDUserCard.Set(key: "key for double value", value: 12.5);
DTDUserCard.Set(key: "key for bool value", value: true);To get the current value stored in the user profile on the SDK, you need to use the method:
DTDUserCard.GetValue("key", value =>
{
    switch (value)
    {
    case bool boolValue:
        break;
    case long longValue:
        break;
    case double doubleValue:
        break;
    case string stringValue:
        break;
    }             
})
DTDUserCard.Get(key: "key for value");This is how you can set properties on the current user profile:
window.devtodev.user.set("key for string value",  "string value")
window.devtodev.user.set("key for int value", 10)
window.devtodev.user.set("key for double value", 12.5)
window.devtodev.user.set("key for bool value", true)To get the current value stored in the user profile on the SDK, you need to use the method:
window.devtodev.user.getValue("key for value") This is how you can set properties on the current user profile:

key
FString
Parameter key.
value
bool
Parameter value.
UDTDUserCardBPLibrary::SetBool("BoolKey", true);
key
FString
Parameter key.
value
float
Parameter value.
UUDTDUserCardBPLibrary::SetFloat("FloatKey", 3.333);
key
FString
Parameter key.
value
int64
Parameter value.
UDTDUserCardBPLibrary::SetLong("LongKey", 1000);
key
FString
Parameter key.
value
FString
Parameter value.
UDTDUserCardBPLibrary::SetString("StringKey", "StringValue");To get the current value stored in the user profile on the SDK, you need to use methods:

key
FString
Parameter key.
onResult
- FUserCardDynamicGetterOptionalBoolDelegate 
- FDTDGetterOptionalBoolWithKeyDelegate 
Callback.
FString key = FString(TEXT("Key"));
auto onResult = new FDTDGetterOptionalBoolWithKeyDelegate();
onResult->BindLambda([](bool success, const FString& key, bool value)
{
	// Your code...
});
UDTDUserCardBPLibrary::TryGetBool(key, *onResult);
key
FString
Parameter key.
onResult
- FUserCardDynamicGetterOptionalFloatDelegate 
- FDTDGetterOptionalFloatWithKeyDelegate 
Callback.
FString key = FString(TEXT("Key"));
auto onResult = new FDTDGetterOptionalFloatWithKeyDelegate();
onResult->BindLambda([](bool success, const FString& key, float value)
{
	// Your code...
});
UDTDUserCardBPLibrary::TryGetFloat(key, *onResult);
key
FString
Parameter key.
onResult
- FUserCardDynamicGetterOptionalLongDelegate 
- FDTDGetterOptionalLongWithKeyDelegate 
Callback.
FString key = FString(TEXT("Key"));
auto onResult = new FDTDGetterOptionalIntWithKeyDelegate();
onResult->BindLambda([](bool success, const FString& key, int64 value)
{
	// Your code...
});
UDTDUserCardBPLibrary::TryGetLong(key, *onResult);

Blueprintkey
FString
Parameter key.
onResult
- FUserCardDynamicGetterOptionalStringDelegate 
- FDTDGetterOptionalStringWithKeyDelegate 
Callback.
FString key = FString(TEXT("Key"));
auto onResult = new FDTDGetterOptionalStringWithKeyDelegate();
onResult->BindLambda([](bool success, const FString& key, const FString& value)
{
	// Your code...
});
UDTDUserCardBPLibrary::TryGetString(key, *onResult);Unset user property
It removes a property or a list of properties and their values from the current user profile.
DTDUserCard.unset(property: "key for string value")
DTDUserCard.unset(properties: ["key for string value", 
                               "key for int value"])[DTDUserCard unsetProperty:@"key for string value"];
[DTDUserCard unset:@[@"key for string value",
                     @"key for int value"]];DTDUserCard.unset(property: "key for string value")
DTDUserCard.unset(properties: listOf("key for string value", "key for int value"))DTDUserCard.Unset(keys: "key 1");
DTDUserCard.Unset(keys: "key 1", "key 2", "key 3");DTDUserCard.Unset(keys: "key 1");
DTDUserCard.Unset(keys: "key 1", "key 2", "key 3");window.devtodev.user.unset("key for string value")
window.devtodev.user.unset(["key for string value", "key for int value"])
key
FString
Parameter key.
UDTDUserCardBPLibrary::Unset("Key");
keys
TArray<FString>
Parameter keys.
TArray<FString> keys;
keys.Add("Key1");
keys.Add("Key2");
UDTDUserCardBPLibrary::UnsetArray(keys);Unset all user properties
To remove all properties from the user card, use:
DTDUserCard.clearUser()[DTDUserCard clearUser];DTDUserCard.clearUser()DTDUserCard.ClearUser();DTDUserCard.ClearUser();window.devtodev.user.clearUser()
UDTDUserCardBPLibrary::ClearUser();Last updated
Was this helpful?
