Links

Basic methods

Tutorial

The event allows you to track tutorial completion and identify the stages where you lose new users.
We recommend tracking the starting point (value -1) before beginning the first tutorial stage, then passing the counting number of every completed stage after its completion (integers larger than 0), and at the end, marking the moment of the last tutorial stage completion (value -2).
If your app has an option of skipping the tutorial and the user has used it, then it’s necessary to send a refusal value (value 0) only.
iOS+macOS (Swift)
iOS+macOS (Objective-C)
Android (Kotlin)
Android (Java)
.NET Native + UWP
Unity
Web
Unreal
DTDAnalytics.tutorial(step: 1)
The method takes on the step value with an integer type.
Value
Meaning
0
The user skipped the tutorial
-1
The value defines the beginning of the tutorial
1..int
Counting number of completed tutorial stage
-2
The value defines the completion of the tutorial
[DTDAnalytics tutorialStep:1];
The method takes on the step value with an integer type.
Value
Meaning
0
The user skipped the tutorial
-1
The value defines the beginning of the tutorial
1..int
Counting number of completed tutorial stage
-2
The value defines the completion of the tutorial
DTDAnalytics.tutorial(step = 1)
The method takes on the step value with an integer type.
Value
Meaning
0
The user skipped the tutorial
-1
The value defines the beginning of the tutorial
1..int
Counting number of completed tutorial stage
-2
The value defines the completion of the tutorial
DTDAnalytics.INSTANCE.tutorial(1);
The method takes on the step value with an integer type.
Value
Meaning
0
The user skipped the tutorial
-1
The value defines the beginning of the tutorial
1..int
Counting number of completed tutorial stage
-2
The value defines the completion of the tutorial
DTDAnalytics.Tutorial(1);
The method takes on the step value with an integer type.
Value
Meaning
0
The user skipped the tutorial
-1
The value defines the beginning of the tutorial
1..int
Counting number of completed tutorial stage
-2
The value defines the completion of the tutorial
DTDAnalytics.Tutorial(1);
The method takes on the step value with an int base type.
Value
Meaning
0
The user skipped the tutorial
-1
The value defines the beginning of the tutorial
1..int
Counting number of completed tutorial stage
-2
The value defines the completion of the tutorial
window.devtodev.tutorial(1)
The method takes on the step value with an integer type.
Value
Meaning
0
The user skipped the tutorial
-1
The value defines the beginning of the tutorial
1..int
Counting number of completed tutorial stage
-2
The value defines the completion of the tutorial
Blueprint
Parameter
Type
Restrictions
Description
step
int32
From 1 to int32.MaxValue - 1
Tutorial step
UDTDAnalyticsBPLibrary::Tutorial(1);
The method takes on the step value with an int32 base type.
Value
Meaning
0
The user skipped the tutorial
-1
The value defines the beginning of the tutorial
1..int32
Counting number of completed tutorial stage
-2
The value defines the completion of the tutorial

Level up

The event allows you to analyze the distribution of players over different game levels, monitor the in-game currency balance by levels. You can find more information about the right moment to use LevelUp event here.
iOS+macOS (Swift)
iOS+macOS (Objective-C)
Android (Kotlin)
Android (Java)
.NET Native + UWP
Unity
Web
Unreal
The event should be dispatched right after the level-up. The number of the level reached is passed to the level parameter.
DTDAnalytics.levelUp(level: 2)
To monitor the average account balance of in-game currency by the end of each level, dispatch in-game currencies (resources) names and their amounts to the method signature:
let balance: [String: Int] = ["Currency name 1": 100, "Currency name 2": 10]
DTDAnalytics.levelUp(level: 2, balances: balance)
Attention! The number of tracked in-game currencies or resources (their unique names) should not exceed 30 at all times.
Parameter
Type
Restrictions
Description
level
int
From 1 to Int32.max - 1
Level reached
balances
[String:Int]
String - from 1 to 24 symbols
Int - from Int64.min to int64.max
Resources’ names and number at the time of level up
The event should be dispatched right after the level-up. The number of the level reached is passed to the level parameter.
[DTDAnalytics levelUp:2];
To monitor the average account balance of in-game currency by the end of each level, dispatch in-game currencies (resources) names and their amounts to the method signature:
NSDictionary *balance = @{@"Currency name 1": @100, @"Currency name 2": @10};
[DTDAnalytics levelUp:2 withBalances:balance];
Attention! The number of tracked in-game currencies or resources (their unique names) should not exceed 30 at all times.
Parameter
Type
Restrictions
Description
level
NSInteger
From 1 to Int32.max - 1
Level reached
balances
NSDictionary<NSString *,NSNumber *>
String - from 1 to 24 symbols
Int - from Int64.min to int64.max
Resources’ names and number at the time of level up
The event should be dispatched right after the level-up. The number of the level reached is passed to the level parameter.
DTDAnalytics.levelUp(level = 2)
To monitor the average account balance of in-game currency by the end of each level, dispatch in-game currencies (resources) names and their amounts to the method signature:
val resources = mapOf("Currency name 1" to 100L, "Currency name 2" to 10L)
DTDAnalytics.levelUp(
level = 2,
resource = resources
)
Attention! The number of tracked in-game currencies or resources (their unique names) should not exceed 30 at all times.
Parameter
Type
Restrictions
Description
level
int
From 1 to Int.max - 1
Level reached
balances
Map<String,Long>
String - from 1 to 24 symbols
Long - from Long.min to Long.max
Resources’ names and number at the time of level up
The event should be dispatched right after the level-up. The number of the level reached is passed to the level parameter.
DTDAnalytics.INSTANCE.levelUp(2);
To monitor the average account balance of in-game currency by the end of each level, dispatch in-game currencies (resources) names and their amounts to the method signature:
Map<String, Long> resources = new HashMap<>();
resources.put("Currency name 1", 100L);
resources.put("Currency name 2", 10L);
DTDAnalytics.INSTANCE.levelUp(2, resources);
Attention! The number of tracked in-game currencies or resources (their unique names) should not exceed 30 at all times.
Parameter
Type
Restrictions
Description
level
int
From 1 to Int.max - 1
Level reached
balances
Map<String,Long>
String - from 1 to 24 symbols
Long - from Long.min to Long.max
Resources’ names and number at the time of level up
The event should be dispatched right after the level-up. The number of the level reached is passed to the level parameter.
DTDAnalytics.LevelUp(2);
To monitor the average account balance of in-game currency by the end of each level, dispatch in-game currencies (resources) names and their amounts to the method signature:
var balance = new Dictionary<string, long>();
balance.Add("Currency name 1", 100);
balance.Add("Currency name 2", 200);
DTDAnalytics.LevelUp(2, balance);
Attention! The number of tracked in-game currencies or resources (their unique names) should not exceed 30 at all times.
Parameter
Type
Restrictions
Description
level
int
From 1 to int.MaxValue - 1
Level reached
balances
[string: long]
String - from 1 to 24 symbols
Long - from long.MinValue to long.MaxValue
Resources’ names and number at the time of level up
The event should be dispatched right after the level-up. The number of the level reached is passed to the level parameter.
DTDAnalytics.LevelUp(level: 2)
To monitor the average account balance of in-game currency by the end of each level, dispatch in-game currencies (resources) names and their amounts to the method signature:
var balance = new Dictionary<string, long>();
balance.Add("Currency name 1", 100);
balance.Add("Currency name 2", 200);
DTDAnalytics.LevelUp(level: 2, resources: balance);
Attention! The number of tracked in-game currencies or resources (their unique names) should not exceed 30 at all times.
Parameter
Type
Restrictions
Description
level
int
From 1 to int32.MaxValue - 1
Level reached
balances
[string: long]
String - from 1 to 24 symbols
Long - from long64.MinValue to long64.MaxValue
Resources’ names and number at the time of level up
The event should be dispatched right after the level-up. The number of the level reached is passed to the level parameter.
devtodev.levelUp(2)
You can send and track the following data along with the level values: an average amount of the in-game currency by the end of the level, user spendings on the level, and amounts of purchased or earned in-game currency/resources. Unfortunately, Web SDK doesn’t allow to automatically calculate spending and receiving of the in-game currency/resources while users are passing the level (data accumulation on the Web might be inaccurate as users might utilize multiple browsers and devices, as well as erase local browser data).
var balance = {
"Currency name 1" : 100,
"Currency name 2" : 200
}
var spent = {
"Currency name 2" : 1
}
var earned = {
"Currency name 1" : 5
}
var bought = {
"Currency name 1" : 50,
"Currency name 2" : 30
}
window.devtodev.levelUp(2, balance, spent, earned, bought)
Attention! The number of tracked in-game currencies or resources (their unique names) should not exceed 30 at all times.
Parameter
Type
Restrictions
Description
level
int
From 1 to int.MaxValue - 1
Level reached
balances
[string: long]
String - from 1 to 24 symbols
Long - from long.MinValue to long.MaxValue
Resources’ names and number at the time of level up
spent
[string: long]
String - from 1 to 24 symbols Long - from 0 to Number.MAX_SAFE_INTEGER
Game currency amount spent during the level. Optional.
earned
[string: long]
String - from 1 to 24 symbols Long - from 0 to Number.MAX_SAFE_INTEGER
Game currency earned during the level. Optional.
bought
[string: long]
String - from 1 to 24 symbols Long - from 0 to Number.MAX_SAFE_INTEGER
Game currency amount bought during the level. Optional.
The event should be dispatched right after the level-up. The number of the level reached is passed to the level parameter.
Blueprint
Parameter
Type
Restrictions
Description
level
int32
From 1 to int32.MaxValue - 1
Level reached
UDTDAnalyticsBPLibrary::LevelUp(2);
To monitor the average account balance of in-game currency by the end of each level, dispatch in-game currencies (resources) names and their amounts to the method signature:
Blueprint
Attention! The number of tracked in-game currencies or resources (their unique names) should not exceed 30 at all times.
Parameter
Type
Restrictions
Description
level
int32
From 1 to int32.MaxValue - 1
Level reached
balance
TMap<FString, int64>
FString - from 1 to 24 symbols
int64 - from int64.MinValue to int64.MaxValue
Resources’ names and number at the time of level up
TMap<FString, int64> balance;
balance.Add("CurrencyName", 123);
UDTDAnalyticsBPLibrary::LevelUpWithBalance(2, balance);

Current Balance

To track the average balance of in-game currency disregarding the level up event, pass the list of in-game currency (resource) names and their amount to the method signature:
iOS+macOS (Swift)
iOS+macOS (Objective-C)
Android (Kotlin)
Android (Java)
.NET Native + UWP
Unity
Web
Unreal
let balance: [String: Int] = ["Currency name 1": 100, "Currency name 2": 10]
DTDAnalytics.currentBalance(balance: balance)
NSDictionary *balance = @{@"Currency name 1": @100,
@"Currency name 2": @10};
[DTDAnalytics currentBalanceWithBalance:balance];
val balance = mapOf("Currency name 1" to 100L,
"Currency name 2" to 10L)
DTDAnalytics.currentBalance(
balance = balance
)
Map<String, Long> balance = new HashMap<>();
balance.put("Currency name 1", 100L);
balance.put("Currency name 2", 10L);
DTDAnalytics.INSTANCE.currentBalance(balance);
var balance = new Dictionary<string, long>();
balance.Add("Currency name 1", 100);
balance.Add("Currency name 2", 200);
DTDAnalytics.CurrentBalance(balance);
var balance = new Dictionary<string, long>();
balance.Add("Currency name 1", 100);
balance.Add("Currency name 2", 200);
DTDAnalytics.CurrentBalance(balance);
var balance = {
"Currency name 1" : 100,
"Currency name 2" : 10
}
window.devtodev.currentBalance(balance);
Blueprint
Parameter
Type
Restrictions
Description
balance
TMap<FString, int64>
FString - from 1 to 24 symbols
int64 - from int64.MinValue to int64.MaxValue
Resources’ names and number
TMap<FString, int64> balance;
balance.Add("CurrencyName", 123);
UDTDAnalyticsBPLibrary::CurrentBalance(balance);

Currency Accrual

You need to dispatch the event after every game account balance refill if you want to track the average in-game currency amount acquired or earned by the players for a certain timeframe or during a level playthrough.
iOS+macOS (Swift)
iOS+macOS (Objective-C)
Android (Kotlin)
Android (Java)
.NET Native + UWP
Unity
Web
Unreal
DTDAnalytics.currencyAccrual(currencyName: "Currency name 1",
currencyAmount: 100,
source: "Source name",
accrualType: .earned)
Parameter
Type
Restrictions
Description
currencyName
string
from 1 to 24 symbols
In-game currency/resource name
currencyAmount
int
from 1 to Int32.max
Amount of currency in circulation
source
string
from 1 to 23 symbols
The sources of currency/resources. It can be used for breaking down income by its sources. For example, a city builder game may have some: “Rent” for the profit received from rental property, or “Bank” if the player has purchased some currency.
accrualType
DTDAccrualType (enum)
The currency/resource source type. The player can either gain resources during the game (earned) or purchase them for money (bought)
acrualType can receive one of the following values:
public enum DTDAccrualType: Int {
case earned = 0
case bought = 1
}
[DTDAnalytics currencyName:@"Currency name 1"
currencyAmount:100
source:@"Source name"
accrualType:DTDAccrualTypeEarned];
Parameter
Type
Restrictions
Description
currencyName
NSString
from 1 to 24 symbols
In-game currency/resource name
currencyAmount
NSInteger
from 1 to Int32.max
Amount of currency in circulation
source
NSString
from 1 to 23 symbols
The sources of currency/resources. It can be used for breaking down income by its sources. For example, a city builder game may have some: “Rent” for the profit received from rental property, or “Bank” if the player has purchased some currency.
accrualType
DTDAccrualType (enum)
The currency/resource source type. The player can either gain resources during the game (earned) or purchase them for money (bought)
acrualType can receive one of the following values:
typedef enum DTDAccrualType: NSUInteger {
DTDAccrualTypeEarned = 0,
DTDAccrualTypeBought = 1,
} DTDAccrualType;
DTDAnalytics.currencyAccrual(
currencyName = "Currency name 1",
currencyAmount = 100,
source = "Source name",
DTDAccrualType = DTDAccrualType.Earned
)
Parameter
Type
Restrictions
Description
currencyName
string
from 1 to 24 symbols
In-game currency/resource name
currencyAmount
int
from 1 to Int.max
Amount of currency in circulation
source
string
from 1 to 23 symbols
The sources of currency/resources. It can be used for breaking down income by its sources. For example, a city builder game may have some: “Rent” for the profit received from rental property, or “Bank” if the player has purchased some currency.
accrualType
DTDAccrualType (enum)
The currency/resource source type. The player can either gain resources during the game (earned) or purchase them for money (bought)
accrualType can receive one of the following values:
enum class DTDAccrualType(val value: Long) {
Earned(0L),
Bought(1L);
}
DTDAnalytics.INSTANCE.currencyAccrual(
"Currency name 1",
100,
"Source name",
DTDAccrualType.Earned
);
Parameter
Type
Restrictions
Description
currencyName
string
from 1 to 24 symbols
In-game currency/resource name
currencyAmount
int
from 1 to Int.max
Amount of currency in circulation
source
string
from 1 to 23 symbols
The sources of currency/resources. It can be used for breaking down income by its sources. For example, a city builder game may have some: “Rent” for the profit received from rental property, or “Bank” if the player has purchased some currency.
accrualType
DTDAccrualType (enum)
The currency/resource source type. The player can either gain resources during the game (earned) or purchase them for money (bought)
accrualType can receive one of the following values:
public final enum class DTDAccrualType {
Earned;
Bought;
}a
DTDAnalytics.CurrencyAccrual(
currencyName: "Currency name 1",
currencyAmount: 100,
source: "Source name",
accrualType: DTDAccrualType.Earned);
Parameter
Type
Restrictions
Description
currencyName
string
from 1 to 24 symbols
In-game currency/resource name
currencyAmount
int
from 1 to Int.MaxValue
Amount of currency in circulation
source
string
from 1 to 23 symbols
The sources of currency/resources. It can be used for breaking down income by its sources. For example, a city builder game may have some: “Rent” for the profit received from rental property, or “Bank” if the player has purchased some currency.
accrualType
DTDAccrualType (enum)
The currency/resource source type. The player can either gain resources during the game (earned) or purchase them for money (bought)
AccrualType can receive one of the following values:
enum DTDAccrualType : long
{
Earned = 0L,
Bought = 1L
}
DTDAnalytics.CurrencyAccrual(currencyName: "Currency name 1",
currencyAmount: 100,
source: "Source name",
accrualType: DTDAccrualType.Earned)
Parameter
Type
Restrictions
Description
currencyName
string
from 1 to 24 symbols
In-game currency/resource name
currencyAmount
int
from 1 to Int32.MaxValue
Amount of currency in circulation
source
string
from 1 to 23 symbols
The sources of currency/resources. It can be used for breaking down income by its sources. For example, a city builder game may have some: “Rent” for the profit received from rental property, or “Bank” if the player has purchased some currency.
accrualType
DTDAccrualType (enum)
The currency/resource source type. The player can either gain resources during the game (earned) or purchase them for money (bought)
AccrualType can receive one of the following values:
public enum DTDAccrualType
{
Earned = 0,
Bought = 1
}
window.devtodev.CurrencyAccrual(
currencyName,
currencyAmount,
source,
accrualType)
Parameter
Type
Restrictions
Description
currencyName
string
from 1 to 24 symbols
In-game currency/resource name
currencyAmount
int
from 1 to Int.max
Amount of currency in circulation
source
string
from 1 to 23 symbols
The sources of currency/resources. It can be used for breaking down income by its sources. For example, a city builder game may have some: “Rent” for the profit received from rental property, or “Bank” if the player has purchased some currency.
accrualType
int
The currency/resource source type. The player can either gain resources during the game (0) or purchase them for money (1)
Example:
window.devtodev.currencyAccrua(
"Currency name 1",
100,
"Source name",
0)
Blueprint
Parameter
Type
Restrictions
Description
currencyName
FString
from 1 to 24 symbols
In-game currency/resource name
currencyAmount
int32
from 1 to Int32.MaxValue
Amount of currency in circulation
source
FString
from 1 to 23 symbols
The sources of currency/resources. It can be used for breaking down income by its sources. For example, a city builder game may have some: “Rent” for the profit received from rental property, or “Bank” if the player has purchased some currency.
accrualType
EDTDAccrualType
The currency/resource source type. The player can either gain resources during the game (earned) or purchase them for money (bought)
UDTDAnalyticsBPLibrary::CurrencyAccrual("CurrencyName", 12, "Source", EDTDAccrualType::Bought);

Virtual Currency Payment

Pass this event after every purchase if you want to track in-game currency spends and items’ popularity. You can apply this event to both games and any apps with virtual currency.
iOS+macOS (Swift)
iOS+macOS (Objective-C)
Android (Kotlin)
Android (Java)
.NET Native + UWP
Unity
Web
Unreal
DTDAnalytics.virtualCurrencyPayment(purchaseId: "Purchase ID",
purchaseType: "Purchase type",
purchaseAmount: 100,
purchasePrice: 10,
purchaseCurrency: "Purchase currency")
In case the item is sold for more than one currency/resource, you need to build a dictionary with all the names and amounts of the currencies/resources.
let resources: [String: Int] = ["Purchase currency name 1": 100,
"Purchase currency name 2": 10]
DTDAnalytics.virtualCurrencyPayment(purchaseId: "Purchase ID",
purchaseType: "Purchase Type",
purchaseAmount: 100,
resources: resources)
Parameter
Type
Restrictions
Description
purchaseId
string
from 1 to 32 symbols
A unique purchase name or ID. Make sure that the names are always in the same language otherwise they will be listed as different items.
purchaseType
string
from 1 to 96 symbols
The name of a resource group. For example, for “Wood” it can be “Construction materials”.
purchaseAmount
int
from 1 to Int32.max
The number of units of goods purchased.
purchaseCurrency
string
from 1 to 24 symbols
The name of a currency used for the purchase.
purchasePrice
int
from 1 to Int32.max
The price of the purchased item in the specified in-game currency.
[DTDAnalytics virtualCurrencyPaymentWithPurchaseId:@"Purchase ID"
purchaseType:@"Purchase type"
purchaseAmount:100
purchasePrice:10
purchaseCurrency:@"Purchase currency"];
In case the item is sold for more than one currency/resource, you need to build a dictionary with all the names and amounts of the currencies/resources.
NSDictionary *resources = @{@"Purchase currency name 1": @100,
@"Purchase currency name 2": @10};
[DTDAnalytics virtualCurrencyPaymentWithPurchaseId:@"Purchase ID"
purchaseType:@"Purchase Type"
purchaseAmount:100
resources:resources];
Parameter
Type
Restrictions
Description
purchaseId
NSString
from 1 to 32 symbols
A unique purchase name or ID. Make sure that the names are always in the same language otherwise they will be listed as different items.
purchaseType
NSString
from 1 to 96 symbols
The name of a resource group. For example, for “Wood” it can be “Construction materials”.
purchaseAmount
NSInteger
from 1 to Int32.max
The number of units of goods purchased.
purchaseCurrency
NSString
from 1 to 24 symbols
The name of a currency used for the purchase.
purchasePrice
NSInteger
from 1 to Int32.max
The price of the purchased item in the specified in-game currency.
DTDAnalytics.virtualCurrencyPayment(
purchaseId = "Purchase ID",
purchaseType = "Purchase type",
purchaseAmount = 100,
purchasePrice = 10,
purchaseCurrency = "Purchase currency"
)
In case the item is sold for more than one currency/resource, you need to build a dictionary with all the names and amounts of the currencies/resources.
val resources = mapOf(
"Purchase currency name 1" to 100,
"purchase Currency name 2" to 10
)
ot
DTDAnalytics.virtualCurrencyPayment(
purchaseId = "Purchase ID",
purchaseType = "Purchase Type",
purchaseAmount = 100,
map = resources
)
Parameter
Type
Restrictions
Description
purchaseId
string
from 1 to 32 symbols
A unique purchase name or ID. Make sure that the names are always in the same language otherwise they will be listed as different items.
purchaseType
string
from 1 to 96 symbols
The name of a resource group. For example, for “Wood” it can be “Construction materials”.
purchaseAmount
int
from 1 to Int.max
The number of units of goods purchased.
purchaseCurrency
string
from 1 to 24 symbols
The name of a currency used for the purchase.
purchasePrice
int
from 1 to Int.max
The price of the purchased item in the specified in-game currency.
DTDAnalytics.INSTANCE.virtualCurrencyPayment(
"Purchase ID",
"Purchase type",
100,
10,
"Purchase currency"
);
In case the item is sold for more than one currency/resource, you need to build a dictionary with all the names and amounts of the currencies/resources.