From 57bc5f0e22963fb56a69fdb5e60829187458e81b Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Sat, 16 May 2026 09:08:35 +0600 Subject: [PATCH] Failed to authenticate. API Error: 401 Invalid authentication credentials [2026-05-16] vault sync --- .../monetization-revenuecat.md | 142 +++++++++++++++++- 1 file changed, 141 insertions(+), 1 deletion(-) diff --git a/personal/projects/psychologist-app/monetization-revenuecat.md b/personal/projects/psychologist-app/monetization-revenuecat.md index d2f1d975..79415fc6 100644 --- a/personal/projects/psychologist-app/monetization-revenuecat.md +++ b/personal/projects/psychologist-app/monetization-revenuecat.md @@ -574,4 +574,144 @@ import SkipRevenueUI --- -*Документ создан автоматически исследовательским агентом. Источники: RevenueCat docs, RevenueCat State of Subscription Apps 2024 (290M+ subscribers dataset), Apple Developer docs, Google Play Console Help, Reddit r/androiddev, GitHub skip-revenue.* +## 7. Российский рынок: подписки в условиях санкций (май 2026) + +> **TL;DR:** App Store платежи в РФ полностью отключены с 1 апреля 2026. RevenueCat не поддерживает RuStore. Для России нужен отдельный платёжный стек. Единого SDK нет — нужна абстракция. + +### 7.1 Текущий статус платёжных каналов + +| Канал | Статус | Комментарий | +|---|---|---| +| **App Store (iOS)** | 🔴 **МЁРТВ** с 01.04.2026 | Apple Ireland оштрафована за нарушение санкций → отключила все платежи в РФ. Работает только существующий баланс Apple Account | +| **Google Play (Android)** | 🟡 Ограничен | Visa/Mastercard недоступны. МИР — частично. SBP — нет. Часть пользователей платит через операторские счета, но это «расходящийся» канал | +| **RuStore (Android)** | 🟢 **Основной канал** | Предустановлен на всех Android-устройствах в РФ с сентября 2025. Полная поддержка МИР, СБП, SberPay, карты из VK ID | +| **RuStore на iOS** | 🟠 Не существует | Только RuStore Bridge (требует Android-устройства рядом). Pay SDK для iOS был анонсирован дек. 2025 на «начало 2026» — статус запуска неясен | +| **Web-checkout iOS** | 🟡 Технически возможен | Внешний сайт + ЮКасса/Tinkoff/CloudPayments → пользователь получает токен доступа → вводит в приложении | + +### 7.2 RevenueCat: поддержка России + +**RevenueCat НЕ поддерживает RuStore.** RevenueCat оборачивает только: +- StoreKit / StoreKit 2 (Apple) +- Google Play Billing (Google) + +RuStore использует собственный **Pay SDK** (и мигрирует с устаревшего BillingClient → обязательно до 1 августа 2026). Никакой официальной или сторонней обёртки RevenueCat для RuStore не существует. + +**Следствие для skip-revenue:** `skip-revenue` тоже не покрывает RuStore — это обёртка над RevenueCat. + +**Adapty** — та же ситуация: поддерживает App Store + Google Play, RuStore нет. + +### 7.3 RuStore Pay SDK: ключевые детали + +| Параметр | Значение | +|---|---| +| **Дедлайн миграции с BillingClient** | **1 августа 2026** — старый SDK перестаёт принимать платежи | +| **Платёжные методы** | МИР, СБП, SberPay, карты (T-Pay и мобильный счёт — в роадмапе) | +| **Авто-подгрузка карт** | Из VK ID — без ручного ввода → **+20% к конверсии** | +| **Поддержка подписок** | Полная: trial / promo / main / grace / hold периоды | +| **Sandbox** | Есть (в BillingClient не было) | +| **Комиссия** | Не публикуется явно; конкурентная с Google Play | +| **Фреймворки** | Kotlin/Java, React Native, Flutter, Unity, Godot, Unreal Engine, Defold | +| **Swift / iOS нативный SDK** | ❌ Отсутствует | + +### 7.4 Архитектура для покрытия России + +Единого SDK нет. Нужна абстракция на уровне приложения: + +``` +┌─────────────────────────────────────────────────────┐ +│ PaymentProvider (протокол) │ +│ loadProducts() / purchase() / checkStatus() │ +└──────────┬───────────────────────────┬──────────────┘ + │ │ + ▼ ▼ + RevenueCatProvider RuStoreProvider + (iOS App Store + (Android RuStore + Android Google Play) Pay SDK) + skip-revenue пакет Kotlin native + Глобальные рынки Только РФ Android + │ │ + └──────────┬────────────────┘ + ▼ + WebCheckoutProvider + (iOS РФ + fallback) + ЮКасса / Tinkoff / + CloudPayments + → access token flow +``` + +**Практически это значит:** + +- **Android**: 2 отдельных flavor — `googlePlay` (RevenueCat) и `ruStore` (Pay SDK). Или одна сборка с детектом магазина. +- **iOS глобальные**: RevenueCat + skip-revenue (как и планировалось). +- **iOS Россия**: Веб-чекаут — пользователь нажимает «Оформить подписку» → открывается Safari/SFSafariViewController → платёж через ЮКасса → сервер выдаёт токен → приложение активирует доступ. Apple разрешает это через External Purchase Link Entitlement (в РФ де-факто выдают для Reader App категории и ряда других). + +### 7.5 Веб-чекаут для iOS России: как работает + +``` +iOS пользователь + ↓ +[Кнопка "Подписаться"] + ↓ +SFSafariViewController → ваш сайт (yourapp.com/subscribe) + ↓ +Выбор плана + ввод данных карты + ↓ +ЮКасса / CloudPayments / Tinkoff +(МИР, СБП, SberPay, карты) + ↓ +Успешный платёж → сервер создаёт subscription record + ↓ +Redirect с токеном → ваше приложение deeplink + ↓ +Приложение активирует доступ (по токену или user ID) +``` + +**Российские платёжные провайдеры для web-checkout:** + +| Провайдер | Комиссия | Методы | Подписки | +|---|---|---|---| +| **ЮКасса (Сбербанк)** | 2.8–3.5% | МИР, СБП, SberPay, карты, кошельки | Рекуррентные + 54-ФЗ авто | +| **CloudPayments (Тинькофф)** | 2–3.9% | МИР, СБП, T-Pay, карты | Лучшая поддержка подписок по API | +| **Tinkoff Checkout** | 2.5–3% | МИР, T-Pay, карты | Есть, через API | + +**CloudPayments** — оптимален для подписочной модели: гибкий API, удобное управление рекуррентными платежами, owned by Тинькофф → надёжность. + +### 7.6 Стратегия: стоит ли вообще заниматься РФ? + +**Аргументы за:** +- 144 млн человек; mental health ниша практически пустая в RuStore +- RuStore — конкурентное преимущество (большинство международных разработчиков игнорируют) +- Пользователи платят в рублях, конкуренция ниже → выше средний чек в соотношении + +**Аргументы против:** +- iOS Russia = мёртв до изменения политики. Веб-чекаут — сложная инфраструктура для соло-разработчика +- RuStore Pay SDK требует отдельную Android-интеграцию без RevenueCat +- VK/RuStore — политически неоднозначная зависимость +- Юридическая сторона: приём платежей из РФ как резидент Кыргызстана — требует консультации + +**Рекомендация для соло-разработчика на старте:** + +> **Фаза 1 (MVP):** Запуск только на глобальных рынках через RevenueCat + App Store + Google Play. Россию пропустить. +> +> **Фаза 2 (после первой выручки):** Добавить RuStore Android через Pay SDK как отдельный flavor. Это даёт 100% Android-охват РФ. +> +> **Фаза 3 (если есть спрос):** Веб-чекаут для iOS-аудитории РФ через CloudPayments. Только если data показывает значимый трафик. + +### 7.7 Если всё-таки делать RuStore: минимальный план + +``` +□ 1. Зарегистрировать юрлицо или ИП (RuStore требует юридическое лицо) +□ 2. Зарегистрироваться в RuStore Console (console.rustore.ru) +□ 3. Создать отдельный Android productFlavor: ruStore +□ 4. Подключить Pay SDK (не BillingClient — он умирает 01.08.2026) +□ 5. Создать продукты в RuStore Console (подписки) +□ 6. Реализовать RuStorePaymentProvider абстракцию +□ 7. Протестировать в Sandbox +□ 8. Публикация → отдельный APK для RuStore подписан тем же ключом +``` + +**Важно:** RuStore требует, чтобы подпись APK совпадала с подписью билда в Console. Нельзя использовать debug keystore. + +--- + +*Документ обновлён май 2026. Источники: CNews, MacDailyNews, The Verge, RuStore Developer Docs, ASO World Russia 2026, RevenueCat Blog (app-to-web), Adapty Blog (alternative payments), softwarelead.pro (Pay SDK migration).*