# Unreal Engine

## Plugin installation

Unzip the ***DTDAnalytics.zip*** archive to the ***Plugins*** folder of your project.

For a C++ project type, add the **`DTDAnalytics`** name to the list of dependency module names to the ***\<module\_name>.Build.cs*** file of the module in which you plan to use the plugin.

Example:

```cpp
PublicDependencyModuleNames.Add("DTDAnalytics");
```

## Data types

#### class UDTDAnalyticsLibrary

A class that implements analytic methods.

Header file:

```cpp
#include "DTDAnalytics/Public/DTDAnalyticsBPLibrary.h"
```

#### class UDTDUserCardLibrary

A class that implements user card methods.

The class header:

```cpp
#include "DTDAnalytics/Public/DTDUserCardBPLibrary.h"
```

#### enum class EDTDTrackingStatus : uint8

SDK tracking status.

Header file:

```cpp
#include "DTDAnalytics/Public/DTDTrackingStatus.h"
```

Values:

* `Unknown = 0` - leave tracking unchanged
* `Enable = 1` - tracking enabled
* `Disable = 2` - tracking disabled

Example:

```cpp
EDTDTrackingStatus TrackingStatus = EDTDTrackingStatus::Enable;
```

#### enum class EDTDLogLevel : uint8

SDK logging level.

Header file:

```cpp
#include "DTDAnalytics/Public/DTDLogLevel.h"
```

Values:

* `Unknown = 0` - leave logging level unchanged
* `No = 1` - logging disabled
* `Error = 2` - logging of errors
* `Warning = 3` - logging of warnings and errors
* `Info = 4` - logging of information messages, warnings and errors
* `Debug = 5` - logging of debugging messages, informational messages, warnings and errors

Example:

```cpp
EDTDLogLevel LogLevel = EDTDLogLevel::Info;
```

#### enum class EDTDAccrualType : uint8

Types of resource accumulation.

Header file:

```cpp
#include "DTDAnalytics/Public/DTDAccrualType.h"
```

Values:

* `Earned = 0` - earned resources
* `Bought = 1` - purchased resources

Example:

```cpp
EDTDAccrualType AccrualType = EDTDAccrualType::Earned;
```

#### enum class EDTDSocialNetwork : uint8

Predefined social media.

Header file:

```cpp
#include "DTDAnalytics/Public/DTDSocialNetwork.h"
```

Values:

* `Facebook = 0`
* `Vkontakte = 1`
* `Twitter = 2`
* `Googleplus = 3`
* `Whatsapp = 4`
* `Viber = 5`
* `Evernote = 6`
* `Googlemail = 7`
* `Linkedin = 8`
* `Pinterest = 9`
* `Reddit = 10`
* `Renren = 11`
* `Tumblr = 12`
* `Qzone = 13`

Example:

```cpp
EDTDSocialNetwork SocialNetwork = EDTDSocialNetwork::Facebook;
```

#### enum class EDTDGender: uint8

User gender.

Header file:

```cpp
#include "DTDAnalytics/Public/DTDGender.h"
```

Values:

* `Unknown = 0`
* `Male = 1`
* `Female = 2`

Example:

```cpp
EDTDGender Gender = EDTDGender::Female;
```

#### enum class EDTDReferralProperty : uint8

Referral properties.

Header file:

```cpp
#include "DTDAnalytics/Public/DTDReferralProperty.h"
```

Values:

* `Source = 0`
* `Medium = 1`
* `Content = 2`
* `Campaign = 3`
* `Term = 4`

Example:

```cpp
EDTDReferralProperty ReferralProperty = EDTDReferralProperty::Source;
```

#### struct FDTDOptionalInt32

An optional parameter of int32 type

Header file:

```cpp
#include "DTDAnalytics/Public/DTDOptionalInt32.h"
```

| Member           | Type  | Description     |
| ---------------- | ----- | --------------- |
| ***`HasValue`*** | bool  | Option label    |
| ***`Value`***    | int32 | Parameter value |

For your convenience, we implemented the conversion constructor:

```
FDTDOptionalInt32(int32 value) : HasValue(true), Value(value) {}
```

Example:

```cpp
FDTDOptionalInt32 OptionalParameter = 1;
```

#### struct FDTDOptionalString

An optional parameter of FString type.

Header file:

```cpp
#include "DTDAnalytics/Public/DTDOptionalString.h
```

| Member         | Type    | Description     |
| -------------- | ------- | --------------- |
| **`HasValue`** | bool    | Option label    |
| **`Value`**    | FString | Parameter value |

For your convenience, we implemented the conversion constructor:

```cpp
FDTDOptionalString(FString value) : HasValue(true), Value(value) {}
```

Example:

```cpp
FDTDOptionalString OptionalParameter = FString("StringValue");
```

#### struct FDTDAnalyticsConfiguration

Configuration of the analytics plugin.

Header file:

```cpp
#include "DTDAnalytics/Public/DTDAnalyticsConfiguration.h"
```

| Member                       | Type               | Description                   |
| ---------------------------- | ------------------ | ----------------------------- |
| ***`LogLevel`***             | EDTDLogLevel       | Logging level                 |
| ***`CurrentLevel`***         | FDTDOptionalInt32  | Current level                 |
| ***`UserId`***               | FDTDOptionalString | User ID                       |
| ***`ApplicationVersion`***   | FDTDOptionalString | Application version (Windows) |
| ***`TrackingAvailability`*** | EDTDTrackingStatus | Tracking settings             |

Example:

```cpp
FDTDAnalyticsConfiguration config;
config.LogLevel = EDTDLogLevel::Debug;
config.CurrentLevel = 3;
config.UserId = FString("CUID");
config.ApplicationVersion = FString("1.2.3");
config.TrackingAvailability = EDTDTrackingStatus::Enable;
```

#### FDTDCustomEventParams

Custom parameters of a custom event.

Header file:

```cpp
#include "DTDAnalytics/Public/DTDCustomEventParams.h"
```

| Member                   | Type                    | Description                              |
| ------------------------ | ----------------------- | ---------------------------------------- |
| ***`StringParameters`*** | TMap\<FString, FString> | String parameters                        |
| ***`IntParameters`***    | TMap\<FString, int64>   | Integer parameters                       |
| ***`FloatParameters`***  | TMap\<FString, float>   | Real parameters (floating-point numbers) |
| ***`BoolParameters`***   | TMap\<FString, bool>    | Boolean parameters                       |

{% hint style="info" %}
Warning: avoid duplicating keys in parameters of different types, because in native code dictionaries are merged into a single dictionary \[string: any].
{% endhint %}

Example:

```cpp
FDTDCustomEventParams params;
params.BoolParameters.Add("BoolKey", true);
params.FloatParameters.Add("FloatKey", 3.3);
params.IntParameters.Add("IntKey");
params.StringParameters.Add("StringKey", "StringValue");
```

#### struct FDTDStartProgressionEventParams

Parameters of the progression start event.

Header file:

```cpp
#include "DTDAnalytics/Public/DTDStartProgressionEventParams.h"
```

| Member             | Type               | Description |
| ------------------ | ------------------ | ----------- |
| ***`Difficulty`*** | FDTDOptionalInt32  | Difficulty  |
| ***`Source`***     | FDTDOptionalString | Source      |

Example:

```cpp
FDTDStartProgressionEventParams params;
params.Difficulty = 3;
params.Source = FString("Source");
```

#### struct FDTDFinishProgressionEventParams

Parameters of the progression completion event.

Header file:

```cpp
#include "DTDAnalytics/Public/DTDFinishProgressionEventParams.h"
```

| Member                       | Type                  | Description                                                   |
| ---------------------------- | --------------------- | ------------------------------------------------------------- |
| ***`SuccessfulCompletion`*** | bool                  | Successful completion of the progression (‘false’ by default) |
| ***`Duration`***             | int32                 | Duration (if 0, duration is calculated automatically)         |
| ***`Spent`***                | TMap\<FString, int64> | Resources spent                                               |
| ***`Earned`***               | TMap\<FString, int64> | Resources earned                                              |

Example:

```cpp
FDTDFinishProgressionEventParams params;
params.Duration = 200;
params.SuccessfulCompletion = true;
params.Earned.Add("CurrencyName1", 1);
params.Spent.Add("CurrencyName2", 2);
```

#### Delegates

Header file:

```cpp
#include "DTDAnalytics/Public/DTDDelegates.h"
```

Definitions:

```cpp
DECLARE_DELEGATE_OneParam(FDTDLongListenerDelegate, int64);
DECLARE_DELEGATE_OneParam(FDTDGetterStringDelegate, const FString&);
DECLARE_DELEGATE_OneParam(FDTDGetterBoolDelegate, bool);
DECLARE_DELEGATE_OneParam(FDTDGetterIntDelegate, int32);
DECLARE_DELEGATE_OneParam(FDTDGetterLongDelegate, int64);
DECLARE_DELEGATE_OneParam(FDTDGetterGenderDelegate, EDTDGender);
DECLARE_DELEGATE_TwoParams(FDTDGetterOptionalStringDelegate, bool, const FString&);
DECLARE_DELEGATE_TwoParams(FDTDGetterOptionalBoolDelegate, bool, bool);
DECLARE_DELEGATE_TwoParams(FDTDGetterOptionalFloatDelegate, bool, float);
DECLARE_DELEGATE_TwoParams(FDTDGetterOptionalLongDelegate, bool, int64);
DECLARE_DELEGATE_ThreeParams(FDTDGetterOptionalStringWithKeyDelegate, bool, const FString&, const FString&);
DECLARE_DELEGATE_ThreeParams(FDTDGetterOptionalBoolWithKeyDelegate, bool, const FString&, bool);
DECLARE_DELEGATE_ThreeParams(FDTDGetterOptionalFloatWithKeyDelegate, bool, const FString&, float);
DECLARE_DELEGATE_ThreeParams(FDTDGetterOptionalLongWithKeyDelegate, bool, const FString&, int64);
```

## SDK initialization

#### SDK initialization without parameters:

![Blueprint](https://2105883905-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnGcP_ZeRJ1ipj9O8dF%2Fuploads%2FutBrHZ9UbR04AzfbtpTX%2Fimage.png?alt=media\&token=1985e5a1-656c-4483-8621-87461bdfc733)

| Member         | Type    | Description                                                                                                               |
| -------------- | ------- | ------------------------------------------------------------------------------------------------------------------------- |
| ***`appKey`*** | FString | You can find it in the settings of the corresponding application in devtodev (Settings → SDK → Integration → Credentials) |

```cpp
UDTDAnalyticsBPLibrary::Initialize("AppKey");
```

#### SDK initialization with parameters:

![Blueprint](https://2105883905-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnGcP_ZeRJ1ipj9O8dF%2Fuploads%2FBxRvwN9gLzd2oQSUH3fE%2Fimage.png?alt=media\&token=f929dd90-0828-45fb-9eb3-8ccd81d62c6b)

| Member         | Type                       | Description                                                                                                               |
| -------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| ***`appKey`*** | FString                    | You can find it in the settings of the corresponding application in devtodev (Settings → SDK → Integration → Credentials) |
| ***`config`*** | FDTDAnalyticsConfiguration | Initialization parameters                                                                                                 |

```cpp
FDTDAnalyticsConfiguration config;
config.LogLevel = EDTDLogLevel::Debug;
config.CurrentLevel = 3;
config.UserId = FString("CUID");
config.ApplicationVersion = FString("1.2.3");
config.TrackingAvailability = EDTDTrackingStatus::Enable;
UDTDAnalyticsBPLibrary::InitializeWithConfig("AppKey", config);
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.devtodev.com/~/changes/KHSfVuDz62f75T3NzrM9/in-developing/integration-of-sdk/sdk-integration/unreal-engine.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
