User profile
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.
iOS+macOS (Swift)
iOS+macOS (Objective-C)
Android (Kotlin)
Android (Java)
.NET Native + UWP
Unity
Web
Unreal
We recommend that you pass this parameter in the initialization configuration (
userId
property of an instance of theDTDAnalyticsConfiguration
class).Do not pass an empty string ("") to the
setUserID
method as the user ID. Assigning an empty string is a command to assign a default value to the user ID (it is equal to the current device ID). In applications with calculation by user ID, this can lead to unnecessary registrations.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
}
We recommend that you pass this parameter in the initialization configuration (
userId
property of an instance of theDTDAnalyticsConfiguration
class).Do not pass an empty string ("") to the
setUserID
method as the user ID. Assigning an empty string is a command to assign a default value to the user ID (it is equal to the current device ID). In applications with calculation by user ID, this can lead to unnecessary registrations.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
}];
We recommend that you pass this parameter in the initialization configuration (
userId
property of an instance of theDTDAnalyticsConfiguration
class).Do not pass an empty string ("") to the
setUserID
method as the user ID. Assigning an empty string is a command to assign a default value to the user ID (it is equal to the current device ID). In applications with calculation by user ID, this can lead to unnecessary registrations.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
}
We recommend that you pass this parameter in the initialization configuration (
userId
property of an instance of theDTDAnalyticsConfiguration
class).Do not pass an empty string ("") to the
setUserID
method as the user ID. Assigning an empty string is a command to assign a default value to the user ID (it is equal to the current device ID). In applications with calculation by user ID, this can lead to unnecessary registrations.To set a new value as the user ID, use the
setUserId
method. DTDAnalytics.INSTANCE.setUserId("Custom User ID");
To get the current value of the user ID, use the asynchronous method
getDeviceId(block: (String) -> Unit)
DTDAnalytics.INSTANCE.getUserId(userID ->
// your code
null
);
We recommend that you pass this parameter in the initialization configuration (
userId
property of an instance of theDTDAnalyticsConfiguration
class).Do not pass an empty string ("") to the
SetUserID
method as the user ID. Assigning an empty string is a command to assign a default value to the user ID (it is equal to the current device ID). In applications with calculation by user ID, this can lead to unnecessary registrations.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();
We recommend that you pass this parameter in the initialization configuration (
userId
property of an instance of theDTDAnalyticsConfiguration
class).Do not pass an empty string ("") to the
SetUserID
method as the user ID. Assigning an empty string is a command to assign a default value to the user ID (it is equal to the current device ID). In applications with calculation by user ID, this can lead to unnecessary registrations.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
});
We recommend that you pass this parameter in the initialization configuration (
userId
property in config object).Do not pass an empty string ("") to the
setUserID
method as the user ID. Assigning an empty string is a command to assign a default value to the user ID (it is equal to the current device ID). In applications with calculation by user ID, this can lead to unnecessary registrations.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
getUserId
method var userId = window.devtodev.getUserId()
We recommend that you pass this parameter in the initialization configuration (
UserId
property of an instance of the FDTDAnalyticsConfiguration
class).Do not pass an empty string ("") to the
SetUserID
method as the user ID. Assigning an empty string is a command to assign a default value to the user ID (it is equal to the current device ID). In applications with calculation by user ID, this can lead to unnecessary registrations.To set a new value as the user ID, use method:

Blueprint
​
Arguments | Type | Description |
---|---|---|
userId | FString | User ID. |
UDTDAnalyticsBPLibrary::SetUserId("Name");
To get the current value of the user ID, use the asynchronous method:

Blueprint
​
Arguments | Type | Description |
---|---|---|
onResult |
| Callback |
auto onResult = new FDTDGetterStringDelegate();
onResult->BindLambda([](const FString& value)
{
// Your code...
});
UDTDAnalyticsBPLibrary::GetUserId(*onResult);
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.
iOS+macOS (Swift)
iOS+macOS (Objective-C)
Android (Kotlin)
Android (Java)
.NET Native + UWP
Unity
Web
Unreal
DTDAnalytics.replace(fromUserId: "Old user id", toUserId: "New user id")
[DTDAnalytics replaceFromUserId:@"Old user id" toUserId:@"New user id"];
DTDAnalytics.replaceUserId(
fromUserId = "Old user id",
toUserId = "New user id"
)
DTDAnalytics.INSTANCE.replaceUserId("Old user id", "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")

Blueprint
​
Arguments | Type | Description |
---|---|---|
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.
This method is used in cross-platform and data synchronized applications.
The method is required to update user level data.
iOS+macOS (Swift)
iOS+macOS (Objective-C)
Android (Kotlin)
Android (Java)
.NET Native + UWP
Unity
Web
Unreal
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)
methodDTDAnalytics.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(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
getCurrentLevel(completionHandler: @escaping (Int) -> Void)
methodDTDAnalytics.getCurrentLevel { level ->
// your code
}
To set the current value to the user level, use method:
DTDAnalytics.INSTANCE.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(completionHandler: @escaping (Int) -> Void)
methodDTDAnalytics.INSTANCE.getCurrentLevel ( currentLevel ->
// your code
null
);
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:

Blueprint
​
Arguments | Type | Description |
---|---|---|
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:

Blueprint
​
Arguments | Type | Description |
---|---|---|
onResult |
| Callback |
auto onResult = new FDTDGetterIntDelegate();
onResult->BindLambda([](int32 value)
{
// Your code...
});
UDTDAnalyticsBPLibrary::GetCurrentLevel(*onResult);
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.
iOS+macOS (Swift)
iOS+macOS (Objective-C)
Android (Kotlin)
Android (Java)
.NET Native + UWP
Unity
Web
Unreal
DTDUserCard.setCheater(cheater: true)
[DTDUserCard setCheater:true];
DTDUserCard.setCheater(cheater = true)
DTDUserCard.INSTANCE.setCheater(true);
DTDUserCard.SetCheater(cheater: true);
DTDUserCard.SetCheater(cheater: true);
window.devtodev.user.setCheater(true)

Blueprint
Arguments | Type | Description |
---|---|---|
cheater | bool | Cheater flag |
UDTDUserCardBPLibrary::SetCheater(true);
iOS+macOS (Swift)
iOS+macOS (Objective-C)
Android (Kotlin)
Android (Java)
.NET Native + UWP
Unity
Web
Unreal
DTDUserCard.setTester(tester: true)
[DTDUserCard setTester:true];
DTDUserCard.setTester(tester = true)
DTDUserCard.INSTANCE.setTester(true);
DTDUserCard.SetTester(tester: true);
DTDUserCard.SetTester(tester: true);
window.devtodev.user.setTester(true)

Blueprint
Arguments | Type | Description |
---|---|---|
tester | bool | Tester flag |
UDTDUserCardBPLibrary::SetTester(true);
iOS + macOS
iOS+macOS (Objective-C)
Android (Kotlin)
Android (Java)
.NET Native + UWP
Unity
Web
Unreal
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) |
Email | 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) { }] |
Email | [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) |
Email | 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) | getName(handler: (String) -> Unit) |
Email | 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(); |
Email | 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) |
Email | 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 |
Email | getEmail() | setEmail("[email protected]") | 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.
Property | Setter | Getter |
---|---|---|
Name | SetName(name: FString) |
|
Email | SetEmail(email: FString) |
|
Phone | SetPhone(phone: FString) |
|
Photo | SetPhoto(photo: FString) |
|
Gender | SetGender(gender: EDTDGender) |
|
Age | SetAge(age: int64) |
|
Example:

Blueprint
UDTDUserCardBPLibrary::SetEmail("Email");

Blueprint
auto onResult = new FDTDGetterStringDelegate();
onResult->BindLambda([](const FString& value)
{
// Your code...
});
UDTDUserCardBPLibrary::GetEmail(*onResult);
Each devtodev project can have up to 30 custom user properties. User custom property values can be a number, a string (up to 500 symbols), or a boolean value.
iOS+macOS (Swift)
iOS+macOS (Objective-C)
Android (Kotlin)
Android (Java)
.NET Native + UWP
Unity
Web
Unreal
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)
It is important to remember that the key for custom user properties has a length limit. If the limit is exceeded (from 1 to 64 characters), the key will be truncated to the maximum allowed length
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
}
When using the
getValue
method, note that the Any
return type will need to be cast to the data type you want.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];
It is important to remember that the key for custom user properties has a length limit. If the limit is exceeded (from 1 to 64 characters), the key will be truncated to the maximum allowed length
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
}];
When using the
getValue
method, note that the Any
return type will need to be cast to the data type you want.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)
It is important to remember that the key for custom user properties has a length limit. If the limit is exceeded (from 1 to 64 characters), the key will be truncated to the maximum allowed length
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
}
When using the
getValue
method, note that the Any
return type will need to be cast to the data type you want.This is how you can set properties on the current user profile:
DTDUserCard.INSTANCE.set("key for string value", "string value");
DTDUserCard.INSTANCE.set("key for int value", 10);
DTDUserCard.INSTANCE.set("key for double value", 12.5);
DTDUserCard.INSTANCE.set("key for bool value", true);
It is important to remember that the key for custom user properties has a length limit. If the limit is exceeded (from 1 to 64 characters), the key will be truncated to the maximum allowed length
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.INSTANCE.getValue("key for value", value ->
// your code
null
);j
When using the
getValue
method, note that the Any
return type will need to be cast to the data type you want.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);