Unreal Steam
Ссылка на репозиторий
GitHub
Интеграция SDK AppsFlyer в Unreal Steam
AppsFlyer позволяет маркетологам игровых приложений принимать оптимальные решения, предоставляя высокоэффективные инструменты для кросс-платформенной атрибуции.
Game attribution requires the game to integrate the AppsFlyer SDK that records first opens, consecutive sessions, and in-app events. For example, purchase events.
We recommend you use this sample app as a reference for integrating the AppsFlyer SDK into your Unreal Steam game.
Note: The sample code that follows is currently only supported in a Windows environment.
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, bool collectSteamUid = true)
Arguments:
string DEV_KEY
: получите у маркетолога или AppsFlyer HQ.string STEAM_APP_ID
: находится в SteamDB.bool collectSteamUid
: Whether to collect Steam UID or not. True by default.
Usage:
// for regular init
AppsflyerSteamModule()->Init(<< DEV_KEY >>, << STEAM_APP_ID >>);
// for init without reporting steam_uid
AppsflyerSteamModule()->Init(<< DEV_KEY >>, << STEAM_APP_ID >>, false);
`
Start
Данный метод передает запросы «first open/session» в AppsFlyer.
Сигнатура метода
void Start(bool skipFirst = false)
Аргументы
bool skipFirst
: Determines whether or not to skip first open events and send session events. The value is false by default. If true , first open events are skipped and session events are sent. See example
Usage:
// without the flag
AppsflyerSteamModule()->Start();
// with the flag
bool skipFirst = [SOME_CONDITION];
AppsflyerSteamModule()->Start(skipFirst);
Stop
This method stops the SDK from functioning and communicating with AppsFlyer servers. It's used when implementing user opt-in/opt-out.
Сигнатура метода
void Stop()
Usage:
// Starting the SDK
AppsflyerSteamModule()->Start();
// ...
// Stopping the SDK, preventing further communication with AppsFlyer
AppsflyerSteamModule()->Stop();
LogEvent
Этот метод получает имя события и объект JSON и отправляет внутренние события приложения в AppsFlyer.
Сигнатура метода
void LogEvent(std::string event_name, std::string event_values, std::string custom_event_values = "")
Аргументы
std::string event_name
-std::string event_parameters
: dictionary object which contains the predefined event parameters.std::string event_custom_parameters
(non-mandatory): dictionary object which contains the any custom event parameters. For non-English values, please use UTF-8 encoding.
Usage:
// Setting the event parameters json string and event name
std::string event_name = "af_purchase";
std::string event_parameters = "{\"af_currency\":\"USD\",\"af_revenue\":24.12}";
// Send the InApp event request
AppsflyerPCModule()->LogEvent(event_name, event_parameters);
// Set non-English values for testing UTF-8 support
std::wstring ws = L"車B1234 こんにちは";
std::wstring ws2 = L"新人邀约购物日";
std::string event_custom_parameters = "{\"goodsName\":\"" + AppsflyerPCModule()->to_utf8(ws) + "\",\"goodsName2\":\"" + AppsflyerPCModule()->to_utf8(ws2) + "\"}";
// Send inapp event with custom params
AppsflyerPCModule()->LogEvent(event_name, event_parameters, event_custom_parameters);
SetCustomerUserId
This method sets a customer ID that enables you to cross-reference your unique ID with the AppsFlyer unique ID and other device IDs. Note: You can only use this method before calling Start()
.
The customer ID is available in raw data reports and in the postbacks sent via API.
Сигнатура метода
void SetCustomerUserId(std::string cuid)
Arguments:
std::string cuid
: Custom user id.
Usage:
AppsflyerSteamModule()->Init(DEV_KEY, STEAM_APP_ID);
AppsflyerSteamModule()->SetCustomerUserId("Test-18-9-23");
AppsflyerSteamModule()->Start();
To_utf8
This method receives a reference of a std::wstring
and returns UTF-8 encoded std::string
Сигнатура метода
std::string to_utf8(std::wstring& wide_string);
Usage:
// Set non-English values for testing UTF-8 support
std::wstring ws = L"車B1234 こんにちは";
std::wstring ws2 = L"新人邀约购物日";
std::string event_custom_parameters = "{\"goodsName\":\"" + AppsflyerPCModule()->to_utf8(ws) + "\",\"goodsName2\":\"" + AppsflyerPCModule()->to_utf8(ws2) + "\"}";
OnCallbackSuccess, OnCallbackFailure
Приведенные выше методы являются заполнителями желаемый действий в случае успеха/неудачи.
Для обработки событий различного типа можно использовать оператор switch case контекста внутри каждой функции. (“FIRST_OPEN_REQUEST”, ”SESSION_REQUEST”, ”INAPP_EVENT_REQUEST”).
Сигнатура метода
void OnCallbackSuccess(long responseCode, uint64 context)
void OnCallbackFailure(long responseCode, uint64 context)
GetAppsFlyerUID
Получение от AppsFlyer уникального идентификатора устройства. SDK генерирует уникальный идентификатор устройства AppsFlyer при установке приложения. При запуске SDK этот идентификатор записывается как идентификатор первой установки приложения.
Сигнатура метода
std::string GetAppsFlyerUID()
Usage:
AppsflyerSteamModule()->GetAppsFlyerUID();
IsInstallOlderThanDate
Этот метод получает строку даты и возвращает true, если дата изменения папки игры старше строки даты. Формат строки даты: "2023-January-01 23:12:34".
Сигнатура метода
bool IsInstallOlderThanDate(std::string datestring)
Arguments:
std::string datestring
: Date string inyyyy-mm-ddThh:mm:ss+hh:mm
format.
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);
Запуск примера приложения
- Откройте UE4 Engine.
- Выберите New Project (Новый проект) -> Games (Игры) -> First Person (Первый человек).
- Выберите C++ (вместо Blueprints).
- Дайте проекту имя
AppsFlyerSample
и нажмите Create project (Создать проект). - Следуйте инструкциям по внедрению AppsFlyer в вашу игру для Steam.
- Запустите пример приложения из редактора UE4 Engine.
- Через 24 часа дэшборд обновляется и отображает органические и неорганические установки и внутренние события приложения.
Внедрение AppsFlyer в вашу игру для Steam
Setup
- Убедитесь, что Steam включен в сторонние библиотеки UE4. Узнать больше
- Добавьте следующие определения в
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"
- В редакторе Unreal перейдите к плагинам, активируйте опцию Online Subsystem Steam (Онлайн-подсистема Steam) и перезапустите редактор.
- Откройте проект в предпочтительном редакторе 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");
- В каталоге Source (Источник) в файлах проекта Unreal создайте новый каталог под именем AppsflyerSteamModule.
- Скопируйте следующие файлы из
appsflyer-unreal-steam-sample-app/AppsflyerSteamIntegrationFiles/AppsflyerSteamModule
в новую папку:
- AppsflyerModule.cpp
- AppsflyerSteamModule.cpp
- AppsflyerSteamModule.h
- DeviceID.h
- RequestData.h
- Сгенерируйте файлы проекта и добавьте OpenSSL. Подробнее.
- В
GameMode.h
добавьтеStartPlay() function
:
UCLASS(minimalapi)
class AAppsFlyerSampleGameMode : public AGameModeBase
{
GENERATED_BODY()
public:
AAppsFlyerSampleGameMode();
virtual void StartPlay() override;
};
- Откройте папку
Source/AppsFlyerSample/AppsFlyerSampleGameMode.cpp
и добавьте следующий оператор include в свойGameMode.cpp
file:
#include "AppsflyerSteamModule/AppsflyerSteamModule.cpp"
- Добавьте следующую функцию, заменив
DEV_KEY
andSTEAM_APP_ID
in theinit
данными своего приложения:
void AAppsFlyerSampleGameMode::StartPlay()
{
Super::StartPlay();
if (SteamAPI_Init()) {
// init the AF module
AppsflyerSteamModule()->Start();
// set event name
std::string event_name = "af_purchase";
// set json string
std::string event_parameters = "{\"af_currency\":\"USD\",\"af_revenue\":24.12}";
// af send inapp event
AppsflyerSteamModule()->LogEvent(event_name, event_parameters);
// set non-English values for testing UTF-8 support
std::wstring ws = L"車B1234 こんにちは";
std::wstring ws2 = L"新人邀约购物日";
std::string event_custom_parameters = "{\"goodsName\":\"" + AppsflyerSteamModule()->to_utf8(ws) + "\",\"goodsName2\":\"" + AppsflyerSteamModule()->to_utf8(ws2) + "\"}";
// af send inapp event with custom params
AppsflyerSteamModule()->LogEvent(event_name, event_parameters, event_custom_parameters);
}
}
- Инициализируйте и запустите интеграцию AppsFlyer.
- Подайте отчет о внутренних событиях приложения.
Adding SteamVR Support
Please use the following guide in order to integrate your steam game with MetaXR
Удаление сохранений Steam Cloud (сброс атрибуции)
- Выключите Steam Cloud.
- Delete the local files and the
appsflyer_info
file:
Изменения сохранены 8 месяцев назад