Документация GameDevPartner SDK
Unity SDK v2.6.5 — интеграция за 10 минут
Обзор
SDK отслеживает:
- Установки (атрибуция по реферальным ссылкам)
- Покупки в игре (IAP) с серверной валидацией
- Рекламный доход (rewarded / interstitial / banner)
Платформа по этим данным определяет, какой инфлюенсер привёл игрока, и начисляет ему долю с дохода.
1. Установка через Unity Package Manager
Первая установка:
// Unity Editor: // 1. Window → Package Manager // 2. + → Add package from git URL... // 3. Вставить и нажать Add: https://gitlab.com/nonstop1899/gamedevpartner-unity-sdk.git // Или в Packages/manifest.json: "com.gamedevpartner.sdk": "https://gitlab.com/nonstop1899/gamedevpartner-unity-sdk.git"
Обновление — НЕ через кнопку "Update"
Unity Package Manager часто кэширует git-пакеты по старому commit hash. Кнопка "Update" может не подтянуть новый код. Делайте полный ресет:
- Package Manager → GameDevPartner SDK → Remove
- Закрыть Unity
- Удалить вручную папки
<project>/Library/PackageCache/com.gamedevpartner.sdk@* - Открыть Unity, дождаться рекомпиляции
- Package Manager → + → Add package from git URL → вставить URL заново → Add
Требования
- Unity 2020.3 или новее
- Других Unity-пакетов не требуется
- Unity IAP — опционально. Если установлен (
com.unity.purchasing), SDK подхватит и соберёт дополнительную суб-сборкуGameDevPartner.SDK.IAPс классомGDPUnityIAP. Если не установлен — суб-сборка игнорируется Unity целиком черезdefineConstraints, ошибок нет, менюWindow → GameDevPartnerработает как обычно.
Проверка успешной установки
- В консоли нет ошибок из
Library/PackageCache/com.gamedevpartner.sdk@... - В меню есть пункт
Window → GameDevPartner → Settings - При открытии Settings виден ScriptableObject с полем "API Key"
Если меню Window → GameDevPartner не появилось — значит runtime-ассембли не собралась. Найдите в консоли первую ошибку из папки пакета (Library/PackageCache/com.gamedevpartner.sdk@...). Ошибки о GUID в .meta-файлах ваших ассетов (Assets/Modeling/..., Assets/Textures/...) — не относятся к SDK, игнорируйте их. Если ошибки SDK есть — сделайте полный ресет по шагам выше.
2. Настройка API Key
// 1. Window → GameDevPartner → Settings // 2. Вставить API Key из ЛК: // gamedevpartner.ru → Мои игры → карточка игры → "API-ключ" // 3. Region: RU (для России) или World // 4. Auto Identify Player: ON (рекомендуется — идентификация по device ID) // 5. Debug Mode: ON при разработке, OFF в продакшене // // SDK инициализируется автоматически через [RuntimeInitializeOnLoadMethod]. // Никаких Init() вызовов в коде не требуется.
3. Трекинг покупок
Одна строка для Unity IAP — автоматический трекинг всех покупок:
using GameDevPartner.SDK; // БЫЛО: UnityPurchasing.Initialize(this, builder); // СТАЛО: GDPUnityIAP.Initialize(this, builder); // Всё. Каждая успешная покупка через Google Play / App Store // автоматически отправляется в GameDevPartner с правильным // TransactionId, Amount, Currency и ReceiptData.
Для других платёжных систем (YooKassa, TBank, RuStore, веб) — ручной вызов:
using GameDevPartner.SDK;
// В callback успешной оплаты:
GameDevPartnerSDK.TrackPurchase(new PurchaseEvent {
ProductId = "gem_pack_100",
Amount = 99f, // цена без вычета комиссии магазина
Currency = "RUB", // ISO 4217
Source = PaymentSource.YooKassa, // см. таблицу ниже
TransactionId = paymentId, // уникальный ID транзакции
ReceiptData = receipt, // опционально, для валидации
});Значения PaymentSource
| Значение | Когда использовать |
|---|---|
PaymentSource.GooglePlay | Google Play Billing (Unity IAP ставит автоматически) |
PaymentSource.Apple | Apple StoreKit (Unity IAP ставит автоматически) |
PaymentSource.YooKassa | ЮKassa SDK |
PaymentSource.TBank | ТБанк / Тинькофф |
PaymentSource.RuStore | RuStore Billing |
PaymentSource.Web | Веб-оплата (Stripe, PayPal) |
PaymentSource.Other | Любой другой провайдер |
4. Трекинг рекламного дохода
Один универсальный метод с позиционными аргументами (нет класса AdRevenueEvent):
GameDevPartnerSDK.TrackAdRevenue(
double revenue, // доход за показ; 0 — для Unity Ads standard (см. ниже)
string currency, // "USD" / "RUB" / ISO 4217
string adType, // "rewarded" | "interstitial" | "banner"
string adNetwork, // строка (не enum): "yandex_ads" | "unity_ads" | "admob"
// "ironsource" | "applovin" | "other"
string adUnitId // опционально, ID рекламного блока
);1. Сети с ILAR (AppLovin MAX, IronSource/LevelPlay, AdMob, Yandex с медиацией) — передавайте реальный revenue из callback показа. Данные приходят в реальном времени.
2. Unity Ads standard SDK (без LevelPlay) — revenue в callback не приходит. Передавайте revenue=0, а платформа каждую ночь в 01:15 МСК сама импортирует точный доход через Unity Monetization Stats API и распределит по показам. Для этого разработчик подключает Unity Ads в ЛК (см. раздел 5).
Примеры по сетям
// ═══ Yandex Ads (с медиацией) — Android ═══
rewardedAd.OnAdImpression += (sender, data) => {
var json = JsonUtility.FromJson<ImpressionJson>(data.rawData);
GameDevPartnerSDK.TrackAdRevenue(
json.revenue, json.currency, "rewarded", "yandex_ads", adUnitId);
};
// ═══ AppLovin MAX ═══
MaxSdkCallbacks.Rewarded.OnAdRevenuePaidEvent += (id, info) =>
GameDevPartnerSDK.TrackAdRevenue(
info.Revenue, "USD", "rewarded", "applovin", id);
// ═══ IronSource (LevelPlay) ═══
IronSourceEvents.onImpressionDataReadyEvent += (data) =>
GameDevPartnerSDK.TrackAdRevenue(
data.revenue ?? 0, "USD", data.adUnit, "ironsource");
// ═══ AdMob (value в micros — делим на 1 000 000) ═══
rewardedAd.OnAdPaid += (adValue) =>
GameDevPartnerSDK.TrackAdRevenue(
adValue.Value / 1000000.0, adValue.CurrencyCode, "rewarded", "admob", adUnitId);
// ═══ Unity Ads standard SDK (БЕЗ LevelPlay) ═══
// ВАЖНО: в стандартном Unity Ads SDK revenue в callback не отдаётся.
// Подключите Unity Ads в ЛК (см. раздел 5). Передавайте revenue=0 — это
// нужно, чтобы привязать показ к конкретному игроку.
public class AdController : MonoBehaviour, IUnityAdsShowListener {
public void OnUnityAdsShowComplete(string placementId, UnityAdsShowCompletionState state) {
if (state == UnityAdsShowCompletionState.COMPLETED) {
GameDevPartnerSDK.TrackAdRevenue(0, "USD", "rewarded", "unity_ads", placementId);
}
}
}TrackAdRevenue в callback каждой сети с правильным adNetwork. Платформа сама определит ОС, а название сети задаёте вы.5. Подключение Reporting API сетей в ЛК
Для каждой сети, которая не отдаёт revenue через SDK, платформа ночью тянет доход из Reporting API самой сети. Разработчик подключает его один раз: ЛК → Мои игры → разверните карточку игры → секция «Рекламные сети».
| Сеть | Что вставить | Где взять |
|---|---|---|
| Unity Ads | Organization Core ID, Monetization Stats API Key, Game IDs (Android+iOS через запятую) | Unity Dashboard → Organization Settings → Organization core ID Monetization → Setup → API Management → Monetization Stats API Access Projects → Game ID каждой платформы |
| AppLovin MAX | Report API Key, Package Name (опционально) | MAX Dashboard → Account → Keys → Report Key |
| IronSource / LevelPlay | Secret Key, Refresh Token, App Key (опционально) | IronSource → My Account → API |
Поля "опционально" (Package Name / App Key / Game IDs) — это фильтр "только эта игра". Крайне рекомендуется заполнять, иначе Reporting API суммирует доход по всем играм аккаунта разработчика, что испортит атрибуцию.
6. Серверная валидация покупок
Для серверной валидации чеков платформе нужны ключи платёжных систем. Подключение: ЛК → Мои игры → раздел "Платёжные системы".
| Система | Что нужно | Где получить |
|---|---|---|
| Google Play | Service Account JSON | Google Cloud Console → Service Accounts |
| Apple | Issuer ID, Key ID, Private Key (.p8) | App Store Connect → Keys |
| ЮKassa | Shop ID, Secret Key | Личный кабинет ЮKassa |
| ТБанк | Terminal Key, Secret Key | ТБанк Бизнес |
| RuStore | Company ID, Key ID, Private Key | RuStore Console |
7. Gradle (Android) — улучшает атрибуцию
// В Plugins/Android/mainTemplate.gradle добавить в dependencies: implementation 'com.android.installreferrer:installreferrer:2.2'
Без этой зависимости атрибуция работает, но с меньшей точностью — через GAID / device fingerprint вместо Install Referrer API.
8. Как работает атрибуция
- Install Referrer API (Google Play, RuStore) — 100% точность, главный метод
- GAID (Android) / IDFV (iOS) — высокая точность, fallback
- Device Fingerprint (IP + UserAgent) — fallback последней инстанции
Окно атрибуции — 7 дней с момента клика по ссылке инфлюенсера. После привязки игрок закреплён за инфлюенсером пожизненно.
9. Безопасность
- Все запросы автоматически подписываются HMAC-SHA256 (timestamp + тело + API key)
- Два режима: Live (боевой) и Test (без реальных выплат)
- API-ключи хранить в Unity Settings (ScriptableObject), не коммитить в Git
- Антифрод блокирует подозрительные установки автоматически
10. Чего НЕ делать
- Не вызывайте
IdentifyPlayer(), если включён Auto Identify - Не трекайте одну покупку дважды — SDK дедуплицирует по
TransactionId - Не выпускайте билд с тестовым API-ключом
- Не включайте комиссию магазина в
Amount— передавайте gross-цену - Не придумывайте revenue для Unity Ads standard — передавайте 0
- Не пишите
new AdRevenueEvent { ... }— такого класса нет, аргументы позиционные - Не пишите
AdNetwork.Something— параметрadNetworkэто строка - Не ссылайтесь на
ImpressionEventPublisher/data.revenueдля Unity Ads standard — этого в SDK нет (есть только в LevelPlay, а это другой SDK)
11. Чеклист интеграции
- SDK установлен через UPM, проект компилируется без ошибок
- Window → GameDevPartner → Settings появился, API Key вставлен
- Покупки трекаются (либо
GDPUnityIAP.Initialize, либо ручныеTrackPurchase) - В каждом callback показа рекламы вызывается
TrackAdRevenueс правильной строкойadNetwork - Для Unity Ads standard: передаётся
revenue=0+ в ЛК подключены Core ID + Stats API Key + Game IDs - Gradle
installreferrer:2.2добавлен (Android) - Платёжные системы подключены в ЛК → Платёжные системы
- В разделе Депозит внесён баланс
- Игра опубликована в каталоге
- Тестовая покупка и показ видны в ЛК → Аналитика
- Debug Mode выключен в production-сборке
12. Поддержка
- Email: support@gamedevpartner.ru
- SDK GitLab: nonstop1899/gamedevpartner-unity-sdk
- Changelog: CHANGELOG.md