Перейти к содержимому

Руководство · Android (Kotlin)

Добавьте партнёрскую или реферальную программу в своё Android-приложение.

InfluTo Android SDK написан для Kotlin и корутин. Он показывает, какой автор привёл установку, принимает реферальные коды, которые вводит пользователь, и проверяет каждую покупку — через RevenueCat или напрямую из Google Play Billing.

Обновлено 1 ноября 2026 г.

Коротко

Подключите to.influ:android-sdk из Maven Central, один раз вызовите InfluTo.initialize в Application.onCreate (это suspend-функция), затем checkAttribution и identifyUser. С RevenueCat в коде больше ничего подключать не нужно: SDK сам находит RevenueCat и помечает подписчика. Без RevenueCat добавьте to.influ:android-sdk-billing: он подтягивает Play Billing Library 9.0.0, сам фиксирует покупки и принимает покупки из вашего PurchasesUpdatedListener. Нужны minSdk 24 и Java 17. Закладывайте один вечер, большая часть уйдёт на покупки.

Шаг 1: добавьте нужные артефакты

SDK разделён на три артефакта в Maven Central, все одной версии, поэтому в репозиториях должен быть mavenCentral(). Добавляйте только нужное: каждое дополнение тянет за собой основной модуль, а основной и billing-артефакты поставляются со своими правилами R8/ProGuard.

// build.gradle.kts
dependencies {
    implementation("to.influ:android-sdk:1.1.1")
    // optional: Compose code field (InfluToReferralCodeInput)
    implementation("to.influ:android-sdk-ui:1.1.1")
    // optional: store-direct purchase auto-capture
    implementation("to.influ:android-sdk-billing:1.1.1")
}
АртефактКогда добавлятьЧто даёт
android-sdkВсегдаСам SDK; добавляет разрешение INTERNET
android-sdk-uiНужно готовое поле для кода на ComposeInfluToReferralCodeInput (Material 3)
android-sdk-billingПриложение работает напрямую с магазином (без RevenueCat)Автоматический учёт покупок; добавляет Google Play Billing Library 9.0.0 (billing-ktx) и разрешение com.android.vending.BILLING

Шаг 2: инициализация в Application.onCreate

initialize — suspend-функция. Вызовите её один раз при запуске и дождитесь результата: пока она не завершится успешно, checkAttribution и reportPurchase выбрасывают InfluToError.NotInitialized. При сбое (неверный ключ, нет сети) она выбрасывает исключение: перехватите его, запишите в лог и продолжайте работу.

Используйте Application.onCreate или область видимости на уровне приложения, а не onCreate активности: он срабатывает заново при каждой смене конфигурации. Не в корутине? У каждого сетевого метода есть вариант с колбэком. Колбэки выполняются в фоновом потоке, поэтому перед работой с UI переключитесь на главный поток.

API-ключ (it_…, в разделе Setup & SDK) подходит и для разработки, и для продакшена. Храните его в поле BuildConfig, которое заполняется из свойства Gradle в local.properties или из секретов CI. Типичный запуск в приложении с RevenueCat:

class MyApp : Application() {
    private val appScope = MainScope()

    override fun onCreate() {
        super.onCreate()
        // RevenueCat apps: configure it first
        Purchases.configure(PurchasesConfiguration.Builder(this, "goog_…").build())

        appScope.launch {
            try {
                InfluTo.initialize(this@MyApp, InfluToConfig(
                    apiKey = BuildConfig.INFLUTO_API_KEY,
                    appVersion = BuildConfig.VERSION_NAME,
                ))
            } catch (e: Exception) {
                Log.w("InfluTo", "initialize failed", e) // retried on the next launch
                return@launch
            }
            val attribution = InfluTo.checkAttribution()
            InfluTo.identifyUser(Purchases.sharedInstance.appUserID)
        }
    }
}

Шаг 3: реферальные коды и поле на Compose

applyCode(code) — suspend-вызов: он проверяет код и применяет его, если код действителен. У кодов обрезаются пробелы и все буквы становятся заглавными. Недействительный код возвращает valid = false и errorCode: INVALID_FORMAT, CODE_NOT_FOUND, CODE_EXPIRED, NETWORK_ERROR или UNKNOWN.

С android-sdk-ui InfluToReferralCodeInput — это composable на Material 3: он проверяет код по мере ввода, применяет его по нажатию, подставляет код при установке по ссылке и принимает ваши переведённые тексты. Имя автора он показывает, только если включить showReferrerName.

Шаг 4: подключите покупки

InfluTo платит комиссию только за покупки, подтверждённые магазином. Выберите один путь для Android:

  • RevenueCat: в коде подключать нечего. Когда находится реферал или применяется код, SDK находит RevenueCat SDK и задаёт influto_code и influto_referral; чтобы указать это явно, передайте revenueCatAttributeSetter. Сначала настройте RevenueCat и не добавляйте android-sdk-billing.

  • Напрямую с магазином (Play Billing): добавьте android-sdk-billing. В таком приложении initialize запускает наблюдатель со своим соединением Play Billing: он сообщает о новых покупках и при каждом запуске проверяет уже существующие. Отправляются только покупки со статусом PURCHASED, каждая один раз, по purchase token.

Для разовых и расходуемых продуктов нужны productId, а также price и currency: без productId покупка проверяется как подписка и не проходит, а без price записывается как 0 $. Перечислите такие продукты в oneTimeProductIds, и автоматический учёт добавит оба поля. Ответ 409 означает, что разовая покупка ещё не завершена.

В большинстве приложений есть свой BillingClient. Передавайте каждую покупку модулю и из своего PurchasesUpdatedListener, чтобы она ушла в момент совершения. Дедупликация общая, поэтому ничего не отправится дважды:

override fun onPurchasesUpdated(result: BillingResult, purchases: MutableList<Purchase>?) {
    if (result.responseCode != BillingClient.BillingResponseCode.OK || purchases == null) return
    scope.launch {
        for (purchase in purchases) {
            InfluToBilling.report(context, purchase) // subscriptions
            // one-time products: InfluToBilling.report(context, purchase, oneTime = true, price = 4.99, currency = "EUR")
        }
    }
}

Шаг 5: добавьте сервисный аккаунт Google Play

Для прямой работы с магазином нужен доступ на чтение к Google Play Developer API. InfluTo только читает данные и ничего не меняет в вашей Play Console.

  1. 1

    Включите API. В Google Cloud включите Google Play Android Developer API и создайте сервисный аккаунт с ключом в формате JSON.

  2. 2

    Выдайте доступ в Play Console. В разделе «Пользователи и разрешения» пригласите email сервисного аккаунта и выдайте ему для приложения право «Просмотр финансовой информации, заказов и ответов на опросы об отмене подписки».

  3. 3

    Загрузите, проверьте, переключите. Загрузите JSON-ключ в разделе «Настройки → Проверка» и нажмите «Сохранить и проверить». Когда проверка станет зелёной, выберите для Android вариант «Google — напрямую».

Новые разрешения Google могут доходить до API до 48 часов, и всё это время InfluTo показывает статус «применяется». Пока вы не переключились, отчёты о покупках получают ответ 400, так что SDK можно безопасно выпустить раньше.

Шаг 6: проверьте на тестировщике лицензий

Тестовые покупки не перемещают деньги и не влияют на вашу статистику:

  1. 1

    Имитируйте покупку. Кнопка «Имитировать покупку» в разделе «Настройка и SDK» отправляет тестовую sandbox-покупку через настоящий конвейер InfluTo. Введите один из своих кодов и посмотрите, как он сработает.

  2. 2

    Установите приложение по реферальной ссылке. Присоединитесь к своей кампании со второго аккаунта автора, откройте его ссылку на тестовом устройстве, установите тестовую сборку и запустите её. Ввод кода вручную — самый надёжный способ проверки.

  3. 3

    Купите как тестировщик лицензий. Совершите покупку в Google Play как тестировщик лицензий. В журнале интеграции, переключённом на Sandbox, будет видно покупку, привязанную к вашему коду. При debug = true SDK пишет каждый шаг в Logcat с тегом InfluTo.

clearAttribution() сбрасывает состояние устройства для нового прогона. Чище всего начать заново, очистив данные приложения или переустановив его.

Особенности Android

Несколько деталей платформы:

  • Сначала корутины. Сетевые методы — это suspend-функции. getReferralCode(), getPrefilledCode() и clearAttribution() — обычные функции.

  • Разрешения. Ядро добавляет INTERNET, а android-sdk-billing добавляет com.android.vending.BILLING. В документации по конфиденциальности описано, что указать в форме Play «Безопасность данных».

  • Версия Play Billing. android-sdk-billing использует Play Billing Library 9.0.0. Gradle подбирает версию вместе с вашей собственной зависимостью Billing.

  • Без рекламного идентификатора. InfluTo не использует рекламный идентификатор, не отслеживает пользователей между приложениями и никогда не сопоставляет их по характеристикам устройства.

Или поручите это ИИ-агенту

Подключите MCP-сервер InfluTo к Claude Code, Codex или Cursor и попросите выполнить интеграцию. Агент напишет строки для Gradle и код запуска, даст ссылку, чтобы вы сами загрузили JSON сервисного аккаунта, проверит учётные данные и подтвердит тестовую покупку с атрибуцией.

Партнёрский SDK для Android: ответы на вопросы.

Есть ли партнёрский SDK для Android-приложений на Kotlin?

Да. Пакет to.influ:android-sdk в Maven Central (лицензия MIT, исходники на github.com/influto/influto-android) добавляет в нативные Android-приложения определение установок по рекомендации, реферальные коды и привязку покупок. Нужны minSdk 24 и Java 17, а ядро зависит только от kotlinx-coroutines.

Нужна ли мне Google Play Billing Library?

Только при прямой работе с магазином. android-sdk-billing добавляет Play Billing Library 9.0.0 (billing-ktx) и разрешение BILLING. Приложениям с RevenueCat хватает одного ядра SDK.

Работает ли это с RevenueCat на Android?

Да. SDK сам находит RevenueCat SDK и записывает influto_code и influto_referral в профиль подписчика. Либо вы явно передаёте revenueCatAttributeSetter. Дальше вебхук RevenueCat отправляет в InfluTo каждую покупку, продление и возврат.

Поддерживаются ли расходуемые и разовые покупки?

Да. Перечислите их ID продуктов в oneTimeProductIds, чтобы перехваченные покупки проверялись как разовые. Если ваш код биллинга не отдаёт цену, передавайте покупки вместе с ценой и валютой. Возвраты за разовые покупки в Google Play определяются, и комиссия отменяется.

Сколько это стоит?

0 $ в месяц. За каждую проверенную покупку вы платите установленную вами комиссию плюс 10% от той же выручки (7%, 5% или 3% при больших объёмах). Предоплаченный баланс начинается с 50 $ и возвращается. InfluTo выплачивает авторам ежемесячно через Stripe Connect в 33 странах, как только они заработают 20 $.

Добавьте реферальные коды в следующий релиз.

Одна строка Gradle, один путь проверки, возвращаемый депозит. 0 $ в месяц, а 10% — только с выручки, которую приводят авторы.

Начать бесплатно