To be protected from fraudulent transactions, we recommend you to use devtodev Anticheat service.
Use this method, and devtodev will check the transaction's validity with the payment platform, and the response will be returned to the application.
The result can take one of the following values:
In case of a successful check call the following main SDK method:
If the transaction hasn’t passed verification, do not perform the Payment event.
We do not recommend to use the result of devtodev anti-cheat verification as a condition for giving or not giving in-game currency or item purchased by a user!
To check for time cheats call checkTime method every time when the app is being launched
The result can take one of the following values:
To be protected from fraudulent transactions, we recommend you to use devtodev Anticheat service
Use this method, and devtodev will check the transaction validity with the payment platform, and the response will be returned to the application.
Call following method when GooglePlay returns the transaction to your onActivityResult:
You can get sharedSecret key here:
Go to the Google Play Developer Console and sign in. Make sure that you sign in to the account from which the application you are licensing is published (or will be published).
In the application details page, locate the Services & APIs link and click it.
In the Services & APIs page, locate the Licensing & In-App Billing section.
Your public key for licensing is given in the Your License Key For This Application field.
The result can take one of the following values:
In case of a successful check call following the main SDK method:
If the transaction hasn’t passed verification, do not perform the Payment event.
We do not recommend to use the result of devtodev anti-cheat verification as a condition for giving or not giving in-game currency or item purchased by a user!
To check for time cheats call checkTime method every time when the app is being launched
The result can take one of the following values:
To be protected from fraudulent transactions, we recommend you to use devtodev Anticheat service.
Use this method, and devtodev will check the transaction validity with the payment platform, and the response will be returned to the application.
1. Call the method for payment verification:
or if you are using Unity IAP plugin:
where OnReceiptVerifyCallback is the function like this:
Here's how to find your application's public key for licensing (for Google Play platform only, for other platforms the publicKey is not used):
Go to the Google Play Console and sign in. Make sure that you sign in to the account from which the application you are licensing is published (or will be published).
In the application details page, locate the Services & APIs link and click it.
In the Services & APIs page, locate the Licensing & In-App Billing section. Your public key for licensing is given in the Your License Key For This Application field.
ReceiptVerificationStatus can take one of the following values:
Don't forget that it is enough to set only receipt field to check the payment on iOS (iTunes) or Windows/Windows Phone (Microsoft Store), and for Android (Google Play) the fields signature and publicKey should be set.
Сore SDK should be initialized prior to the call of VerifyPayment function.
2. In case of an unsuccessful check (ReceiptNotValid result) do not call SDK method RealPayment. In other cases:
To check for time cheats call VerifyTime method.
1. Call the method to time verification:
where OnTimeVerifyCallback is the function like this:
DevToDevTimeVerificationStatus can take one of the following values:
Сore SDK should be initialized prior to the call of VerifyTime function.
Unfortunately, Apple does not provide any capability to pass a referrer string through to your app from a link to the App Store. But if you have a referral info, you can set it using the method below:
The list of predefined keys:
Unfortunately, Windows Store does not provide any capability to pass a referrer string through to your app from a link to the store. But if you have a referral info, you can set it using the method below:
The list of predefined keys:
Automated referral parameters are available on Android platform. Unfortunately, other platforms do not provide any capability to pass a referrer string through to your app from a link to the store. But if you have a referral info, you can set it using the method below:
The list of predefined keys:
Unfortunately, Apple does not provide any capability to pass a referrer string through to your app from a link to the app store. But if you have a referral info, you can set it using the method below:
The list of predefined keys:
Automated referral parameters is available on Android platform. Unfortunately, other platforms do not provide any capability to pass a referrer string through to your app from a link to the store. But if you have a referral info, you can set it using the method below:
Unfortunately, Apple does not provide any capability to pass a referrer string through to your app from a link to the app store. But if you have a referral info, you can set it using the method below:
Blueprint
Code
Use the current constants to specify a social network:
Otherwise, create an object with the social network name you need.
Use the current constants to specify a social network:
SocialNetwork.Facebook
SocialNetwork.Twitter
SocialNetwork.GooglePlus
SocialNetwork.Vk
and so on...
Otherwise, create your own social network object.
Example:
Use the current constants to specify social network:
SocialNetwork.Facebook SocialNetwork.Twitter SocialNetwork.GooglePlus SocialNetwork.Vk and so on...
Otherwise, create social network the object of your own:
We recommend using the following values for the most popular social networks:
Use the current constants to specify social network:
Otherwise, create your own social network object.
Use the current constants to specify social network:
Otherwise, create social network the object of your own.
Use the current constants to specify social network:
Otherwise, create your own social network object:
Track publications in social networks and analyze the effectiveness of viral messages. The event is sent after a social network confirms the publication.
As a 'reason' parameter we recommend you indicate actions which encourage users to make a publication.
Otherwise, create an object with the social network name you need.
As a «reason» parameter we recommend that you indicate actions which encourage users to make a publication.
For example:
Start playing
New level reached
New building
New ability
Quest completed
New item
Collection completed
Invitation
Asking for help
New Record
Acheivement
URL sharing
Recommendation
Review
and so on...
Use the current constants to specify a social network:
SocialNetwork.Facebook
SocialNetwork.Twitter
SocialNetwork.GooglePlus
SocialNetwork.Vk
and so on...
Otherwise, create your own social network object.
The social network ID is the same as with DevToDev.SDK.SocialNetworkConnect(). It is possible to use pre-defined or custom values as the reason (pReason parameter) .
Example:
As a «reason» parameter we recommend that you indicate actions which encourage users to make publication.
For example:
Start playing
New level reached
New building
New ability
Quest completed
New item
Collection completed
Invitation
Asking for help
New Record
Acheivement
URL sharing
Recommendation
Review
and so on...
Use the current constants to specify social network:
SocialNetwork.Facebook SocialNetwork.Twitter SocialNetwork.GooglePlus SocialNetwork.Vk and so on...
Otherwise, create social network the object of your own:
As a «reason» parameter we recommend that you indicate actions which encourage users to make publication.
As a «reason» parameter we recommend that you indicate actions which encourage users to make publication.
For example:
Start playing
New level reached
New building
New ability
Quest completed
New item
Collection completed
Invitation
Asking for help
New Record
Acheivement
URL sharing
Recommendation
Review
and so on...
Use the current constants to specify social network:
Otherwise, create your own social network object.
As a «reason» parameter we recommend that you indicate actions which encourage users to make publication.
For example:
Start playing
New level reached
New building
New ability
Quest completed
New item
Collection completed
Invitation
Asking for help
New Record
Achievement
URL sharing
Recommendation
Review
and so on...
Use the current constants to specify social network:
Otherwise, create social network the object of your own.
As a «reason» parameter we recommend that you indicate actions which encourage users to make publication.
For example:
Start playing
New level reached
New building
New ability
Quest completed
New item
Collection completed
Invitation
Asking for help
New Record
Acheivement
URL sharing
Recommendation
Review
and so on...
Use the current constants to specify social network:
Otherwise, create your own social network object:
Blueprint
Code
As a «reason» parameter we recommend that you indicate actions which encourage users to make publication.
Property allows to get UDID:
Property allows to get ODIN:
Property allows to get UUID:
To enable the debug mode and make SDK notifications displayed in the console use this method:
To send events pack before it is filled or before its formation period, you can use immediate dispatch:
Code
To identify a specific product promotion or strategic campaign. (for example 'Snow Boots')
To get the version of integrated SDK, use the following method:
To set set current application version in WEB and Windows Standalone apps use this property:
The method of limiting the processing of user data. The right to be forgotten.
This method is implemented in accordance with the GDPR requirements.
In case a user doesn’t want their data to be sent and processed in the devtodev system, a developer must send a ’false’ value to this method.
When calling the method setTrackingAvailability with a ‘false’ value, SDK sends a command to the server to delete all user’s personal data that has been collected by devtodev from this app and a command to block the collection of any data of this user in future, and then stops sending any messages to the devtodev system.
The user will remain listed as an impersonal unit in previously aggregated metrics.
When sending a ‘true’ value, the permission to block data collection is removed.
When calling the method setTrackingAvailability with a ‘false’ value, SDK sends a command to the server to delete all user’s personal data that has been collected by devtodev from this app and a command to block the collection of any data of this user in future, and then stops sending any messages to the devtodev system.
The user will remain listed as an impersonal unit in previously aggregated metrics.
When sending a ‘true’ value, the permission to block data collection is removed.
In the case of using TrackingAvailability property with a ‘false’ value, SDK sends a command to the server to delete all user’s personal data that has been collected by devtodev from this app and a command to block the collection of any data of this user in future, and then stops sending any messages to the devtodev system.
The user will remain listed as an impersonal unit in previously aggregated metrics.
In the case of using TrackingAvailability property with a ‘true’ value, the permission to block data collection is removed.
When calling the method setTrackingAvailability with a ‘false’ value, SDK sends a command to the server to delete all user’s personal data that has been collected by devtodev from this app and a command to block the collection of any data of this user in future, and then stops sending any messages to the devtodev system.
The user will remain listed as an impersonal unit in previously aggregated metrics.
When sending a ‘true’ value, the permission to block data collection is removed.
In the case of using TrackingAvailability property with a ‘false’ value, SDK sends a command to the server to delete all user’s personal data that has been collected by devtodev from this app and a command to block the collection of any data of this user in future, and then stops sending any messages to the devtodev system.
The user will remain listed as an impersonal unit in previously aggregated metrics.
In the case of using TrackingAvailability property with a ‘true’ value, the permission to block data collection is removed.
When calling the method setTrackingAvailability with a ‘false’ value, SDK sends a command to the server to delete all user’s personal data that has been collected by devtodev from this app and a command to block the collection of any data of this user in future, and then stops sending any messages to the devtodev system.
The user will remain listed as an impersonal unit in previously aggregated metrics.
When sending a ‘true’ value, the permission to block data collection is removed.
When calling the method setTrackingAvailability with a ‘false’ value, SDK sends a command to the server to delete all user’s personal data that has been collected by devtodev from this app and a command to block the collection of any data of this user in future, and then stops sending any messages to the devtodev system.
The user will remain listed as an impersonal unit in previously aggregated metrics.
When sending a ‘true’ value, the permission to block data collection is removed.
Field
Type
Description
Source
FString
To identify a search engine, newsletter name, or other source. (for example 'AdWords', 'Bing', 'E-Mail Newsletter')
Medium
FString
To identify a medium such as email or cost-per-install. (for example 'CPI')
Campaign
FString
To identify a specific product promotion or strategic campaign. (for example 'Snow Boots')
Content
FString
To differentiate ads or links that point to the same URL. (for example some ads might advertise 'Warm Snow Boots' and others might advertise 'Durable Snow Boots')
Term
FString
To note the keywords for this ad. for example 'shoes+boots')
Value
Social Network
Value
Social Network
en
Evernote
rt
fb
rr
Renren
gm
Google Mail
tb
Tumblr
gp
Google+
tw
in
vk
VK
ok
Odnoklassniki
vb
Viber
pi
wp
Qzone
Field
Type
Description
Social Name
FString
Social network Id
Value
Social Network
Value
Social Network
en
Evernote
rt
fb
rr
Renren
gm
Google Mail
tb
Tumblr
gp
Google+
tw
in
vk
VK
ok
Odnoklassniki
vb
Viber
pi
wp
Qzone
For example:
Start playing
New level reached
New building
New ability
Quest completed
New item
Collection completed
Invitation
Asking for help
New Record
Achievement
URL sharing
Recommendation
Review
and so on...
For example:
Start playing
New level reached
New building
New ability
Quest completed
New item
Collection completed
Invitation
Asking for help
New Record
Achiеvement
URL sharing
Recommendation
Review
and so on...
Value
Social Network
Value
Social Network
en
Evernote
rt
fb
rr
Renren
gm
Google Mail
tb
Tumblr
gp
Google+
tw
in
vk
VK
ok
Odnoklassniki
vb
Viber
pi
wp
Qzone
Field
Type
Description
Social Name
FString
Social network Id
Reason
FString
The reason of posting (max. 32 symbols)
For example:
Start playing
New level reached
New building
New ability
Quest completed
New item
Collection completed
Invitation
Asking for help
New Record
Achievement
URL sharing
Recommendation
Review
and so on...
Value
Social Network
Value
Social Network
en
Evernote
rt
fb
rr
Renren
gm
Google Mail
tb
Tumblr
gp
Google+
tw
in
vk
VK
ok
Odnoklassniki
vb
Viber
pi
wp
Qzone
Please take a look at our Expert tips before integrating the events.
The Tutorial steps event allows you to evaluate the effectiveness of the tutorial steps system. The event should be sent at the end of each tutorial step indicating the number of every passed step as a parameter.
Use the following constants to specify basic events of tutorial steps:
Start or -1 - at the beginning, before the first step is completed;
Finish or -2 - instead of the final step number;
Skipped or 0 - in case а user skipped the tutorial.
DevToDev.TutorialState.Start or -1 - at the beginning, before the first step is completed;
DevToDev.TutorialState.Finish or -2 - instead of the last step number;
DevToDev.TutorialState.Skipped or 0 - if a user skipped the tutorial.
DevToDev.TutorialState.Start or -1 - at the beginning, before the first step is completed;
DevToDev.TutorialState.Finish or -2 - instead of the last step number;
DevToDev.TutorialState.Skipped or 0 - if a user skipped the tutorial.
-1 - Start the tutorial (at the beginning, before the first step is completed)
-2 - Tutorial finished (instead of the last step number)
0 - Tutorial skipped (if a user skipped the tutorial).
DevToDev.TutorialState.Start or -1 - at the beginning, before the first step is completed;
DevToDev.TutorialState.Finish or -2 - instead of the last step number;
DevToDev.TutorialState.Skipped or 0 - if a user skipped the tutorial.
Start or -1 - at the beginning, before the first step is completed;
Finish or -2 - instead of the final step number;
Skipped or 0 - in case a user skipped the tutorial.
TutorialState.START or -1 - at the beginning, before the first step is completed;
TutorialState.FINISH or -2 - instead of the last step number;
TutorialState.SKIPPED or 0 - if a user skipped the tutorial.
-1 (Start) - at the beginning, before the first step is completed;
-2 (Finish) - instead of the number of the last step;
0 (Skipped) - in case a user skipped the tutorial.
In other cases use step numbers. Make sure you use numbers above 0 to enumerate the steps.
The logic of the use of the Skipped constant in the Tutorial steps event is provided only in case a user has completely refused to pass the tutorial. After Skipped is used, no other values of the Tutorial steps event must be received.
Blueprint
Code
This event is for games only.
You can analyze the distribution of the players over the levels. The event should be sent right after the player reached the next level. You can find more information on what is the right moment to use LevelUp event here.
To track the average account balance of in-game currency by the end of each level, please provide the list of currency names and amounts.
Blueprint
To track the average amount of in-game currency earned during a level, it is necessary to send a special event after each time an in-game account is replenished.
AccrualType can take one of the following values:
To track payments, add this event right after the platform confirms that a payment went through.
A unique order identifier is a value of a transactionIdentifier property in SKPaymentTransaction object inside the receipt of completed transaction.
devtodev server does not process transactions with previously used transaction IDs. Also, the server validates identifiers in appearance to avoid evident cheat transactions. To avoid adding cheat payments into reports completely, use devtodev anti-cheat service before creating a realPayment event.
How to find the transaction ID in GooglePlay transaction?
Find the INAPP_PURCHASE_DATA object In the JSON fields that are returned in the response data for a purchase order. A unique transaction identifier is the value of orderId property in INAPP_PURCHASE_DATA object. If the order is a test purchase made via the In-app Billing Sandbox, orderId property will be empty.
devtodev server does not process transactions with previously used transaction IDs. Also, the server validates the identifiers in appearance to avoid evident cheat transactions. To avoid completely the entering of cheat payments from GooglePlay in reports, use devtodev anticheat service before creating realPayment event.
Example:
Example:
How to find the transaction ID in iTunes transaction?
Unique order identifier is a value of "transactionIdentifier" property in SKPaymentTransaction object inside the receipt of completed transaction.
How to find the transaction ID in GooglePlay transaction?
Find the INAPP_PURCHASE_DATA object In the JSON fields that are returned in the response data for a purchase order. A unique transaction identifier is the value of orderId property in INAPP_PURCHASE_DATA object. If the order is a test purchase made via the In-app Billing Sandbox, orderId property will be empty.
devtodev server does not process transactions with previously used transaction IDs. Also the server validates the identifiers in appearance, to avoid evident cheat transactions. To avoid the entering of cheat payments in reports completely, use devtodev anticheat service before creating realPayment event.
Blueprint
Code
This event is for games only.
To track expenditures of in-game currency and popularity of products, add this event right after the purchase.
In case a product is bought for several game currencies at once, it is necessary to make a dictionary that includes the names and amounts of the paid currencies.
In case a product was bought for several game currencies at once, it is necessary to make a hashmap that includes the names and amounts of the paid currencies.
…and so on…
Example:
In case a product was bought for several game currencies at once, it is necessary to make a hashmap including the names and amounts of the paid currencies.
Example:
In case a product was bought for several game currencies at once, it is necessary to make a dictionary including the names and amounts of the paid currencies.
In case a product was bought for several game currencies at once, it is necessary to make a dictionary including the names and amounts of the paid currencies.
In case a product was bought for several game currencies at once, it is necessary to make a hashmap including the names and amounts of the paid currencies.
Blueprint
Notice! If the purchase is done by more than one currency, then the method should be called as many times as many currencies were used, but the amount of purchase should be set only in one of the times.
Use the method “Record Simple Item Purchase with Attributes” from Analytics Blueprint Library.
Item Id field is the identifier of purchased item, Item Quantity is the amount of purchased item. Attributes array should contain the following obligatory information:
Code
Please keep in mind that there is a limit for the number of unique values of the "purchaseCurrency" parameter - 30 currencies per project. Currencies cannot be deleted or renamed.
If you want to count the events that are not among basic, use custom events.
Attention! We strongly recommend that you do not use custom event properties to transfer and store data that fits the definition of personal data!
The event must have a unique name and can include up to 20 parameters. The maximum length of the event name is 72 symbols.
Every parameter inside one event must have a unique name. The maximum length of the parameter name is 32 symbols.
The values of parameters can be string or number type (int, long, float, double). The maximum length of the parameter value is 255 symbols.
No more than 300 variants of custom event names can be used for one project. Try to enlarge events in meaning by using event parameters. Events that didn't get into the limit of unique event names will be discarded.
For a string parameter, it is acceptable to use not more than 50,000 unique values for the whole event history. In case the limit of unique values is exceeded, the parameter is ignored.
Therefore, we recommend not to set user IDs and Unix time as parameter values of custom events. Try to integrate parameter values if they have a very large variability. Otherwise, it will be very difficult to analyze the data or after some time it may be even ignored.
We strongly recommend not to change the type of data transferred in the parameter over time. In case you change the data type in parameter, it will be duplicated with the same name and different data types in devtodev database which will result in more complicated report building.
20 parameter names may be associated with any event:
Then use method:
20 parameter names may be associated with any event:
Then use method:
Example:
20 parameter names may be associated with any event:
Example:
20 parameter names may be associated with any event:
Then use method:
Example:
20 parameter names may be associated with any event:
Then use method:
20 parameter names may be associated with any event:
Then use method:
20 parameter names may be associated with any event:
Then use method:
20 parameter names may be associated with any event. Use "Record Event With Attributes".
Code
This event is for games only.
First of all, a Progression event is used for games with short (within one game session) locations/game levels. The event allows you to gather data on passing the locations and get statistics on parameters that vary during the location passing.
Developer must use the following two methods:
Method startProgressionEvent when entering the location:
Method endProgressionEvent when exiting (no matter if completed or not) the location:
LocationEventParams class methods:
The user can be only in one location at the same time. When moving to another location (including embedded), the previous location must be completed. Information on locations, the passing of which was not completed by calling endProgressionEvent method during the game session (the call of endProgressionEvent method is not integrated; user unloaded the application from the device memory; there was an application crash), do not fall in the statistics.
Let’s look at the example of event integration for a match3 game with a location map:
Method startProgressionEvent when enetring the location
Method endProgressionEvent when exiting (no matter if completed or not) the location
LocationEventParams class methods:
The user can be only in one location at the same time. When moving to another location (including embedded), the previous location must be completed. Information on locations, the passing of which was not completed by calling endProgressionEvent method during the game session (the call of endProgressionEvent method is not integrated; user unloaded the application from the device memory; there was an application crash) do not fall in the statistics.
Let’s analyse the example of event integration on match3 game with location map:
Method StartProgressionEvent when enetring the location
Method EndProgressionEvent when exiting (no matter if completed or not) the location
LocationEventParams class methods:
The user can be only in one location at the same time. When moving to another location (including embedded), the previous location must be completed. Information on locations, the passing of which was not completed by calling EndProgressionEvent method during the game session (the call of EndProgressionEvent method is not integrated; user unloaded the application from the device memory; there was an application crash) do not fall in the statistics.
Let’s analyse the example of event integration on match3 game with location map:
Method startProgressionEvent when enetring the location
Method endProgressionEvent when exiting (no matter if completed or not) the location
Location parameters object contains:
The user can be only in one location at the same time. When moving to another location (including embedded), the previous location must be completed. Information on locations, the passing of which was not completed by calling endProgressionEvent method during the game session (the call of endProgressionEvent method is not integrated; user unloaded the application from the device memory; there was an application crash) do not fall in the statistics.
Let’s analyse the example of event integration on match3 game with location map:
Method StartProgressionEvent when enetring the location
Method EndProgressionEvent when exiting (no matter if completed or not) the location
ProgressionEventParams class methods:
The user can be only in one location at the same time. When moving to another location (including embedded), the previous location must be completed. Information on locations, the passing of which was not completed by calling EndProgressionEvent method during the game session (the call of EndProgressionEvent method is not integrated; user unloaded the application from the device memory; there was an application crash) do not fall in the statistics.
Let’s analyse the example of event integration on match3 game with location map:
Method startProgressionEvent when enetring the location
Method endProgressionEvent when exiting (no matter if completed or not) the location
LocationEventParams class methods:
The user can be only in one location at the same time. When moving to another location (including embedded), the previous location must be completed. Information on locations, the passing of which was not completed by calling endProgressionEvent method during the game session (the call of endProgressionEvent method is not integrated; user unloaded the application from the device memory; there was an application crash) do not fall in the statistics.
Let’s analyse the example of event integration on match3 game with location map:
Method StartProgressionEvent when enetring the location
Method EndProgressionEvent when exiting (no matter if completed or not) the location
LocationEventParams class methods:
The user can be only in one location at the same time. When moving to another location (including embedded), the previous location must be completed. Information on locations, the passing of which was not completed by calling EndProgressionEvent method during the game session (the call of EndProgressionEvent method is not integrated; user unloaded the application from the device memory; there was an application crash) do not fall in the statistics.
Let’s analyse the example of event integration on match3 game with location map:
Method StartProgressionEvent when enetring the location
Code
Method EndProgressionEvent when exiting (no matter if completed or not) the locationBlueprint
Location parameters
Code
The user can be only in one location at the same time. When moving to another location (including embedded), the previous location must be completed. Information on locations, the passing of which was not completed by calling endProgressionEvent method during the game session (the call of endProgressionEvent method is not integrated; user unloaded the application from the device memory; there was an application crash) do not fall in the statistics.
Let’s analyse the example of event integration on match3 game with location map:
In addition to basic methods, you can observe and change the user profiles data. A user profile is the set of properties describing the user, which can be divided into 4 groups:
Cross-platform or custom user identifier. If this identifier is not set by a developer, then the device identifier is used.
Automatically collected properties, including data about user's device, geography, app version, SDK, and some other data which can be received from SDK.
The default set of user properties, which can be set by a developer. The set of this parameters works with separate methods. This set includes the data of the user's name, sex, age, e-mail, phone number and URL of user picture. Also, this set includes the mark of a user as a cheater.
Custom set of user properties. In this case, a developer sets any user data he/she needs to know. The data is set in key-value format and can be numeric, string, array, or boolean. Each project can have up to 30 custom user properties.
Cross-platform or custom user identifier. If this identifier is not set by a developer, then the device identifier is used.
Automatically collected properties, including data about user's device, geography, app version, SDK, and some other data which can be received from SDK.
The default set of user properties, which can be set by a developer. The set of this parameters works with separate methods. This set includes the data of the user's name, sex, age, e-mail, phone number, and URL of user picture. Also, this set includes the mark of a user as a cheater.
Custom set of user properties. In this case, a developer sets any user data he/she needs to know. The data is set in key-value format and can be numeric, string, array, or boolean. Each project can have up to 30 custom user properties.
Cross-platform or custom user identifier. If this identifier is not set by developer, then the device identifier is used.
Automatically collected properties, including data about user's device, geography, app version, SDK, and some other data which can be received from SDK.
Default set of user properties, which can be set by developer. The set of this parameters works with separate methods. This set includes the data of user's name, sex, age, e-mail, phone-number and url of user picture. Also this set includes the mark of user as cheater.
Custom set of user properties. In this case developer sets any user data he/she needs to know. The data is set in key-value format and can be numeric, string, array or boolean. Each project can have up to 30 custom user properties.
Cross-platform or custom user identifier. If this identifier is not set by developer, then the identifier which was set during the initialization is used.
Automatically collected properties, including data about user's device, geography, app version, SDK, and some other data which can be received from SDK.
Basic set of user properties, which can be set by developer. The set of this parameters works with separate methods. This set includes the data of user's name, sex, age, e-mail, phone-number and url of user picture. Also this set includes the mark of user as cheater.
Custom set of user properties. In this case developer sets any user data he/she needs to know. The data is set in key-value format and can be numeric, string, array or boolean. Each project can have up to 30 custom user properties.
Cross-platform or custom user identifier. If this identifier is not set by developer, then the device identifier is used.
Automatically collected properties, including data about user's device, geography, app version, SDK, and some other data which can be received from SDK.
Default set of user properties, which can be set by developer. The set of this parameters works with separate methods. This set includes the data of user's name, sex, age, e-mail, phone-number and url of user picture. Also this set includes the mark of user as cheater.
Custom set of user properties. In this case developer sets any user data he/she needs to know. The data is set in key-value format and can be numeric, string, array or boolean. Each project can have up to 30 custom user properties.
Cross-platform or custom user identifier. If this identifier is not set by developer, then the device identifier is used.
Automatically collected properties, including data about user's device, geography, app version, SDK, and some other data which can be received from SDK.
Default set of user properties, which can be set by developer. The set of this parameters works with separate methods. This set includes the data of user's name, sex, age, e-mail, phone-number and url of user picture. Also this set includes the mark of user as cheater.
Custom set of user properties. In this case developer sets any user data he/she needs to know. The data is set in key-value format and can be numeric, string, array or boolean. Each project can have up to 30 custom user properties.
Cross-platform or custom user identifier. If this identifier is not set by developer, then the device identifier is used.
Automatically collected properties, including data about user's device, geography, app version, SDK, and some other data which can be received from SDK.
Default set of user properties, which can be set by developer. The set of this parameters works with separate methods. This set includes the data of user's name, sex, age, e-mail, phone-number and url of user picture. Also this set includes the mark of user as cheater.
Custom set of user properties. In this case developer sets any user data he/she needs to know. The data is set in key-value format and can be numeric, string, array or boolean. Each project can have up to 30 custom user properties.
Cross-platform or custom user identifier. If this identifier is not set by developer, then the device identifier is used.
Automatically collected properties, including data about user's device, geography, app version, SDK, and some other data which can be received from SDK.
Default set of user properties, which can be set by developer. The set of this parameters works with separate methods. This set includes the data of user's name, sex, age, e-mail, phone-number and url of user picture. Also this set includes the mark of user as cheater.
Custom set of user properties. In this case developer sets any user data he/she needs to know. The data is set in key-value format and can be numeric, string, array or boolean. Each project can have up to 30 custom user properties.
You can segment users by all the properties in My Apps section of an application.
This method is used for user initialization in the applications that are the parts of cross-platform project.
We recommend you to apply this method before the SDK initialization, otherwise the user identifier from the previous session will be used since the SDK initialization moment till the setUserID method call.
If your cross-platform application is supposed to be used without cross-platform authorization, don't use the setUserID method or use the empty string ("") as the user identifier. SDK will assign the unique identifier to user. This identifier will be used until the real cross-platform identifier is assigned to the user.
If your application allows user to re-login (changing the user during the working session of the application), then the setUserID method should be called just after the authorization. You don't need to call the SDK initialization one more time.
To see which identifier is used at the moment:
This method is used for user initialization in the applications which are the parts of cross-platform project.
We recommend you to apply this method before the SDK initialization, otherwise the user identifier from the previous session will be used since the SDK initialization moment till the setUserID method call.
If your cross-platform application supposes to be used without cross-platform authorization, don't use the setUserID method or use the empty string ("") as the user identifier. SDK will assign the unique identifier to user. This identifier will we used until the real cross-platform identifier assigns to the user.
If your application allows user to re-login (changing the user during the working session of application), then the setUserID method should be called just after the authorization. You don't need to call the SDK initialization one more time.
To see which identifier is used at the moment:
This method is used for user initialization in the applications which are the parts of cross-platform project.
We recommend you to apply this method before the SDK initialization, otherwise the user identiticator from the previous session will be used since the SDK initialization moment till the UserID property call.
If your cross-platform application supposes to be used without cross-platform authorization, don't use the UserID property or use the empty string ("") as the user identifier. SDK will assign the unique identifier to user. This identifier will we used until the real cross-platform identifier assigns to the user.
If your application allows user to re-login (changing the user during the working session of application), then the UserID property should be called just after the authorization. You don't need to call the SDK initialization one more time.
This property also allows you to see which identifier is used at the moment.
This method is used for user initialization in the applications which are the parts of cross-platform project. You also can use this identifier in non-crossplatform projects, but in your app the own unique user identifier is used.
We recommend you to apply this method before the SDK initialization, otherwise the user identifier from the previous session will be used since the SDK initialization moment till the setCrossplatformUserId method call.
If your cross-platform application supposes to be used without cross-platform authorization, don't use the setCrossplatformUserId method or use the empty string ("") as the user identifier. SDK will assign the unique identifier to user. This identifier will be used until the real cross-platform identifier assigns to the user.
If your application allows user to re-login (changing the user during the working session of application), then the setCrossplatformUserId method should be called just after the authorization. You don't need to call the SDK initialization one more time.
To see which identifier is used at the moment:
This method is used for user initialization in the applications which are the parts of cross-platform project.
We recommend you to apply this method before the SDK initialization, otherwise the user identifier from the previous session will be used since the SDK initialization moment till the UserID property call.
If your cross-platform application supposes to be used without cross-platform authorization, don't use the UserID property or use the empty string ("") as the user identifier. SDK will assign the unique identifier to user. This identifier will we used until the real cross-platform identifier assigns to the user.
If your application allows user to re-login (changing the user during the working session of application), then the UserID property should be called just after the authorization. You don't need to call the SDK initialization one more time.
This property also allows you to see which identifier is used at the moment.
This method is used for user initialization in the applications which are the parts of cross-platform project.
We recommend you to apply this method before the SDK initialization, otherwise the user identifier from the previous session will be used since the SDK initialization moment till the setUserID method call.
If your cross-platform application supposes to be used without cross-platform authorization, don't use the setUserID method or use the empty string ("") as the user identifier. SDK will assign the unique identifier to user. This identifier will we used until the real cross-platform identifier assigns to the user.
If your application allows user to re-login (changing the user during the working session of application), then the setUserID method should be called just after the authorization. You don't need to call the SDK initialization one more time.
To see which identifier is used at the moment:
This method is used for user initialization in the applications which are the parts of cross-platform project.
We recommend you to apply this method before the SDK initialization, otherwise the user identifier from the previous session will be used since the SDK initialization moment till the setUserID method call.
If your cross-platform application supposes to be used without cross-platform authorization, don't use the setUserID method or use the empty string ("") as the user identifier. SDK will assign the unique identifier to user. This identifier will we used until the real cross-platform identifier assigns to the user.
If your application allows user to re-login (changing the user during the working session of application), then the setUserID method should be called just after the authorization. You don't need to call the SDK initialization one more time.
To see which identifier is used at the moment:
This method is used for user initialization in the applications which are the parts of cross-platform project.
We recommend you to apply this method before the SDK initialization, otherwise the user identifier from the previous session will be used since the SDK initialization moment till the setUserID method call.
If your cross-platform application supposes to be used without cross-platform authorization, don't use the setUserID method or use the empty string ("") as the user identifier. SDK will assign the unique identifier to user. This identifier will we used until the real cross-platform identifier assigns to the user.
If your application allows user to re-login (changing the user during the working session of application), then the setUserID method should be called just after the authorization. You don't need to call the SDK initialization one more time.
Blueprint
Code
To see which identifier is used at the moment:
Blueprint
Code
If it is possible to replace the user identifier in your application (for example, to make changes in the login/user id for a particular user), use this method at the moment of replacing the identifier.
Don't use this method if you're going to perform the user's re-login.
If it is possible to replace the user identifier in your application (say, to make changes in the login/user id for particular user), use this method at the moment of replacing the identifier.
Don't use this method if you're going to perform the user's re-login.
If it is possible to replace the user identifier in your application (say, to make changes in the login/user id for particular user), use this method at the moment of replacing the identifier.
Don't use this method if you're going to perform the user's re-login.
If it is possible to replace the cross-platform user identifier in your application (say, to make changes in the login/user id for particular user), use this method at the moment of replacing the identifier.
Don't use this method if you're going to perform the user's re-login.
If it is possible to replace the user identifier in your application (say, to make changes in the login/user id for particular user), use this method at the moment of replacing the identifier.
Don't use this method if you're going to perform the user's re-login.
If it is possible to replace the user identifier in your application (say, to make changes in the login/user id for particular user), use this method at the moment of replacing the identifier.
Don't use this method if you're going to perform the user's re-login.
If it is possible to replace the user identifier in your application (say, to make changes in the login/user id for particular user), use this method at the moment of replacing the identifier.
Don't use this method if you're going to perform the user's re-login.
If it is possible to replace the user identifier in your application (say, to make changes in the login/user id for particular user), use this method at the moment of replacing the identifier.
Don't use this method if you're going to perform the user's re-login.
Blueprint
Code
This method is used in cross-platform applications and applications with data synchronization.
This method is required for user's level data initialization. We recommend you to use the setCurrentLevel method just after the user initialization (using the setUserID method).
Don't use the setCurrentLevel method at the moment of user's level up. We recommend you to use the levelUp method in this case.
This method is used in cross-platform applications and applications with data synchronization.
This method is required for user's level data initialization. We recommend you to use the setCurrentLevel method just after the user initialization (using the setUserID method).
Don't use the setCurrentLevel method at the moment of user's level up. We recommend you to use the levelUp method in this case.
This method is used in cross-platform applications and applications with data synchronization.
This method is required for user's level data initialization. We recommend you to use the SetCurrentLevel method just after the user initialization (using the UserID method).
Don't use the SetCurrentLevel method at the moment of user's level up. We recommend you to use the levelUp method in this case.
If your app uses the user's level mark, we recommend to use this method after every SDK initialization, as soon as data of user's level is available to the application.
This method is used in cross-platform applications and applications with data synchronization.
This method is required for user's level data initialization. We recommend you to use the SetCurrentLevel method just after the user initialization (using the UserID method).
Don't use the SetCurrentLevel method at the moment of user's level up. We recommend you to use the levelUp method in this case.
This method is used in cross-platform applications and applications with data synchronization.
This method is required for user's level data initialization. We recommend you to use the setCurrentLevel method just after the user initialization (using the setUserID method).
Don't use the setCurrentLevel method at the moment of user's level up. We recommend you to use the levelUp method in this case.
This method is used in cross-platform applications and applications with data synchronization.
This method is required for user's level data initialization. We recommend you to use the setCurrentLevel method just after the user initialization (using the setUserID method).
Don't use the setCurrentLevel method at the moment of user's level up. We recommend you to use the levelUp method in this case.
This method is used in cross-platform applications and applications with data synchronization.
This method is required for user's level data initialization. We recommend you to use the setCurrentLevel method just after the user initialization (using the setUserID method).
Don't use the setCurrentLevel method at the moment of user's level up. We recommend you to use the levelUp method in this case.
Blueprint
Code
In case you have your own methods of determining cheaters in the application, you can have such users marked. Payments made by them will not be taken into account in the statistics.
Blueprint
Code
User's name. Default user profile property.
We strongly recommend not to use this property because it refers to personal data.
Blueprint
--
Code
User's age in years. Default user profile property.
We strongly recommend not to use this property because it refers to personal data.
Blueprint
Code
User's gender. Default user profile property.
We strongly recommend not to use this property because it refers to personal data.
Blueprint
Code
User's e-mail. Default user profile property.
We strongly recommend not to use this property because it refers to personal data.
Blueprint
Code
User's phone. Default user profile property.
We strongly recommend not to use this property because it refers to personal data.
Blueprint
Code
User's photo URL. Default user profile property.
We strongly recommend not to use this property because it refers to personal data.
Blueprint
Code
Each project in devtodev can have up to 30 custom user properties.Here is how you can set properties on the current user profile:
Attention! We strongly recommend that you do not use these properties to transfer and store data that fits the definition of personal data!
Blueprint
Code
Increments the given numeric properties by the given values.
Blueprint
Code
Adds values to a list-valued property. If the property does not currently exist, it will be created with the given list as it's value. If the property exists and is not list-valued, the append will be ignored.
Adds values to a list-valued property only if they are not already present in the list. If the property does not currently exist, it will be created with the given list as it's value. If the property exists and is not list-valued, the union will be ignored.
Removes a property or a list of properties and their values from the current user's profile.
Blueprint
Code
Blueprint
Code
Blueprint
Player comes to the third location on the map “Village” while following the game map. Passing on the first level of difficulty. Before entering this location gamer passed the third location on the map “City”. .. Player passing the location. Player finishes passing of the third location on the map “Village”. The location is passed successfully. The passing took 389 seconds. Gamer finished the passing with 3 stars and gained 70 coins. While the passing gamer used boost and bought extra 5 turns.
Field
Type
Description
Step
int32
The latest successfully completed tutorial step
Field
Type
Description
Level
int32
level reached by the player
Field
Type
Description
Level
int32
level reached by the player
Field
Type
Description
Game Currency Type
FString
Currency name (max. 24 symbols)
Game Currency Amount
int32
The amount an account has been credited with.
accrualType
Enum
Can take one of following values: "Earned" or "Purchased"
Field
type
Description
Transaction Id
FString
Unique transaction ID
In AppPrice
float
Product price (in user's currency)
In App Name
FString
Product name
In App Currency ISOCode
FString
Transaction currency (ISO 4217 format)
Field
Type
Description
Item Id
FString
Unique purchase Id or name (max. 32 symbols)
Item Quantity
int32
Count of purchased goods
Field
Type
Description
purchaseType
FString
Purchase type or group (max. 96 symbols)
purchasePrice
int32
Cost of purchased goods (total cost -if several goods were purchased)
purchaseCurrency
FString
Currency name (max. 24 symbols)
Field
Type
Description
Event Name
FString
Custom event name
Field
Type
Description
locationName
FString
The name of location user entered
Attributes
TArray<FAnalyticsEventAttr>
Location parameters
Field
Type
Description
locationName
FString
The name of location user left
Attributes
TArray<FAnalyticsEventAttr>
Location parameters
Earned
TArray<FAnalyticsEventAttr>
User earnings within the location passing (optional). Key max. length is 24 symbols.
Spent
TArray<FAnalyticsEventAttr>
User spendings within the location passing (optional). Key max. length is 24 symbols.
Key
Type
Description
success
bool
State/result of the location passing (required).
source
FString
Previously visited location (optional).
difficulty
int32
Location level of difficulty (optional).
duration
int32
Time spent in the location (optional). In case the parameter is not specified by the developer, it will be automatically сalculated as the date difference between Start Progression Event and End Progression Event method calls.
Field
Type
Description
User Id
FString
Unique cross-platform user id
Field
Type
Description
From
FString
Current user Id
To
FString
New user Id
Field
Type
Description
Level
int32
Current user level
Field
Type
Description
isCheater
bool
True if user is a cheater
Field
Type
Description
Name
FString
User's name
Field
Type
Description
Age
int32
User's age in years
Field
Type
Description
Gender
FString
User's gender ('male', 'female', 'unknown')
Field
Type
Description
FString
User's e-mail
Field
Type
Description
Phone
FString
User's phone
Field
Type
Description
Photo
FString
User's photo URL.
Field
Type
Description
Attributes
TArray<FAnalyticsEventAttr>
Key-value array to set custom property, where key is a user property name, value is a property value
Field
Type
Description
Attributes
TArray<FAnalyticsEventAttr>
Key-value array, where key is a user property name, value is increment step
Field
Type
Description
Attributes
TArray<FString>
An array of property names to be removed.