RevenueCat
Если ваше приложение использует RevenueCat, подключите его вебхук, и Unolink будет получать каждый пробный период, покупку, продление, отмену и возврат напрямую от RevenueCat, включая продления и возвраты, которые происходят, даже когда приложение не открыто. Выручка в вашей воронке становится за вычетом возвратов. Тариф Pro и выше.
1. Подключение
В Unolink откройте приложение → Настройки → RevenueCat → Подключить. Скопируйте URL вебхука и значение заголовка авторизации (показывается один раз).
2. Добавьте вебхук в RevenueCat
В RevenueCat откройте свой проект → Integrations → Webhooks → Add new configuration:
- Webhook URL и Authorization header value: вставьте их.
- Environment: оба. Покупки в песочнице засчитываются как тестовые устройства, поэтому не попадают в ваши реальные цифры.
- App: это приложение. Events: все.
Сохраните, затем нажмите Send test event. Карточка RevenueCat в Unolink покажет, когда событие придёт.
3. Сообщите Unolink, кто пользователь
Покупки привязываются к установке (и к ссылке, с которой она пришла) через ID пользователя, который сообщает ваше приложение:
собственный app user ID RevenueCat. В SDK 0.3.2 и новее одна строка поддерживает его в актуальном состоянии. Вызовите её
один раз при запуске, до или после configure:
Unolink.connectRevenueCat { Purchases.isConfigured ? Purchases.shared.appUserID : nil }
Unolink.connectRevenueCat { Purchases.sharedInstance.appUserID }
import Purchases from "react-native-purchases"
Unolink.connectRevenueCat(Purchases)
Unolink.connectRevenueCat(
() => Purchases.appUserID,
addListener: Purchases.addCustomerInfoUpdateListener,
removeListener: Purchases.removeCustomerInfoUpdateListener,
);
Unolink считывает ID при запуске, каждый раз, когда приложение возвращается на передний план, и каждый раз, когда ID меняется, и
отправляет его, только если он новый. RevenueCat в ваше приложение он не добавляет: RevenueCat передаёте вы сами. На iOS и Android
также вызывайте Unolink.revenueCatUserChanged() после Purchases.logIn и Purchases.logOut, чтобы сразу отправить новый ID
(иначе он уйдёт со следующим событием). React Native и Flutter замечают смену сами.
Без connectRevenueCat (старый SDK или если вы предпочитаете делать это сами) вызывайте setUserId с ID из RevenueCat после
Purchases.configure, после каждого Purchases.logIn и Purchases.logOut и при каждом запуске. Используйте что-то одно, а не оба
способа сразу:
Unolink.setUserId(Purchases.shared.appUserID)
Unolink.setUserId(Purchases.sharedInstance.appUserID)
Unolink.setUserId(await Purchases.getAppUserID())
Unolink.setUserId(await Purchases.appUserID);
Для гостя это анонимный ID RevenueCat, поэтому покупка, сделанная до регистрации, сразу привязывается к установке.
После logIn это ID аккаунта. Unolink хранит все ID, которые сообщала установка, поэтому покупка гостя остаётся привязанной.
Если ваше приложение сообщает только ID аккаунта, покупка гостя всё равно привяжется, но только со следующим событием RevenueCat для этого клиента, в котором указаны оба ID (например, с первым продлением). До тех пор человек отображается как ещё не оплативший. Если сообщать ID из RevenueCat, этого ожидания не будет.
Когда человек нажимает «продолжить как гость», также вызывайте Unolink.signUpSkipped() (SDK 0.3.2 и новее, React Native 0.3.1;
в старых SDK: track("sign_up_skipped")), чтобы шаг воронки Продолжили как гость их учитывал. См.
Гости и аккаунты.
Unolink никогда не хранит сам ID, только хеш с ключом, который у каждого вашего приложения свой. Покупка, пришедшая раньше, чем приложение сообщило своего пользователя, ждёт и привязывается к установке, как только это произойдёт. Платежи, которые приходят через дни или недели, всё равно учитываются, а в Отчёте видно, сколько времени людям нужно: см. Платежи и ID пользователей, где также рассказано о конфиденциальности и правилах Apple.
Что приходит
| RevenueCat | В Unolink |
|---|---|
INITIAL_PURCHASE (пробный период) | Начал пробный период |
INITIAL_PURCHASE, NON_RENEWING_PURCHASE, конверсия пробного периода | Оплатил, с выручкой |
RENEWAL | Продлил, с выручкой |
CANCELLATION (возврат) | Возврат, выручка вычитается |
CANCELLATION, EXPIRATION, BILLING_ISSUE | Подписка отменена, Подписка истекла, Проблема с оплатой |
Когда RevenueCat подключён, он становится источником истины для покупок и пробных периодов: если ваше приложение также вызывает
Unolink.purchase() или trialStarted(), эти вызовы игнорируются, поэтому ничего не учитывается дважды. Продления, отмены
и остальное можно добавить как шаги в любую воронку (Воронка → Изменить).