От установки SDK до пейвола, прав и оплаты.
Быстрый старт
Плейсхолдеры в документации:
| Плейсхолдер | Смысл |
|---|---|
YOUR_API_URL | Базовый URL Platform API |
YOUR_APP_CODE | Код приложения из админки |
YOUR_PUBLIC_KEY | Public key rb_pub_… |
YOUR_ACCESS_TOKEN | JWT пользователя из вашего Auth |
1. Админка (один раз)
- Создайте приложение →
YOUR_APP_CODE. - Добавьте права (например
premium_feature,cloud_sync). - Создайте тарифы (включая опциональный
free) и привяжите права к платным. - Создайте пейвол
mainи цены. - Скопируйте
YOUR_PUBLIC_KEY.
2. TypeScript
import { RaidBossPlatformClient } from "@raidboss/platform-sdk";
const platform = new RaidBossPlatformClient({
apiUrl: "YOUR_API_URL",
applicationCode: "YOUR_APP_CODE",
publicKey: "YOUR_PUBLIC_KEY",
getAccessToken: async () => YOUR_ACCESS_TOKEN,
});
await platform.registerUser({ platform: "web" });
await platform.registerDevice({
installation_id: "stable-uuid-on-device",
platform: "web",
app_version: "1.0.0",
});
const { data: paywall } = await platform.getPaywall("main");
const canPremium = await platform.hasEntitlement("premium_feature");
3. Flutter
final platform = RaidBossPlatformClient(
apiUrl: 'YOUR_API_URL',
applicationCode: 'YOUR_APP_CODE',
publicKey: 'YOUR_PUBLIC_KEY',
getAccessToken: () async => YOUR_ACCESS_TOKEN,
);
await platform.registerUser(platform: 'android');
await platform.registerDevice(
installationId: installationId,
platform: 'android',
appVersion: '1.0.0',
);
final paywall = await platform.getPaywall(paywallCode: 'main');
final canPremium = await platform.hasEntitlement('premium_feature');
4. Покупка (только платные)
const price = paywall.paywall_items?.[0]?.plan_prices;
if (price && !RaidBossPlatformClient.isFreePrice(price)) {
const { data } = await platform.createPayment({
plan_price_id: String(price.id),
return_url: "https://your.app/pay/return",
});
// открыть data.confirmation_url
}
Не вызывайте createPayment для free (is_free / works_offline / requires_purchase: false).
5. Правило гейтинга
если фича free-local → разрешить (даже offline)
иначе если есть сеть → sync entitlements, обновить кэш, проверить код
иначе → проверить кэш + expires_at