От установки 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 / pro / cloud…) и привяжите к ним права; задайте цены.
- Создайте пейвол
main— витрина цен этих тарифов для SDK. - Скопируйте
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",
// опционально — видно в админке Users
// display_name: "Иван",
// avatar_url: "https://cdn.example.com/a.jpg",
// timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
});
// Нужен для «Устройства active» в аналитике / списке устройств в админке
await platform.registerDevice({
installation_id: "stable-uuid-on-device", // один UUID на установку
platform: "web",
app_version: "1.0.0",
});
// После смены аватара в приложении:
// await platform.updateUserProfile({ avatar_url: "https://…" });
// Опционально: trackEvent с тем же installation_id + platform тоже обновляет last_seen
await platform.trackEvent({
event: "app_opened",
platform: "web",
installation_id: "stable-uuid-on-device",
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',
// optional — shown in admin Users
// displayName: 'Ivan',
// avatarUrl: 'https://cdn.example.com/a.jpg',
// timezone: 'Europe/Moscow',
);
// Required for admin «Devices active» / device list
await platform.registerDevice(
installationId: installationId, // one UUID per install
platform: 'android',
appVersion: '1.0.0',
);
// After avatar change:
// await platform.updateUserProfile(avatarUrl: 'https://…');
// Optional: trackEvent with the same installationId + platform also heartbeats last_seen
await platform.trackEvent(
event: 'app_opened',
platform: 'android',
installationId: installationId,
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
Далее: Права · Пользователи · Платежи · Офлайн