Платежи и ID пользователей

Unolink привязывает каждый платёж к установке, к которой он относится, а значит, и к ссылке или объявлению, с которых пришла эта установка. Это работает, как бы поздно ни пришёл платёж: человек, который нажал на вашу рекламу в TikTok сегодня и оформит подписку через две недели, всё равно засчитывается как платящий пользователь с этой рекламы. Тариф Pro и выше.

Как учитываются поздние платежи

  • Каждое событие относится к установке. Платёж, который приходит через неделю или месяц после установки, добавляется к тому же человеку.
  • Воронки, «Пути» и Отчёт не имеют срока отсечения. Шаг засчитывается, если человек выполнил его в любое время, поэтому поздний платёж всё равно переводит его в «Оплатил».
  • Диапазон дат выбирает людей, а не события. «Последние 7 дней» означает людей, которые установили приложение за последние 7 дней, плюс всё, что они сделали после этого. Посмотрите на установки прошлой недели снова через неделю, и Оплатил может вырасти: это приходят поздние плательщики, а не ошибка.
  • «Пути» обновляются сами. Человек, показанный как «Ушёл» (нет активности неделю), становится «Завершил», когда приходит его платёж, а в строке появляется «оплатил через 9 дней после установки · вернулся».

Где посмотреть, сколько времени людям нужно

  • Отчёт → Когда люди платят: доля установок, оплативших в течение дня, 7 дней и 30 дней, медианное время ожидания и сколько людей вернулись, чтобы заплатить после недели или более тишины, по всем и по каждой ссылке. «В течение 7 дней» учитывает только установки не моложе 7 дней, чтобы недавние установки не занижали цифру.
  • «Пути»: для каждого платящего человека видно, через сколько дней после установки он впервые заплатил и вернулся ли он после затишья.
  • Уже подписан: человек, который оформил подписку до этой установки (переустановка, новый телефон), присылает продление, а не покупку. «Пути» показывают его как «Уже подписан · продлил» и учитывают его деньги в выручке, но не как Оплатил: продажа была сделана не этой установкой и не ссылкой, с которой она пришла.

Что нужно от вашего приложения

Платежи попадают в Unolink одним из двух способов:

  1. RevenueCat (рекомендуется). Подключите его вебхук в приложении → Настройки → RevenueCat. RevenueCat сообщает о покупках, конверсиях пробных периодов, продлениях и возвратах даже когда приложение не открыто, а именно так происходит большинство поздних платежей (пробный период, который конвертируется через неделю, продление в следующем месяце).
  2. Вызов purchase() из SDK, который отправляется из приложения, когда человек платит в нём. Подходит без RevenueCat, но не видит ничего, что происходит вне приложения.

Чтобы события RevenueCat нашли нужную установку, приложение должно сообщить Unolink, кто пользователь, с помощью собственного app user ID RevenueCat. В SDK 0.3.2 и новее одна строка при запуске поддерживает его в актуальном состоянии:

// iOS: once at launch, before or after configure
Unolink.connectRevenueCat { Purchases.isConfigured ? Purchases.shared.appUserID : nil }
// Android
Unolink.connectRevenueCat { Purchases.sharedInstance.appUserID }
// React Native
Unolink.connectRevenueCat(Purchases)
// Flutter
Unolink.connectRevenueCat(() => Purchases.appUserID,
    addListener: Purchases.addCustomerInfoUpdateListener,
    removeListener: Purchases.removeCustomerInfoUpdateListener);

Он считывает ID из RevenueCat при запуске, когда приложение возвращается на передний план и когда ID меняется, и отправляет его, только если он новый (на iOS и Android также вызывайте Unolink.revenueCatUserChanged() после logIn и logOut). До версии 0.3.2 или если хотите делать это сами, вызывайте вместо этого setUserId с ID из RevenueCat (например, Unolink.setUserId(Purchases.shared.appUserID)) после Purchases.configure, после каждого Purchases.logIn и Purchases.logOut и при каждом запуске. Используйте что-то одно, а не оба способа сразу. На странице RevenueCat есть код для каждой платформы.

Для гостя ID RevenueCat — это его анонимный ID, поэтому покупка, сделанная до регистрации, сразу привязывается к установке. После logIn это ID аккаунта. Unolink хранит все ID, которые сообщала установка, поэтому покупка гостя остаётся привязанной. Платёж, который пришёл раньше, чем приложение отправило ID пользователя, не теряется: он ждёт и привязывается к установке, как только ID придёт. Без RevenueCat вызывайте setUserId со своим собственным ID пользователя и null (nil в Swift) при выходе из аккаунта.

Когда человек нажимает «продолжить как гость», также вызывайте Unolink.signUpSkipped() (SDK 0.3.2 и новее, React Native 0.3.1; в старых SDK: track("sign_up_skipped")), чтобы шаг воронки Продолжили как гость их учитывал. См. Гости и аккаунты.

Когда платёж не удаётся привязать

  • Нет ни RevenueCat, ни setUserId, а человек платит вне приложения (например, на вашем сайте). Ничто не сообщает об этом Unolink.
  • Человек переустанавливает приложение до оплаты. Для Unolink новая установка — это новый человек, если только их не связывает один и тот же ID пользователя.
  • Человек платит на другом устройстве. Это тоже привязывается только через ID пользователя.
  • Платит гость, а приложение сообщает только ID аккаунта. RevenueCat отправляет покупку под своим анонимным ID, который приложение так и не сообщило. Она всё равно привяжется, но только со следующим событием RevenueCat для этого клиента, в котором указаны оба ID (например, с первым продлением); до тех пор человек отображается как ещё не оплативший. Если сообщать собственный ID RevenueCat, покупка привязывается сразу.

Когда RevenueCat подключён и его ID сообщается (connectRevenueCat или setUserId с ID из RevenueCat), все эти случаи покрыты.

Конфиденциальность: это не фингерпринтинг

  • Фингерпринтинг — это определение того, какое устройство у человека, по его характеристикам (IP-адрес, экран, шрифты, настройки) без спроса, обычно чтобы следить за ним в приложениях других компаний. Apple это запрещает, и Unolink никогда этого не делает.
  • setUserId — это собственный ID пользователя вашего приложения, который ваше приложение передаёт намеренно. Unolink хранит только односторонний хеш с ключом от него (HMAC-SHA256 с ключом, уникальным для каждого вашего приложения), никогда сам ID, и использует его для одного: привязки платежей вашего приложения к установкам вашего приложения. Он никогда не передаётся другим приложениям, рекламным сетям или кому-либо ещё.
  • App Tracking Transparency от Apple касается связывания данных вашего приложения с приложениями или сайтами других компаний для рекламы или передачи их брокерам данных. Привязка ваших собственных покупок к вашим собственным установкам — это аналитика первой стороны, того же рода, что у RevenueCat или Firebase, поэтому запрос на отслеживание для неё не нужен.

В вопросах о конфиденциальности в App Store Connect Unolink с setUserId обычно сводится к следующему: Идентификатор пользователя (User ID) и Покупки (Purchases), собираемые для аналитики (Analytics), связанные с пользователем и не используемые для отслеживания. Ваши собственные ответы зависят от всего остального, что делает ваше приложение, поэтому проверьте их целиком.