SubSovereign
All guides

SubSovereign localization glossary

Richtlijn voor vertalers (mens of Merlyn). Vertaal elke productterm steeds op dezelfde manier, op elke pagina/doc/UI — consistentie maakt 26 talen professioneel, niet machinaal. Sommige termen zijn industrie-standaard en blijven in het Engels.

Houd in het Engels (NIET vertalen — eigennamen / universele tech-termen)

  • SubSovereign (de productnaam)
  • API, SDK, webhook, JSON, JWT, Redis, PostgreSQL, GDPR
  • Winkel- en leveranciersnamen: Apple, Google, Amazon, Roku, Stripe
  • SDK-methoden/veldnamen en code (bijv. checkEntitlement(), appId)

Vertalen — en CONSEQUENT toepassen (definities voor de juiste term)

  • entitlement — de toegang die een gebruiker heeft verkregen via een actieve aankoop/abonnementsvorm (bijv. "pro-functies ontgrendeld"). Het kernconcept. Kies één natuurlijke term per taal en gebruik deze overal.
  • ontvangstvalidatie — het verifiëren van een winkel-aankoop op de server, direct bij de winkel, zodat de client niet kan worden vervalst. Gebruik bij voorkeur "server-side"-formuleringen.
  • app — een door de ontwikkelaar geregistreerde toepassing in SubSovereign (een tenant). Niet de SDK, niet ons product.
  • API-sleutel — de referentie die een SDK/app gebruikt om de SubSovereign API aan te roepen.
  • abonnement — een terugkerend betaald abonnement.
  • toegangsniveau / tier — het niveau van toegang dat een product biedt (bijv. gratis / pro / premium).
  • zelf gehost — de ontwikkelaar draait het op eigen infrastructuur (vs. een derde-partij SaaS).
  • soeverein / soevereiniteit — je bezit en beheert je eigen stack en data (VK/EU, geen derde-partij cloud die de data van je gebruikers vasthoudt). Een belangrijk verkoopargument — vertaal naar betekenis, behoud de ernst ervan.
  • omzetverdeling — een percentage van de omzet van de ontwikkelaar dat als vergoeding wordt ingehouden. SubSovereign neemt geen deel — dit is een onderscheidend kenmerk ten opzichte van Adapty/RevenueCat. Vertaal duidelijk (bijv. "geen deel van je omzet").
  • multi-tenant — één implementatie die meerdere geïsoleerde apps/organisaties bedient.
  • dashboard — de web back-office waar een ontwikkelaar apps, sleutels en analyses beheert.
  • betaalmuur — het scherm waar een app de gebruiker vraagt om te abonneren (de ontwikkelaar bouwt dit; onze SDK vertelt wat de gebruiker is geautoriseerd voor).

Toon

Gericht op app-ontwikkelaars, maar geschreven zodat een niet-technische lezer het kan volgen — helder, warm, zelfverzekerd. Gebruik korte zinnen. Leg waarom uit, niet alleen hoe.


SubSovereign op Roku — integratiehandleiding

Deze handleiding brengt je Roku-kanaal van "ik weet niet wie me betaald heeft" naar "mijn kanaal ontgrendelt de juiste functies voor de juiste gebruiker, geverifieerd op mijn eigen server." De SDK is één enkel BrightScript-bestand en vereist geen ervaring met abonnementssoftware.

Wat SubSovereign voor je doet

Je gebruikers abonneren zich via Roku Pay (de Roku Channel Store). SubSovereign beantwoordt één vraag voor je kanaal, betrouwbaar: waar heeft deze gebruiker precies voor betaald?

  • Je kanaal vraagt SubSovereign naar de entitlement van de gebruiker — de toegang die ze hebben verkregen.
  • De ontvangstvalidatie vindt plaats op de server, direct bij Roku, zodat een vervalste client geen abonnement kan faken.
  • Het is zelf gehost: het draait op jouw infrastructuur, de data van je gebruikers blijft bij jou, en er is geen omzetverdeling — je behoudt 100% van wat je gebruikers betalen.

Je vertrouwt het apparaat nooit. Het apparaat vraagt; de server beslist.

Voordat je begint

Je hebt een draaiende SubSovereign-server nodig, een app geregistreerd in het dashboard (waarmee je een appId en een API-sleutel krijgt), en je toegangsniveaus (tiers, bijv. pro) aangemaakt en gekoppeld aan je Roku Pay-producten. Stel de producten in in de Roku Developer Dashboard en behandel de aankoop met roChannelStore zoals normaal — SubSovereign verifieert en registreert het daarna.

Stap 1 — Voeg de SDK toe

Plaats SubSovereign.brs in de source/ map van je kanaal. Dat is alles — geen pakketbeheer nodig. De HTTP-aanroepen gebruiken roUrlTransfer met het Roku-certificaatpakket al geconfigureerd.

Stap 2 — Configureer eenmalig bij opstarten van het kanaal

Roep SubSovereign_Configure vroeg aan (bijv. in je Main), en geef je API-sleutel, app-ID, een stabiele gebruikersidentificatie en je server-URL door:

SubSovereign_Configure("YOUR_APP_API_KEY", "your-app-id", userId, "https://subs.yourdomain.com/api/v1")

Gebruik dezelfde userId elke keer voor een bepaalde gebruiker, zodat hun toegang met hen meegaat over apparaten. (De configuratie staat op m, dus configureer op dezelfde thread als waar je vandaan roept — zie de opmerking in Stap 6.)

Stap 3 — Controleer waartoe de gebruiker toegang heeft

SubSovereign_CheckEntitlements() geeft een object terug. Lees hasAccess voor de snelle ja/nee:

result = SubSovereign_CheckEntitlements()
if result.hasAccess = true
    unlockProFeatures()
else
    showFreeExperience()   ' gratis tier, of stuur ze naar de Channel Store
end if

Als de aanvraag mislukt, komt het object terug met hasAccess = false en een error-veld — dus een netwerkstoring leidt tot een gesloten (vergrendelde) status, nooit per ongeluk ontgrendeld.

Stap 4 — Verkoop een abonnement

Voer de aankoop uit via Roku Pay (roChannelStore) zoals normaal. Wanneer Roku een succesvolle transactie retourneert, geef je de transactionId (met het product-ID en het toegangsniveau dat het biedt) door aan SubSovereign, zodat de server het direct met Roku valideert:

result = SubSovereign_ValidateRokuPurchase(transactionId, productId, "pro")
if result.granted = true
    entitlements = SubSovereign_CheckEntitlements()   ' hercontroleer, ontgrendel dan
    unlockProFeatures()
end if

De aankoop is pas echt wanneer de server deze heeft bevestigd met Roku.

Stap 5 — Feature flags en toestemming

Rol functies uit vanaf de server zonder een kanaal-update:

flags = SubSovereign_GetFeatureFlags()
if flags.newPlayer = true then showNewPlayer()

Vang GDPR-toestemming af (fire-and-forget):

purposes = { analytics: true, marketing: false }
SubSovereign_RecordConsent(purposes, "GDPR")

Stap 6 — Voer netwerk-aanroepen uit buiten de render-thread

SubSovereign_CheckEntitlements en SubSovereign_ValidateRokuPurchase wachten op de server (tot 15 seconden). Roep ze nooit aan op je render/UI-thread — een traag netwerk zou het scherm bevriezen. Voer ze uit binnen een Task-node en geef het resultaat terug naar je scène:

' in een functie van een Task-node:
SubSovereign_Configure(m.top.apiKey, m.top.appId, m.top.userId, m.top.baseUrl)
m.top.result = SubSovereign_CheckEntitlements()   ' waargenomen veld waar de scène naar luistert

De fire-and-forget-aanroep SubSovereign_RecordConsent wacht niet op een antwoord en is veilig om direct aan te roepen.

Beste praktijken

  • Controleer bij het opstarten van het kanaal zodat de toegang juist is voordat de gebruiker bij vergrendelde inhoud komt.
  • Hercontroleer na een aankoop zodat de UI de nieuwe toegang direct weerspiegelt.
  • Vertrouw nooit de client — vraag de server; die heeft de transactie geverifieerd met Roku.
  • Gebruik altijd een Task-node voor de entitlement- en validatie-aanroepen.

Snelle referentie

Je wilt… Roep aan
De SDK instellen SubSovereign_Configure(apiKey, appId, userId, baseUrl)
Zien wat de gebruiker heeft ontgrendeld SubSovereign_CheckEntitlements() → object met hasAccess
Een Roku Pay-aankoop valideren SubSovereign_ValidateRokuPurchase(transactionId, productId, accessLevel)
Feature flags lezen SubSovereign_GetFeatureFlags()
GDPR-toestemming registreren SubSovereign_RecordConsent(purposes, jurisdiction)

Volgende stappen