Unolink SDK

Ссылки показывают, кто нажал. SDK показывает, что было дальше: установки, онбординг, просмотры пейволла, регистрации, пробные периоды и покупки, по каждой ссылке и кампании. А на Android он ещё и открывает приложение на нужном экране после установки по ссылке.

У него открытый исходный код, подключение занимает около пяти минут, и он доступен на тарифе Pro и выше.

  • Android: Kotlin или Java, Android 6.0+.
  • iOS: Swift или Objective-C, iOS 13+.
  • React Native и Expo: React Native 0.79+, dev-сборки Expo.
  • Flutter: Flutter 3.22+, Android и iOS.

Исходный код: github.com/unolink-dev/unolink-sdk.

Быстрый старт

Выберите платформу. Выполните шаги сами или скопируйте один промпт в своего ИИ-ассистента. Внутри панели (приложение → SDK) те же шаги содержат ваш настоящий ключ, а проверка статуса становится зелёной, когда приходит ваша первая установка. Здесь показывается демо.

Android 6.0+ (minSdk 23)Язык Kotlin или JavaИсточник Maven CentralВаш ключ ulk_…в приложении → Настройки
  1. Шаг 1: Установите пакет

    app/build.gradle.kts → dependencies { }

    Maven Central уже есть в каждом новом Android-проекте, так что этой одной строки достаточно. Затем синхронизируйте Gradle.

    dependencies {
        
  2. Шаг 2: Запустите его с вашим ключом

    Ваш класс Application → onCreate()

    Настройте один раз, до всего остального. Ещё нет класса Application? Создайте этот и добавьте android:name=".MyApp" в <application> в AndroidManifest.xml.

    class MyApp : Application() {
        override fun onCreate() {
            super.onCreate()
            Unolink.configure(this, "ulk_…")
        }
    }
  3. Шаг 3: Отметьте шаги воронки

    Одна строка в каждый важный момент. Из них складываются шаги «Воронки» и «Путей».

    Unolink.onboardingStep("goal")   // as each onboarding screen appears
    Unolink.onboardingCompleted()
    Unolink.paywallViewed("onboarding")
    Unolink.signUp("email")   // a new account
    Unolink.signIn("apple")   // a returning user signed in
    Unolink.signUpSkipped()   // "continue as guest"
    Unolink.connectRevenueCat { Purchases.sharedInstance.appUserID }   // with RevenueCat, once
    Unolink.setUserId(user.id)   // without RevenueCat
    onboardingStep(step)Вкладка «Онбординг»При появлении каждого экрана онбординга (не по его кнопке). Показывает, на каком экране люди уходят. Бесплатно: не входит в ваши события SDK.
    onboardingCompleted()ОнбордингСразу после последнего экрана онбординга, до пейволла или регистрации, которые идут за ним
    paywallViewed(placement)ПейволлКаждый раз, когда появляется пейволл. Placement указывает, какой именно («onboarding», «settings»…)
    signUp(method)РегистрацияСразу после создания нового аккаунта
    signIn(method)ВернувшиесяКогда кто-то входит в уже существующий аккаунт (SDK 0.3.0+)
    signUpSkipped()Продолжили как гостьКогда кто-то нажимает «продолжить как гость» вместо создания аккаунта (SDK 0.3.2+)
    connectRevenueCat { } / setUserId(id)Связывает покупкиС RevenueCat: connectRevenueCat, один раз при запуске (SDK 0.3.2+), поддерживает актуальный app user ID RevenueCat, включая гостей. Иначе setUserId с вашим собственным ID пользователя, null при выходе
    Используете RevenueCat? Подключите его в «Настройки» → RevenueCat, вызывайте connectRevenueCat вместо setUserId (SDK 0.3.2+) и не добавляйте вызовы для пробных периодов и покупок. Пробные периоды, покупки, продления и возвраты придут сами.
  4. Шаг 4: Открывайте диплинки из ваших ссылок

    Ваша первая Activity или место, где вы управляете навигацией

    Когда кто-то устанавливает приложение по ссылке с диплинком, Unolink передаёт его вам при первом запуске. Отправьте человека сразу туда.

    Unolink.setDeferredDeepLinkListener { link ->
        // link.deepLink = "/promo/3for2", link.params["offer"] = "3for2"
        navigate(link.deepLink)
        Unolink.consumeDeferredDeepLink()
    }
  5. Шаг 5: Проверьте, что всё работает

    Запустите debug-сборку на телефоне или эмуляторе и один раз откройте приложение. Через несколько секунд проверка станет зелёной.

    • Debug-сборки и эмуляторы считаются тестовыми устройствами: включите Учитывать тестовые устройства в «Воронке» и «Путях», чтобы их увидеть.
    • Ничего не появляется? Настройте с UnolinkOptions(logLevel = LogLevel.DEBUG) и ищите Unolink в логах.
Что происходит после релиза
Ждём первую установку…
Установки0
Онбординг0
Пейволл0
Регистрация0
Пробный0

Как это работает

  1. Вы создаёте ключ SDK в панели: приложение → Настройки → Ключи SDK → Новый ключ. Ключ публичный: он поставляется внутри вашего приложения и может отправлять данные только для этого одного приложения.
  2. При первом запуске SDK создаёт случайный ID установки и регистрирует установку. На Android он также читает реферер установки Google Play, который сообщает, с какой ссылки Unolink пришла установка.
  3. Ваше приложение вызывает одну строку на каждом шаге воронки: онбординг завершён, показан пейволл, создан аккаунт. Три события SDK добавляет сам: первое открытие, начало сессии и уход приложения в фон.
  4. События ждут на устройстве и отправляются небольшими пакетами в фоне. Нет сети? Они ждут и отправляются повторно. SDK никогда не блокирует ваше приложение и никогда не выбрасывает исключений.

Где видны данные

Откройте приложение в панели:

  • Воронка: сколько установок дошло до каждого шага, по каждой ссылке. Создавайте сколько угодно воронок (Новая воронка), у каждой свои шаги; «Пути» показывают ту, которую вы выберете.
  • «Пути»: каждая установка в виде анонимного кода, от ссылки, которая её привела, до покупки. Фильтруйте по платформе, источнику и результату или нажмите на шаг, чтобы увидеть только тех, кто до него дошёл. Зелёная точка показывает, кто сейчас в приложении (активен за последние 5 минут), а вверху — их число.
  • Отчёт: что работает, где вы теряете людей и что попробовать дальше. Фиксированные правила на ваших собственных цифрах; для каждого вывода показано, как он получен.

Debug-сборки, сборки TestFlight и Xcode, сборки Android, установленные из Android Studio или через adb, установки, сделавшие покупку в песочнице, и сборки, которые вы пометили как тестовые, считаются тестовыми устройствами. Они скрыты, пока вы не включите Учитывать тестовые устройства. См. Тестирование.

Покупки

Если ваше приложение использует RevenueCat, подключите его и не отправляйте покупки из приложения: RevenueCat сам сообщает о пробных периодах, покупках, продлениях, отменах и возвратах. Сообщайте собственный app user ID RevenueCat (в том числе для гостей), чтобы они привязывались к нужной установке: connectRevenueCat делает это одной строкой (SDK 0.3.2 и новее), или вызывайте с ним setUserId.

Без RevenueCat вызывайте trialStarted и purchase сами. См. События.

Конфиденциальность

  • Без фингерпринтинга, без IDFA и Google Advertising ID, без запроса App Tracking Transparency.
  • IP-адреса никогда не хранятся. Страна определяется на границе сети.
  • Ваши ID пользователей хранятся только в виде одностороннего хеша, который у каждого вашего приложения свой.
  • В ярлыке конфиденциальности App Store данные SDK — это аналитика, не связанная с личностью. Пакет для iOS включает манифест конфиденциальности.

Никогда не передавайте имена, email или другие персональные данные в свойствах событий.

Тарифы и лимиты

SDK входит в тарифы Pro и Studio. Автоматические события (первое открытие, начало сессии, уход приложения в фон), экраны онбординга и покупки из RevenueCat бесплатны. Любое другое событие, которое отправляет ваше приложение, стандартное или собственное, учитывается в месячном лимите событий: 1 миллион на Pro, 5 миллионов на Studio.