S Subster

Adapty и RevenueCat

Вы настроите так, чтобы оплата на веб-странице открывала доступ в Adapty или RevenueCat — там, где его уже спрашивает ваше приложение.

Покупатель платит у нас, в браузере, а оплату в подписочную платформу переносим мы: выдаём доступ его профилю и ведём срок. От вас — ключи платформы и один раз пара «наш идентификатор покупателя ↔ профиль в платформе».

Перед началом

Шаг 1. Внесите ключи платформы

Откройте Настройки проекта → Подключение приложения → Основное, ветка «Куда доставлять доступ». В поле «Какой сервис у вас подключён» выберите платформу и заполните поля. Кнопки сохранения у ветки нет: каждое поле сохраняется, когда вы из него выходите.

ПолеЧто вписать
Секретный ключ Adapty, iOS и Androidсерверный ключ secret_live_…. Он свой у каждого приложения Adapty: iOS и Android заведены отдельными приложениями — заполните оба поля, одним — хватит одного
Название уровня доступа в Adaptyуровень (access level) так, как он назван в кабинете Adapty
Секретный ключ RevenueCatсекретный ключ API sk_…
Название права в RevenueCatидентификатор права (entitlement) из кабинета RevenueCat

Без названия уровня или права ключ ничего не выдаст, а кабинет об этом промолчит — заполняйте оба поля.

Название уровня или права одно на проект: любая оплаченная цена открывает именно его.

Секретный ключ платформы вписывается сюда, в кабинет. Наш ключ доступа — тоже вида sk_…, но он идёт в заголовок ваших запросов к нам; не путайте их.

Ветки не видно — в разделе выбран другой путь. Нажмите «Показать остальные настройки» внизу или смените путь на «Подписки живут в стороннем сервисе».

Тестовые оплаты

Оплата тестовой картой уходит в платформу только по ключам песочницы: раскрытие «Ключи песочницы — необязательно» в той же ветке. Это секретные ключи тестовых приложений платформы — поля подсказывают вид secret_test_… у Adapty и sk_test_… у RevenueCat.

Без них тестовая покупка в платформу не попадёт вовсе — это не поломка привязки. Боевые покупки идут по боевым ключам, название уровня у обеих пар общее.

Шаг 2. Свяжите покупателя с профилем

Доступ мы выдаём профилю в вашей платформе, поэтому нам нужна пара: наш идентификатор покупателя (guid; откуда он у приложения — «Как мы узнаём покупателя») и идентификатор профиля у платформы. Идентификатор профиля — латиница, цифры и знаки без пробелов, до 255 символов.

Если у васКак привязать
приложение само открывает квиз или экран с ценами, своего сервера нетпараметром в адресе страницы
есть свой серверзапросом с сервера — надёжнее: запись подтверждена ключом
покупатель платит на сайте раньше, чем ставит приложениезапросом с сервера, когда приложение узнало идентификатор покупателя

Параметром в адресе страницы

Откройте из приложения страницу воронки, дописав к адресу идентификатор профиля. Можно оба сразу:

https://<адрес воронки>?adapty_profile_id=<profileId из Adapty>
https://<адрес воронки>?revenuecat_profile_id=<appUserID из RevenueCat>

Идентификатор берите из библиотеки платформы до открытия страницы. Остальное сделает страница: свяжет профиль с тем покупателем, на которого ляжет оплата. Наш идентификатор вашему коду знать не придётся.

Открываете страницу нашей библиотекой — передайте идентификатор параметром adaptyProfileId или revenuecatProfileId метода открытия (openWebPaywall, openWebPaywallEmbedded, openQuizEmbedded; есть в нашей библиотеке с версии 0.5.0, «SDK»): в адрес она допишет его сама.

Ответа страница не отдаёт. Какой профиль мы сохранили, покажет запрос GET /s2s/v1/identity/link-profile?guid=<идентификатор> с ключом — им же проверьте привязку до первого клиента; ответ разобран в «Диагностике».

Запросом с вашего сервера

curl -X POST "https://api.subster.ai/s2s/v1/identity/link-profile" \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{ "guid": "abc123def456", "adaptyProfileId": "…" }'

Ответ — { "success": true }. Для RevenueCat поле называется revenuecatProfileId; нужно хотя бы одно из двух. Ключу нужно право identity:write — у ключа, выпущенного по умолчанию, оно есть (таблица прав). Отправляйте запрос ключом того проекта, в котором покупатель платит.

Берите тот идентификатор, на который ляжет оплата: заведите покупателя заранее или дождитесь, пока приложение его узнает, — оба пути в «Как мы узнаём покупателя». Незнакомый идентификатор сервер не отвергает: привязка запишется, но доступ по ней никуда не поедет.

Привязка может прийти и после оплаты. В момент записи мы сами выдадим профилю доступ по уже оплаченным и ещё действующим покупкам.

ОтветКогда приходит
400нет ни одного идентификатора профиля; в нём пробел, кириллица или больше 255 символов; идентификатор покупателя короче 8 или длиннее 64 символов
403у ключа нет права identity:write

Что появится в платформе

AdaptyRevenueCat
подпискауровень доступа до конца оплаченного периода, срок сдвигается с каждым продлениемпромо-выдача права (promotional) до той же даты
разовая покупкауровень без срокаправо на 100 лет: бессрочной промо-выдачи у RevenueCat нет
возврат денег, проигранный спор или другой отзыв доступа у насуровень снимаетсяпромо-выдача снимается

Правило записи привязки

Адрес страницы может подсмотреть посторонний, поэтому переписать через него привязку нельзя:

Кто прислал первую запись, адрес страницы не проверяет — при своём сервере привязывайте с него.

Если подключены обе платформы

Передавайте оба идентификатора при каждом открытии страницы. Если один профиль уже сохранён, второй допишется через адрес, только когда вместе с ним придёт и верный первый: так мы отличаем ваше приложение от постороннего. Не входите в RevenueCat нашим идентификатором покупателя: такое значение доказательством не считается, и второй профиль допишет только ваш сервер.

После переустановки приложения

Платформа может выдать переустановившему приложение человеку новый анонимный профиль. Доступ остаётся на старом, а новый профиль в адресе страницы привязку не перепишет — по правилу выше. Выберите одно:

Дальше