SubSovereign
All guides

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.