Ссылка на репозиторий
GitHub

Интеграция SDK AppsFlyer в Unreal Steam

AppsFlyer позволяет маркетологам игровых приложений принимать оптимальные решения, предоставляя высокоэффективные инструменты для кросс-платформенной атрибуции.

Для атрибуции игры в игру должен быть интегрирован SDK AppsFlyer, который записывает первое открытие, последовательные сессии и внутренние события приложения. Например, события покупки.
Мы рекомендуем использовать этот пример приложения в качестве справки по интеграции SDK AppsFlyer в свою игру для Unreal Steam. Примечание. Приведенный ниже пример кода на данный момент поддерживается только в среде Windows.


Prerequisites

  • Unreal Engine 4.2x
  • SDK Steamworks, интегрированный в ваш UE4 (обычно включен в сторонние библиотеки UE4, скачивание не требуется).
  • Установленный клиент Steam с активным пользователем.

AppsflyerSteamModule — интерфейс

AppsflyerSteamModule.h в папке appsflyer-unreal-steam-sample-app/AppsflyerSteamIntegrationFiles/AppsflyerSteamModule содержит необходимый код и логику для подключения к серверам AppsFlyer и передачи отчетов по событиям.

Init

Данный метод содержит ваш ключ API и идентификатор приложения и инициализирует модуль AppsFlyer.

Сигнатура метода

void Init(const char* devkey, const char* appID)

Usage:

AppsflyerSteamModule()->Init(<< DEV_KEY >>, << STEAM_APP_ID>>);

Arguments:

  • STEAM_APP_ID: находится в SteamDB.
  • DEV_KEY: получите у маркетолога или AppsFlyer HQ.

Start

Данный метод передает запросы «first open/session» в AppsFlyer.

Сигнатура метода

void Start(bool skipFirst = false)

Usage:

// without the flag
AppsflyerSteamModule()->Start();

// with the flag
bool skipFirst = [SOME_CONDITION];
AppsflyerSteamModule()->Start(skipFirst);

LogEvent

Этот метод получает имя события и объект JSON и отправляет внутренние события приложения в AppsFlyer.

Сигнатура метода

void LogEvent(std::string event_name, json event_parameters)

Usage:

//set event name
std::string event_name = "af_purchase";
//set json string
std::string event_parameters = "{\"af_currency\":\"USD\",\"af_price\":6.66,\"af_revenue\":24.12}";
AppsflyerSteamModule()->LogEvent(event_name, event_parameters);

GetAppsFlyerUID

Получение от AppsFlyer уникального идентификатора устройства. SDK генерирует уникальный идентификатор устройства AppsFlyer при установке приложения. При запуске SDK этот идентификатор записывается как идентификатор первой установки приложения.

Сигнатура метода

std::string GetAppsFlyerUID()

Usage:

AppsflyerSteamModule()->GetAppsFlyerUID();

IsInstallOlderThanDate

Этот метод получает строку даты и возвращает true, если дата изменения папки игры старше строки даты. Формат строки даты: "2023-January-01 23:12:34".

Сигнатура метода

bool IsInstallOlderThanDate(std::string datestring)

Usage:

// the modification date in this example is "2023-January-23 08:30:00"

// will return false
bool dateBefore = AppsflyerSteamModule()->IsInstallOlderThanDate("2023-January-01 23:12:34");

// will return true
bool dateAfter = AppsflyerSteamModule()->IsInstallOlderThanDate("2023-April-10 23:12:34");

// example usage with skipFirst -
// skipping if the install date is NOT older than the given date
bool isInstallOlderThanDate = AppsflyerSteamModule()->IsInstallOlderThanDate("2023-January-10 23:12:34");
AppsflyerSteamModule()->Start(!isInstallOlderThanDate);

Запуск примера приложения

  1. Откройте UE4 Engine.
  2. Выберите New Project (Новый проект) -> Games (Игры) -> First Person (Первый человек).
  3. Выберите C++ (вместо Blueprints).
  4. Дайте проекту имя AppsFlyerSample и нажмите Create project (Создать проект).
  5. Следуйте инструкциям по внедрению AppsFlyer в вашу игру для Steam.
  6. Запустите пример приложения из редактора UE4 Engine.
  7. Через 24 часа дэшборд обновляется и отображает органические и неорганические установки и внутренние события приложения.

Внедрение AppsFlyer в вашу игру для Steam

Setup

  1. Убедитесь, что Steam включен в сторонние библиотеки UE4. Узнать больше
  2. Добавьте следующие определения в Config/DefaultEngine.ini. Для справки см. appsflyer-unreal-steam-sample-app/AppsflyerSteamIntegrationFiles/DefaultEngine.ini file.
+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")
DefaultPlatformService=Steam
bEnabled=true
SteamDevAppId=480 //replace "480" with your steam app id.
NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection"
  1. В редакторе Unreal перейдите к плагинам, активируйте опцию Online Subsystem Steam (Онлайн-подсистема Steam) и перезапустите редактор.
  2. Откройте проект в предпочтительном редакторе C++, затем в файле [YOUR-APP-NAME].Build.cs добавьте OpenSSL, OnlineSubsystem и OnlineSubsystemSteam в свои зависимости и HTTP как частную зависимость:
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay", "OpenSSL", "OnlineSubsystem", "OnlineSubsystemSteam" });
PrivateDependencyModuleNames.Add("HTTP");
  1. В каталоге Source (Источник) в файлах проекта Unreal создайте новый каталог под именем AppsflyerSteamModule.
  2. Скопируйте следующие файлы из appsflyer-unreal-steam-sample-app/AppsflyerSteamIntegrationFiles/AppsflyerSteamModule в новую папку:
  • AppsflyerModule.cpp
  • AppsflyerSteamModule.cpp
  • AppsflyerSteamModule.h
  • DeviceID.h
  • RequestData.h
  1. Сгенерируйте файлы проекта и добавьте OpenSSL. Подробнее.
  2. В GameMode.h добавьте StartPlay() function:
UCLASS(minimalapi)
class AAppsFlyerSampleGameMode : public AGameModeBase
{
 GENERATED_BODY()

public:
 AAppsFlyerSampleGameMode();
 virtual void StartPlay() override;
};

  1. Откройте папку Source/AppsFlyerSample/AppsFlyerSampleGameMode.cpp и добавьте следующий оператор include в свой GameMode.cpp file:
#include "AppsflyerSteamModule/AppsflyerSteamModule.cpp"
  1. Добавьте следующую функцию, заменив DEV_KEY and STEAM_APP_ID in the init данными своего приложения:
void AAppsFlyerSampleGameMode::StartPlay()
{
 Super::StartPlay();
 if (SteamAPI_Init()) {
  // init the AF module
  AppsflyerSteamModule()->Init(<< DEV_KEY >>, << STEAM_APP_ID>>)

  // check whether the install date was not older than 2023-January-02 23:12:34
  bool isInstallOlderThanDate = AppsflyerSteamModule()->IsInstallOlderThanDate("2023-January-02 23:12:34");

  // send the firstOpen/session event (if the install date is not older than the given date, the AF module will skip the first-open event)
  AppsflyerSteamModule()->Start(!isInstallOlderThanDate);

  // Use the following code to send in-app event
  // set event name
  std::string event_name = "af_purchase";
  // set json string
  std::string event_parameters = "{\"af_currency\":\"USD\",\"af_price\":6.66,\"af_revenue\":24.12}";
  AppsflyerSteamModule()->LogEvent(event_name, event_parameters);
 }
}
  1. Инициализируйте и запустите интеграцию AppsFlyer.
  2. Подайте отчет о внутренних событиях приложения.

Adding SteamVR Support

Please use the following guide in order to integrate your steam game with MetaXR

Удаление сохранений Steam Cloud (сброс атрибуции)

  1. Выключите Steam Cloud.
  2. Delete the local files and the appsflyer_info file:

Delete the