Zahteve kakovosti za pregled aplikacije
Stripe vsako aplikacijo, oddano na marketplace, pregleda glede na obsežen nabor zahtev kakovosti. Če te standarde poznate že pred razvojem, prihranite čas in zmanjšate število ponovitev pregleda.
Pregled
Pregled aplikacije Stripe App ovrednoti vašo aplikacijo na šestih ključnih področjih:
- Pregledne cene, jasno sporočanje stroškov
- Delovanje aplikacije, zanesljivost in celovitost
- Razvojni standardi, kakovost kode in uporaba API
- Kakovost UX, standardi uporabniškega vmesnika in izkušnje
- Varnost, zaščita podatkov in varne prakse
- Pravna skladnost, zasebnost in regulativne zahteve
Pregledne cene
Vaša aplikacija mora uporabnikom jasno sporočati vse stroške:
- Razkritje cen: vse cene morajo biti vnaprej navedene v vpisu na marketplace
- Brez skritih stroškov: uporabniki po namestitvi ne smejo naleteti na nepričakovane obračune
- Pogoji preizkusa: če ponujate preizkusno obdobje, jasno navedite njegovo trajanje in kaj se zgodi po izteku
- Postopki nadgradnje: vsako spodbujanje k nadgradnji ali dodatnemu nakupu mora biti nevsiljivo in očitno neobvezno
- Valuta: cene prikazujte v lokalni valuti uporabnika, kadar je to mogoče
Caution
Aplikacije, ki prikrivajo cene ali uporabnikom zaračunavajo brez jasne privolitve, bodo takoj zavrnjene.
Oblikovanje datuma in časa
Vsi datumi in časi, prikazani v vaši aplikaciji, morajo slediti konvencijam nadzorne plošče Stripe Dashboard:
- Za oblikovanje datuma uporabite jezikovno nastavitev uporabnika, kadar je na voljo
- Čase prikazujte v lokalnem časovnem pasu uporabnika
- Za nedavne dogodke uporabite relativne časovne oznake (na primer „pred 2 urama“)
- Za starejše dogodke uporabite absolutne časovne oznake s polnim datumom in časom
- Za vsa datumska polja, namenjena API, upoštevajte ISO 8601
// Good: Use Stripe's date formatting utilitiesimport { formatDate, formatRelativeTime } from '@stripe/ui-extension-sdk/utils';
const formattedDate = formatDate(timestamp); // Locale-awareconst relativeTime = formatRelativeTime(timestamp); // "2 hours ago"Nastavitve aplikacije
Če vaša aplikacija potrebuje konfiguracijo:
- Zagotovite namenski pogled z nastavitvami, dostopen iz vidnega polja aplikacije
- Kjer je mogoče, vnaprej izpolnite smiselne privzete vrednosti
- Preverite vse uporabniške vnose in ob napaki prikažite jasno sporočilo
- Uporabnikom omogočite posodabljanje nastavitev brez ponovne namestitve aplikacije
- Nastavitve ohranjajte med sejami z uporabo Stripe Secret Store API
Podpora za peskovnik
Vaša aplikacija mora pravilno delovati v peskovniku (testnem načinu) Stripe:
- Združljivost s testnim načinom: vse funkcije morajo delovati v testnem načinu
- Testni podatki: uporabite realistične testne podatke, ki prikazujejo delovanje aplikacije
- Brez produkcijskih podatkov v peskovniku: v testnem načinu nikoli ne izpostavljajte produkcijskih podatkov
- Elegantno ravnanje: če funkcija v peskovniku ni na voljo, prikažite jasno sporočilo z razlago, zakaj
- V svojem manifestu nastavite
sandbox_install_compatible: true
{ "sandbox_install_compatible": true}Delovanje aplikacije
Zanesljivost
- Aplikacija se med običajno uporabo ne sme sesuti ali zamrzniti
- Vse oglaševane funkcije morajo delovati tako, kot so opisane
- Omrežne napake je treba obravnavati elegantno, z možnostjo ponovnega poskusa
- Aplikacija mora med operacijami v ozadju ostati odzivna
Celovitost
- Brez nadomestne vsebine, funkcij z oznako „kmalu na voljo“ ali nedelujočih povezav
- Vsi elementi UI morajo delovati, brez mrtvih gumbov ali neaktivnih kontrolnikov
- Besedilo pomoči in povezave do dokumentacije morajo voditi na veljavne strani
- Odstranitev mora čisto odstraniti vse podatke aplikacije in webhooke
Zmogljivost
- UI se mora pri standardni povezavi izrisati v 3 sekundah
- Operacije sinhronizacije v ozadju ne smejo blokirati UI
- Veliki nabori podatkov morajo uporabljati oštevilčenje strani ali leno nalaganje
- Zmanjšajte število klicev API, da se izognete omejevanju zahtev
Razvojni standardi
Uporaba API
- Uporabljajte najnovejšo stabilno različico Stripe API
- Upoštevajte najboljše prakse Stripe API za oštevilčenje strani, obravnavo napak in idempotentnost
- Ne presezite omejitev števila zahtev, za ponovne poskuse uvedite eksponentni odmik
- Za posodobitve, ki jih poganjajo dogodki, namesto pogostega poizvedovanja uporabljajte webhooke
Kakovost kode
- Brez napak ali opozoril v konzoli v produkcijskih gradnjah
- Pred oddajo odstranite vse razhroščevalno beleženje
- Obravnavajte vse robne primere (prazna stanja, manjkajoči podatki, omrežne napake)
- Za dosleden UI upoštevajte vzorce knjižnice komponent Stripe
Različice
- Uporabljajte semantično določanje različic (MAJOR.MINOR.PATCH)
- Prelomne spremembe dokumentirajte ob posodobitvah različic
- Kjer je mogoče, ohranjajte združljivost za nazaj
Kakovost UX
Oglaševanje
- Brez oglasov: vaša aplikacija ne sme prikazovati oglasov kakršne koli vrste
- Brez navzkrižnega promoviranja: v uporabniškem vmesniku aplikacije ne promovirajte drugih izdelkov ali storitev
- Blagovna znamka: prikazujte samo lastno identiteto blagovne znamke, ne pa znamk tretjih oseb (razen partnerjev za integracijo, kot je Brevo)
Jezik in vsebina
- Dosleden jezik: v celotni aplikaciji uporabljajte dosledno terminologijo
- Profesionalen ton: uskladite se s profesionalnim in jedrnatim slogom sporočanja nadzorne plošče Stripe Dashboard
- Brez žargona: izogibajte se tehničnemu žargonu, ki ga trgovci morda ne razumejo
- Preverjanje črkovanja: poskrbite, da je vse besedilo brez pravopisnih in slovničnih napak
- Samo angleščina: vse besedilo, ki ga vidi uporabnik, mora biti pri aplikacijah na marketplace v angleščini
Potrditvena pogovorna okna
Za uničujoča ali pomembna dejanja zahtevajte potrditev uporabnika:
// Good: Confirm before destructive actionsconst 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(); }};Dejanja, ki zahtevajo potrditev:
- Prekinitev povezave z integracijami
- Brisanje sinhroniziranih podatkov
- Spreminjanje nastavitev, ki vplivajo na pretok podatkov
- Ponastavitev konfiguracije na privzete vrednosti
Stanja nalaganja
Za asinhrone operacije vedno prikažite kazalnike nalaganja:
// Good: Show loading state during data fetchconst 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} />;};Zahteve:
- Med nalaganjem podatkov prikažite vrtavke ali okostne zaslone
- Med pošiljanjem obrazca onemogočite gumbe
- Za dolgotrajne operacije prikažite kazalnike napredka
- Med nalaganjem nikoli ne prikazujte praznega zaslona
Sporočila o napakah
Zagotovite jasna sporočila o napakah, ki povedo, kaj storiti:
// Bad: Generic error"Something went wrong"
// Good: Specific and actionable"Unable to sync customer data to Brevo. Please verify your Brevo API keyin Settings and try again."Smernice za sporočila o napakah:
- Z vsakdanjim jezikom pojasnite, kaj se je zgodilo
- Predlagajte konkretno dejanje, s katerim lahko uporabnik odpravi težavo
- Ponudite način za ponovni poskus neuspele operacije
- Za razhroščevanje zabeležite podrobne informacije o napaki (ki se uporabnikom ne prikažejo)
- Kadar je to smiselno, navedite kode napak za sklicevanje pri podpori
Varnost
Secret Store API
Za shranjevanje vseh občutljivih podatkov uporabljajte Stripe Secret Store API:
import { createHttpClient, STRIPE_API_KEY } from '@stripe/ui-extension-sdk/http_client';
// Good: Store secrets using the Secret Store APIconst 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 Storeconst 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;};Občutljivih podatkov nikoli ne shranjujte v:
- lokalno shrambo ali shrambo seje
- piškotke
- parametre URL
- trdo kodirane vrednosti v izvorni kodi
- konfiguracijske datoteke z navadnim besedilom
Kriptografija
- Brez lastne kriptografije: ne izvajajte lastnih šifrirnih algoritmov
- Uporabljajte vgrajene varnostne gradnike Stripe (Secret Store, podpisne skrivnosti)
- Za vse zunanje klice API uporabljajte HTTPS
- Pred obdelavo preverite vse podpise webhookov
Ravnanje s podatki
- Zahtevajte samo dovoljenja, ki jih vaša aplikacija dejansko potrebuje
- Podatkov Stripe ne shranjujte v obsegu, ki presega potrebe delovanja
- Uvedite pravila hrambe podatkov, usklajena z vašo politiko zasebnosti
- Zagotovite mehanizem, prek katerega lahko uporabniki zahtevajo izbris podatkov
Pravna skladnost
Politika zasebnosti
Vaša aplikacija mora imeti javno dostopno politiko zasebnosti, ki pokriva:
- katere podatke vaša aplikacija zbira iz Stripe
- kako se podatki shranjujejo, obdelujejo in delijo
- pravila hrambe in izbrisa podatkov
- pravice uporabnikov glede njihovih podatkov
- kontaktne podatke za vprašanja o zasebnosti
- skladnost z veljavnimi predpisi (GDPR, CCPA in podobno)
Pogoji storitve
- Za svojo aplikacijo zagotovite jasne pogoje storitve
- Ne vključujte pogojev, ki so v nasprotju s pogoji storitve Stripe
- Jasno navedite morebitne omejitve ali prepovedi uporabe
Regulativna skladnost
- Upoštevajte vse veljavne predpise o varstvu podatkov
- Sklenite ustrezne pogodbe o obdelavi podatkov
- Podprite zahteve za prenosljivost in izbris podatkov
- Vodite revizijske dnevnike o dostopu do podatkov in njihovi obdelavi
Časovnica postopka pregleda
| Faza | Trajanje |
|---|---|
| Prva oddaja | 5-10 delovnih dni |
| Pregled popravkov | 3-7 delovnih dni |
| Končna odobritev | 1-2 delovna dneva |
| Objava | takoj po odobritvi |
Tip
Vse povratne informacije iz pregleda obravnavajte v eni sami reviziji, da se izognete več krogom pregleda. Ekipa Stripe za vsako najdeno težavo poda konkretne povratne informacije, ki povedo, kaj storiti.
Pogosti razlogi za zavrnitev
- Manjkajoča obravnava napak, aplikacija se sesuje ob omrežnih napakah ali nepričakovanih podatkih
- Nezadostna stanja nalaganja, prazni zasloni med pridobivanjem podatkov
- Nejasne cene, cene v vpisu niso v celoti razkrite
- Prekomerna dovoljenja, zahtevanje dovoljenj, ki jih aplikacija ne potrebuje
- Nedelujoč peskovnik, aplikacija ne deluje v testnem načinu
- Varnostne težave, shranjevanje skrivnosti zunaj Secret Store API
- Manjkajoča politika zasebnosti, ni dostopnega naslova URL politike zasebnosti
- Nepopolno delovanje, funkcije z oznako „kmalu na voljo“ ali nadomestna vsebina