SubSovereign auf Flutter — Integrationsanleitung
Dieser Leitfaden behandelt das subsovereign-Flutter-Paket (sdk-flutter/) — einen Daten-Client und ein natives Paywall-Widget. Die Paywall, die du im SubSovereign-Dashboard erstellst, wird hier als echtes Flutter-Paywall-Widget aus derselben Konfiguration wie die iOS-, Android-, Web-, React- und React-Native-SDKs gerendert.
Vorbereitung
Ein laufender SubSovereign-Server, eine im Dashboard registrierte App (mit einer appId und einem SDK-Rollen-API-Key), verknüpfte Zugangsebenen (z. B. pro) mit deinen Store-Produkten sowie eine veröffentlichte Paywall. Die eigentliche Kaufabwicklung übernimmst du mit deinem üblichen Billing-Plugin (z. B. in_app_purchase); SubSovereign prüft und erfasst den Kauf anschließend.
Schritt 1 — Installation
Füge das Paket hinzu (Pfad/Git-Abhängigkeit, solange es noch nicht auf pub.dev verfügbar ist):
dependencies:
subsovereign:
path: ../sdk-flutter # or a git dependency
import 'package:subsovereign/subsovereign.dart';
Schritt 2 — Einmalige Konfiguration beim App-Start
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',
));
Verwende eine stabile userId — derselbe Wert überall, damit der Zugang nutzerübergreifend auf allen Geräten konsistent bleibt.
Schritt 3 — Verfügbaren Zugang prüfen
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');
}
Schritt 4 — Paywall anzeigen und verkaufen
final config = await SubSovereign.instance.getPaywallConfig(platform: 'android');
Paywall(
config: config,
onSelectProduct: (productId) => buy(productId), // your billing plugin
)
Nach erfolgreicher Kaufabwicklung lässt du den Server die Transaktion verifizieren, prüfst erneut und gibst den Zugang frei:
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();
}
Datenschutz (GDPR)
await SubSovereign.instance.recordConsent(purpose: 'analytics', granted: true);
EU-Widerrufsbutton (Compliance Passport)
Verkaufst du Abonnements an EU-Verbraucher online, verlangt die Richtlinie (EU) 2023/2673 einen klar gekennzeichneten Widerrufsbutton:
WithdrawalButton(subscriptionId: sub.id)
Er zeigt den auffälligen Button an, bestätigt einmalig und sendet idempotent (ein Netzwerk-Retry kann nie zwei Widerrufe erzeugen). Für benutzerdefinierte Oberflächen nutze SubSovereign.instance.withdraw(subscriptionId: …) und getWithdrawalConfig().
Schnellreferenz
| Du möchtest… | Rufe auf |
|---|---|
| SDK einrichten | SubSovereign.instance.configure(SubSovereignConfig(…)) |
| Verfügbaren Zugang prüfen | await checkEntitlements() → EntitlementResult.hasAccess |
| Veröffentlichte Paywall laden | await getPaywallConfig(platform: 'android') |
| Sie nativ rendern | Paywall(config: …, onSelectProduct: …) |
| Google-Kauf verifizieren | await validateGooglePurchase(purchaseToken: …, productId: …, accessLevelId: …) |
| Einwilligung erfassen | await recordConsent(purpose: …, granted: …) |
| EU-Widerruf | WithdrawalButton(subscriptionId: …) · withdraw() · getWithdrawalConfig() |
Nächste Schritte
- Ein lauffähiges Beispiel findest du unter
sdk-flutter/example/. - Neue Konzepte? Lies Wie SubSovereign funktioniert.