SubSovereign voor Flutter — integratiehandleiding
Deze handleiding behandelt het subsovereign Flutter-pakket (sdk-flutter/) — een dataclient en een native paywall-widget. De paywall die je ontwerpt in het SubSovereign-dashboard wordt hier weergegeven als een echte Flutter-Paywall-widget, met dezelfde configuratie als de iOS-, Android-, web-, React- en React Native SDK’s.
Voordat je begint
Een draaiende SubSovereign-server, een app geregistreerd in het dashboard (een appId en een API-sleutel met SDK-rol), toegangsniveaus (bijv. pro) gekoppeld aan je store-producten, en een gepubliceerde paywall. Verwerk de aankoop zelf met je gebruikelijke facturatieplug-in (bijv. in_app_purchase); SubSovereign verifieert en registreert deze daarna.
Stap 1 — Installeren
Voeg het pakket toe (pad/git-afhankelijkheid zolang het nog niet op pub.dev staat):
dependencies:
subsovereign:
path: ../sdk-flutter # or a git dependency
import 'package:subsovereign/subsovereign.dart';
Stap 2 — Eenmalig configureren bij het opstarten van je app
SubSovereign.instance.configure(SubSovereignConfig(
apiKey: 'YOUR_SDK_KEY',
appId: 'your-app-id',
baseUrl: 'https://subs.yourdomain.com/api/v1', // YOUR self-hosted server
userId: currentUser.id, // your own stable user id
locale: 'en',
));
Gebruik een stabiele userId — dezelfde waarde overal, zodat toegang de gebruiker volgt op alle apparaten.
Stap 3 — Controleren wat de gebruiker kan openen
try {
final result = await SubSovereign.instance.checkEntitlements();
if (result.hasAccess) {
showPremiumContent();
} else {
showPaywall();
}
} on SubSovereignException catch (e) {
// Keep the user on their last-known access and retry later.
debugPrint('Entitlement check failed: $e');
}
Stap 4 — De paywall tonen en verkopen
final config = await SubSovereign.instance.getPaywallConfig(platform: 'android');
Paywall(
config: config,
onSelectProduct: (productId) => buy(productId), // your billing plugin
)
Na een geslaagde aankoop moet de server deze verifiëren, waarna je de toegang opnieuw controleert en ontgrendelt:
final granted = await SubSovereign.instance.validateGooglePurchase(
purchaseToken: purchase.verificationData.serverVerificationData,
productId: purchase.productID,
accessLevelId: 'pro',
);
if (granted) {
final result = await SubSovereign.instance.checkEntitlements();
if (result.hasAccess) unlockProFeatures();
}
Privacy (GDPR)
await SubSovereign.instance.recordConsent(purpose: 'analytics', granted: true);
EU-annuleringsknop (Compliance Passport)
Als je abonnementen verkoopt aan EU-consumenten online, vereist Richtlijn (EU) 2023/2673 een duidelijk gelabelde annuleringsfunctie:
WithdrawalButton(subscriptionId: sub.id)
Deze toont de opvallende knop, bevestigt eenmaal en verstuurt idempotent (een netwerkopnieuwpoging kan nooit twee annuleringen maken). Voor aangepaste UIs gebruik je
SubSovereign.instance.withdraw(subscriptionId: …) en getWithdrawalConfig().
Snelle referentie
| Je wilt… | Roep aan |
|---|---|
| De SDK instellen | SubSovereign.instance.configure(SubSovereignConfig(…)) |
| Zien wat de gebruiker heeft ontgrendeld | await checkEntitlements() → EntitlementResult.hasAccess |
| De gepubliceerde paywall laden | await getPaywallConfig(platform: 'android') |
| Deze nativiteit tekenen | Paywall(config: …, onSelectProduct: …) |
| Een Google-aankoop verifiëren | await validateGooglePurchase(purchaseToken: …, productId: …, accessLevelId: …) |
| Toestemming registreren | await recordConsent(purpose: …, granted: …) |
| EU-annulering | WithdrawalButton(subscriptionId: …) · withdraw() · getWithdrawalConfig() |
Volgende stappen
- Een uitvoerbaar voorbeeld vind je in
sdk-flutter/example/. - Ben je nieuw met deze concepten? Lees Hoe SubSovereign werkt.