Failed to authenticate. API Error: 401 Invalid authentication credentials

[2026-05-16] vault sync
This commit is contained in:
Alexey Martemyanov
2026-05-16 09:08:35 +06:00
parent e664c0e4dd
commit 57bc5f0e22
@@ -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.83.5% | МИР, СБП, SberPay, карты, кошельки | Рекуррентные + 54-ФЗ авто |
| **CloudPayments (Тинькофф)** | 23.9% | МИР, СБП, T-Pay, карты | Лучшая поддержка подписок по API |
| **Tinkoff Checkout** | 2.53% | МИР, 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).*