Документация Unity SDK GameDevPartner — интеграция за 10 минут

Документация GameDevPartner SDK

Unity SDK v2.6.5 — интеграция за 10 минут

Нужно быстрее? Скопируйте AI-промпт в ChatGPT/Claude — нейросеть сделает интеграцию за вас.

Обзор

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" может не подтянуть новый код. Делайте полный ресет:

  1. Package Manager → GameDevPartner SDK → Remove
  2. Закрыть Unity
  3. Удалить вручную папки <project>/Library/PackageCache/com.gamedevpartner.sdk@*
  4. Открыть Unity, дождаться рекомпиляции
  5. 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 работает как обычно.

Проверка успешной установки

  1. В консоли нет ошибок из Library/PackageCache/com.gamedevpartner.sdk@...
  2. В меню есть пункт Window → GameDevPartner → Settings
  3. При открытии 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.GooglePlayGoogle Play Billing (Unity IAP ставит автоматически)
PaymentSource.AppleApple StoreKit (Unity IAP ставит автоматически)
PaymentSource.YooKassaЮKassa SDK
PaymentSource.TBankТБанк / Тинькофф
PaymentSource.RuStoreRuStore 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);
        }
    }
}
iOS vs Android могут использовать разные сети. Если на Android — Yandex, а на iOS — Unity Ads, добавляйте TrackAdRevenue в callback каждой сети с правильным adNetwork. Платформа сама определит ОС, а название сети задаёте вы.

5. Подключение Reporting API сетей в ЛК

Для каждой сети, которая не отдаёт revenue через SDK, платформа ночью тянет доход из Reporting API самой сети. Разработчик подключает его один раз: ЛК → Мои игры → разверните карточку игры → секция «Рекламные сети».

СетьЧто вставитьГде взять
Unity AdsOrganization 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 MAXReport API Key, Package Name (опционально)MAX Dashboard → Account → Keys → Report Key
IronSource / LevelPlaySecret Key, Refresh Token, App Key (опционально)IronSource → My Account → API

Поля "опционально" (Package Name / App Key / Game IDs) — это фильтр "только эта игра". Крайне рекомендуется заполнять, иначе Reporting API суммирует доход по всем играм аккаунта разработчика, что испортит атрибуцию.

6. Серверная валидация покупок

Для серверной валидации чеков платформе нужны ключи платёжных систем. Подключение: ЛК → Мои игры → раздел "Платёжные системы".

СистемаЧто нужноГде получить
Google PlayService Account JSONGoogle Cloud Console → Service Accounts
AppleIssuer ID, Key ID, Private Key (.p8)App Store Connect → Keys
ЮKassaShop ID, Secret KeyЛичный кабинет ЮKassa
ТБанкTerminal Key, Secret KeyТБанк Бизнес
RuStoreCompany ID, Key ID, Private KeyRuStore 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. Чеклист интеграции

  1. SDK установлен через UPM, проект компилируется без ошибок
  2. Window → GameDevPartner → Settings появился, API Key вставлен
  3. Покупки трекаются (либо GDPUnityIAP.Initialize, либо ручные TrackPurchase)
  4. В каждом callback показа рекламы вызывается TrackAdRevenue с правильной строкой adNetwork
  5. Для Unity Ads standard: передаётся revenue=0 + в ЛК подключены Core ID + Stats API Key + Game IDs
  6. Gradle installreferrer:2.2 добавлен (Android)
  7. Платёжные системы подключены в ЛК → Платёжные системы
  8. В разделе Депозит внесён баланс
  9. Игра опубликована в каталоге
  10. Тестовая покупка и показ видны в ЛК → Аналитика
  11. Debug Mode выключен в production-сборке

12. Поддержка