Be om tidlig tilgang

Skriv inn fornavnet ditt og en e-postadresse eller et telefonnummer. Vi kontakter deg med informasjon om tilgang til Tajo.

Kvalitetskrav ved app-gjennomgang

Stripe går gjennom hver app som sendes inn til marketplace, opp mot et omfattende sett med kvalitetskrav. Setter du deg inn i disse kravene før du utvikler, sparer du tid og reduserer antall runder i gjennomgangen.

Oversikt

Gjennomgangen av Stripe-apper vurderer appen din på seks hovedområder:

  1. Transparent prising, tydelig informasjon om kostnader
  2. Appfunksjonalitet, pålitelighet og fullstendighet
  3. Utviklerstandarder, kodekvalitet og bruk av API-et
  4. UX-kvalitet, krav til grensesnitt og brukeropplevelse
  5. Sikkerhet, databeskyttelse og sikre arbeidsmåter
  6. Juridisk etterlevelse, personvern og regulatoriske krav

Transparent prising

Appen din må informere brukerne tydelig om alle kostnader:

  • Åpen prising: All prising må oppgis på forhånd i oppføringen i marketplace
  • Ingen skjulte gebyrer: Brukerne må ikke møte uventede kostnader etter installasjon
  • Prøvevilkår: Tilbyr du en prøveperiode, si tydelig hvor lenge den varer og hva som skjer når den er over
  • Oppgraderingsflyter: Salgsfremstøt og oppgraderingsforslag må være diskré og tydelig frivillige
  • Valuta: Vis prisene i brukerens lokale valuta når det er mulig

Caution

Apper som skjuler prisen eller belaster brukerne uten tydelig samtykke, blir avvist umiddelbart.

Formatering av dato og klokkeslett

Alle datoer og klokkeslett appen din viser, må følge konvensjonene i Stripe Dashboard:

  • Bruk brukerens lokalinnstilling for datoformat når den er tilgjengelig
  • Vis klokkeslett i brukerens lokale tidssone
  • Bruk relative tidsangivelser for nylige hendelser (for eksempel «2 timer siden»)
  • Bruk absolutte tidsangivelser med full dato og klokkeslett for eldre hendelser
  • Følg ISO 8601 for alle datofelt som går mot API-et
// Good: Use Stripe's date formatting utilities
import { formatDate, formatRelativeTime } from '@stripe/ui-extension-sdk/utils';
const formattedDate = formatDate(timestamp); // Locale-aware
const relativeTime = formatRelativeTime(timestamp); // "2 hours ago"

Appinnstillinger

Hvis appen din krever konfigurasjon:

  • Lag en egen innstillingsvisning som er tilgjengelig fra appens viewport
  • Fyll inn fornuftige standardverdier der det lar seg gjøre
  • Valider alt brukerne skriver inn, med tydelige feilmeldinger
  • La brukerne endre innstillinger uten å installere appen på nytt
  • Ta vare på innstillingene mellom økter med Secret Store API i Stripe

Støtte for sandkasse

Appen din må fungere riktig i Stripes sandkassemodus (testmodus):

  • Kompatibilitet med testmodus: Alle funksjoner må fungere i testmodus
  • Testdata: Bruk realistiske testdata som viser hva appen kan
  • Ingen live-data i sandkassen: Eksponer aldri produksjonsdata i testmodus
  • Elegant håndtering: Er en funksjon utilgjengelig i sandkassen, vis en tydelig melding om hvorfor
  • Sett sandbox_install_compatible: true i manifestet ditt
{
"sandbox_install_compatible": true
}

Appfunksjonalitet

Pålitelighet

  • Appen må ikke krasje eller henge under normal bruk
  • Alle funksjoner du reklamerer for, må fungere som beskrevet
  • Nettverksfeil må håndteres elegant, med mulighet for å prøve på nytt
  • Appen må forbli responsiv mens den kjører operasjoner i bakgrunnen

Fullstendighet

  • Ingen plassholderinnhold, «kommer snart»-funksjoner eller ødelagte lenker
  • Alle elementer i grensesnittet må fungere, ingen døde knapper eller inaktive kontroller
  • Hjelpetekster og dokumentasjonslenker må peke til sider som finnes
  • Avinstallering må fjerne alle appdata og webhooks på en ryddig måte

Ytelse

  • Grensesnittet må tegnes opp innen 3 sekunder på en vanlig tilkobling
  • Synkronisering i bakgrunnen må ikke blokkere grensesnittet
  • Store datamengder må bruke paginering eller lazy loading
  • Hold antallet API-kall nede, slik at du unngår ratebegrensning

Utviklerstandarder

Bruk av API-et

  • Bruk den nyeste stabile versjonen av Stripe API
  • Følg beste praksis for Stripe API når det gjelder paginering, feilhåndtering og idempotens
  • Ikke overskrid ratebegrensningene, bruk eksponentiell backoff ved nye forsøk
  • Bruk webhooks for hendelsesdrevne oppdateringer i stedet for polling

Kodekvalitet

  • Ingen feil eller advarsler i konsollen i produksjonsbygg
  • Fjern all feilsøkingslogging før du sender inn
  • Håndter alle spesialtilfeller (tomme tilstander, manglende data, nettverksfeil)
  • Følg mønstrene i Stripes komponentbibliotek for et konsistent grensesnitt

Versjonering

  • Bruk semantisk versjonering (MAJOR.MINOR.PATCH)
  • Dokumenter bruddendringer i versjonsoppdateringene
  • Behold bakoverkompatibilitet der det lar seg gjøre

UX-kvalitet

Reklame

  • Ingen annonser: Appen din må ikke vise reklame av noe slag
  • Ingen kryssalg: Ikke reklamer for andre produkter eller tjenester i appens grensesnitt
  • Merkevareinnhold: Vis bare din egen merkevare, ikke tredjeparters (med unntak av integrasjonspartnere som Brevo)

Språk og innhold

  • Konsistent språk: Bruk samme terminologi gjennom hele appen
  • Profesjonell tone: Match den profesjonelle, konsise kommunikasjonsstilen i Stripe Dashboard
  • Ingen sjargong: Unngå teknisk sjargong som selgerne kanskje ikke forstår
  • Stavekontroll: Sørg for at all tekst er fri for skrive- og grammatikkfeil
  • Kun engelsk: All tekst brukerne ser, må være på engelsk i marketplace-apper

Bekreftelsesdialoger

Krev at brukeren bekrefter destruktive eller viktige handlinger:

// Good: Confirm before destructive actions
const handleDisconnect = async () => {
const confirmed = await showConfirmation({
title: 'Disconnect Brevo Integration',
message: 'This will stop syncing customer data to Brevo. You can reconnect at any time.',
confirmLabel: 'Disconnect',
cancelLabel: 'Cancel',
destructive: true,
});
if (confirmed) {
await disconnectIntegration();
}
};

Handlinger som krever bekreftelse:

  • Koble fra integrasjoner
  • Slette synkroniserte data
  • Endre innstillinger som påvirker dataflyten
  • Tilbakestille konfigurasjonen til standardverdier

Lastetilstander

Vis alltid en lasteindikator for asynkrone operasjoner:

// Good: Show loading state during data fetch
const CustomerSyncStatus = () => {
const { data, isLoading, error } = useSyncStatus();
if (isLoading) {
return <Spinner label="Loading sync status..." />;
}
if (error) {
return <Banner type="critical" title="Failed to load sync status">
{error.message}
</Banner>;
}
return <SyncStatusDisplay data={data} />;
};

Krav:

  • Vis spinnere eller skjelettskjermer mens data lastes
  • Deaktiver knapper mens et skjema sendes inn
  • Vis fremdriftsindikatorer for operasjoner som tar lang tid
  • Vis aldri en blank skjerm under lasting

Feilmeldinger

Gi tydelige feilmeldinger brukeren kan handle på:

// Bad: Generic error
"Something went wrong"
// Good: Specific and actionable
"Unable to sync customer data to Brevo. Please verify your Brevo API key
in Settings and try again."

Retningslinjer for feilmeldinger:

  • Forklar hva som skjedde, i et enkelt språk
  • Foreslå en konkret handling brukeren kan gjøre for å løse problemet
  • Gi en måte å prøve den mislykkede operasjonen på nytt
  • Logg detaljert feilinformasjon for feilsøking (som ikke vises til brukerne)
  • Ta med feilkoder som support kan bruke, der det er relevant

Sikkerhet

Secret Store API

Bruk Stripes Secret Store API til all lagring av sensitive data:

import { createHttpClient, STRIPE_API_KEY } from '@stripe/ui-extension-sdk/http_client';
// Good: Store secrets using the Secret Store API
const storeBrevoApiKey = async (apiKey: string) => {
const stripe = createHttpClient(STRIPE_API_KEY);
await stripe.apps.secrets.create({
name: 'brevo_api_key',
payload: apiKey,
scope: { type: 'account' },
});
};
// Good: Retrieve secrets from the Secret Store
const getBrevoApiKey = async () => {
const stripe = createHttpClient(STRIPE_API_KEY);
const secret = await stripe.apps.secrets.find({
name: 'brevo_api_key',
scope: { type: 'account' },
});
return secret.payload;
};

Lagre aldri sensitive data i:

  • Local storage eller session storage
  • Informasjonskapsler
  • URL-parametere
  • Hardkodede verdier i kildekoden
  • Konfigurasjonsfiler i klartekst

Kryptografi

  • Ingen egen kryptografi: Ikke lag dine egne krypteringsalgoritmer
  • Bruk de innebygde sikkerhetsprimitivene i Stripe (Secret Store, signeringshemmeligheter)
  • Bruk HTTPS for alle eksterne API-kall
  • Valider alle webhook-signaturer før du behandler dem

Databehandling

  • Be bare om tillatelsene appen din faktisk trenger
  • Ikke lagre Stripe-data utover det funksjonaliteten krever
  • Innfør retningslinjer for lagringstid som samsvarer med personvernerklæringen din
  • Gi brukerne en måte å be om sletting av data på

Juridisk etterlevelse

Personvernerklæring

Appen din må ha en offentlig tilgjengelig personvernerklæring som dekker:

  • Hvilke data appen din henter fra Stripe
  • Hvordan dataene lagres, behandles og deles
  • Retningslinjer for lagring og sletting av data
  • Brukernes rettigheter til egne data
  • Kontaktinformasjon for spørsmål om personvern
  • Etterlevelse av gjeldende regelverk (GDPR, CCPA og lignende)

Vilkår for bruk

  • Lag tydelige vilkår for bruk av appen din
  • Ikke ta med vilkår som er i strid med Stripes egne vilkår
  • Si tydelig fra om eventuelle begrensninger i bruken

Regulatorisk etterlevelse

  • Etterlev alt gjeldende regelverk om databeskyttelse
  • Innfør nødvendige databehandleravtaler
  • Støtt forespørsler om dataportabilitet og sletting
  • Før revisjonslogg over tilgang til og behandling av data

Tidslinje for gjennomgangen

TrinnVarighet
Første innsending5-10 virkedager
Gjennomgang av revidert versjon3-7 virkedager
Endelig godkjenning1-2 virkedager
PubliseringUmiddelbart etter godkjenning

Tip

Ta hånd om alle tilbakemeldingene fra gjennomgangen i én og samme revisjon, slik at du unngår flere runder. Stripe-teamet gir konkrete tilbakemeldinger du kan handle på, for hvert problem de finner.

Vanlige grunner til avvisning

  1. Manglende feilhåndtering, appen krasjer ved nettverksfeil eller uventede data
  2. For dårlige lastetilstander, blanke skjermer mens data hentes
  3. Uklar prising, prisen er ikke oppgitt fullt ut i oppføringen
  4. For mange tillatelser, appen ber om tillatelser den ikke trenger
  5. Ødelagt sandkassemodus, appen fungerer ikke i testmodus
  6. Sikkerhetsproblemer, hemmeligheter lagres utenfor Secret Store API
  7. Manglende personvernerklæring, ingen tilgjengelig URL til personvernerklæringen
  8. Ufullstendig funksjonalitet, «kommer snart»-funksjoner eller plassholderinnhold

Be om tidlig tilgang

Skriv inn fornavnet ditt og en e-postadresse eller et telefonnummer. Vi kontakter deg med informasjon om tilgang til Tajo.

automatisk gjenkjenning
AI-assistent

Hei! Spør meg om dokumentasjonen.