Zahtjevi kvalitete za pregled aplikacije
Stripe pregledava svaku aplikaciju poslanu na marketplace prema sveobuhvatnom skupu zahtjeva kvalitete. Razumijevanje tih standarda prije razvoja štedi vrijeme i smanjuje broj krugova pregleda.
Pregled
Pregled Stripe aplikacije ocjenjuje vašu aplikaciju kroz šest ključnih područja:
- Transparentne cijene, jasna komunikacija troškova
- Funkcionalnost aplikacije, pouzdanost i potpunost
- Standardi za razvojne programere, kvaliteta koda i korištenje API-ja
- Kvaliteta korisničkog iskustva, standardi korisničkog sučelja i iskustva
- Sigurnost, zaštita podataka i sigurne prakse
- Pravna usklađenost, zahtjevi privatnosti i regulative
Transparentne cijene
Vaša aplikacija mora jasno komunicirati sve troškove korisnicima:
- Objava cijena: sve cijene moraju biti unaprijed navedene u oglasu na marketplaceu
- Bez skrivenih naknada: korisnici ne smiju naići na neočekivane troškove nakon instalacije
- Uvjeti probnog razdoblja: ako nudite probno razdoblje, jasno navedite njegovo trajanje i što se događa kada završi
- Tijekovi nadogradnje: svaki poticaj na nadogradnju ili dodatnu prodaju mora biti nenametljiv i jasno neobavezan
- Valuta: prikazujte cijene u lokalnoj valuti korisnika kad god je to moguće
Caution
Aplikacije koje zamagljuju cijene ili naplaćuju korisnicima bez jasnog pristanka bit će odmah odbijene.
Oblikovanje datuma i vremena
Svi datumi i vremena prikazani u vašoj aplikaciji moraju slijediti konvencije sučelja Stripe Dashboard:
- Koristite lokalizaciju korisnika za oblikovanje datuma kada je dostupna
- Prikazujte vremena u lokalnoj vremenskoj zoni korisnika
- Koristite relativne vremenske oznake za nedavne događaje (npr. „prije 2 sata“)
- Koristite apsolutne vremenske oznake za starije događaje, s punim datumom i vremenom
- Slijedite ISO 8601 za sva polja s datumima okrenuta prema API-ju
// 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"Postavke aplikacije
Ako vaša aplikacija zahtijeva konfiguraciju:
- Osigurajte namjenski prikaz postavki dostupan iz prozora aplikacije
- Unaprijed popunite razumne zadane vrijednosti gdje je to moguće
- Provjerite valjanost svih korisničkih unosa uz jasne poruke o pogreškama
- Dopustite korisnicima da ažuriraju postavke bez ponovne instalacije aplikacije
- Trajno pohranite postavke između sesija pomoću Stripe Secret Store API-ja
Podrška za sandbox
Vaša aplikacija mora ispravno raditi u Stripe sandboxu (testnom načinu rada):
- Kompatibilnost s testnim načinom rada: sve značajke moraju raditi u testnom načinu rada
- Testni podaci: koristite realistične testne podatke koji pokazuju funkcionalnost aplikacije
- Bez stvarnih podataka u sandboxu: nikada ne izlažite produkcijske podatke u testnom načinu rada
- Elegantno rukovanje: ako značajka nije dostupna u sandboxu, prikažite jasnu poruku s objašnjenjem zašto
- Postavite
sandbox_install_compatible: trueu svom manifestu
{ "sandbox_install_compatible": true}Funkcionalnost aplikacije
Pouzdanost
- Aplikacija se ne smije rušiti ni zamrzavati tijekom uobičajenog korištenja
- Sve oglašene značajke moraju raditi kako je opisano
- Mrežnim pogreškama mora se elegantno rukovati uz mogućnost ponovnog pokušaja
- Aplikacija mora ostati odzivna tijekom pozadinskih operacija
Potpunost
- Bez rezerviranog sadržaja, značajki „uskoro“ ili neispravnih poveznica
- Svi elementi sučelja moraju biti funkcionalni, bez mrtvih gumba ili neaktivnih kontrola
- Poveznice na tekst pomoći i dokumentaciju moraju voditi na valjane stranice
- Deinstalacija mora u cijelosti ukloniti sve podatke aplikacije i webhookove
Performanse
- Sučelje se mora iscrtati unutar 3 sekunde na standardnoj vezi
- Pozadinske operacije sinkronizacije ne smiju blokirati sučelje
- Veliki skupovi podataka moraju koristiti straničenje ili odgođeno učitavanje
- Svedite pozive API-ja na najmanju mjeru kako biste izbjegli ograničenja brzine
Standardi za razvojne programere
Korištenje API-ja
- Koristite najnoviju stabilnu verziju Stripe API-ja
- Slijedite najbolje prakse Stripe API-ja za straničenje, rukovanje pogreškama i idempotentnost
- Ne prekoračujte ograničenja brzine, implementirajte eksponencijalno odgađanje za ponovne pokušaje
- Koristite webhookove za ažuriranja vođena događajima umjesto stalnog ispitivanja
Kvaliteta koda
- Bez pogrešaka ili upozorenja u konzoli u produkcijskim izdanjima
- Uklonite sve zapise za otklanjanje pogrešaka prije slanja
- Obradite sve rubne slučajeve (prazna stanja, podaci koji nedostaju, mrežni ispadi)
- Slijedite obrasce biblioteke komponenti platforme Stripe radi dosljednog sučelja
Verzioniranje
- Koristite semantičko verzioniranje (MAJOR.MINOR.PATCH)
- Dokumentirajte prekidajuće promjene u ažuriranjima verzija
- Održavajte kompatibilnost unatrag gdje je to moguće
Kvaliteta korisničkog iskustva
Oglašavanje
- Bez oglasa: vaša aplikacija ne smije prikazivati oglase bilo koje vrste
- Bez unakrsne promocije: ne promovirajte druge proizvode ni usluge unutar sučelja aplikacije
- Brendirani sadržaj: prikazujte samo vlastiti brend, a ne brendove trećih strana (osim partnera za integraciju poput Breva)
Jezik i sadržaj
- Dosljedan jezik: koristite dosljednu terminologiju kroz cijelu aplikaciju
- Profesionalan ton: uskladite se s profesionalnim i sažetim stilom komunikacije sučelja Stripe Dashboard
- Bez žargona: izbjegavajte tehnički žargon koji trgovci možda neće razumjeti
- Provjera pravopisa: pobrinite se da tekst nema pravopisnih ni gramatičkih pogrešaka
- Samo engleski: sav tekst vidljiv korisniku mora biti na engleskom za aplikacije na marketplaceu
Dijalozi za potvrdu
Zatražite potvrdu korisnika za destruktivne ili značajne radnje:
// 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(); }};Radnje koje zahtijevaju potvrdu:
- Prekid veze integracija
- Brisanje sinkroniziranih podataka
- Promjena postavki koje utječu na protok podataka
- Vraćanje konfiguracije na zadane vrijednosti
Stanja učitavanja
Uvijek prikazujte pokazatelje učitavanja za asinkrone operacije:
// 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} />;};Zahtjevi:
- Prikažite vrtuljke ili kosturne zaslone tijekom učitavanja podataka
- Onemogućite gumbe tijekom slanja obrasca
- Prikažite pokazatelje napretka za dugotrajne operacije
- Nikada ne prikazujte prazan zaslon tijekom učitavanja
Poruke o pogreškama
Ponudite jasne poruke o pogreškama na koje se može djelovati:
// 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."Smjernice za poruke o pogreškama:
- Objasnite što se dogodilo jednostavnim jezikom
- Predložite konkretnu radnju kojom korisnik može riješiti problem
- Omogućite način za ponovni pokušaj neuspjele operacije
- Zabilježite detaljne podatke o pogrešci za otklanjanje problema (koji se ne prikazuju korisnicima)
- Navedite šifre pogrešaka za potrebe podrške kada je to primjenjivo
Sigurnost
Secret Store API
Koristite Secret Store API platforme Stripe za pohranu svih osjetljivih podataka:
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;};Nikada ne pohranjujte osjetljive podatke u:
- Lokalnu pohranu ili pohranu sesije
- Kolačiće
- Parametre URL-a
- Vrijednosti tvrdo kodirane u izvornom kodu
- Konfiguracijske datoteke u čistom tekstu
Kriptografija
- Bez vlastite kriptografije: ne implementirajte vlastite algoritme za šifriranje
- Koristite ugrađene sigurnosne primitive platforme Stripe (Secret Store, tajne za potpisivanje)
- Koristite HTTPS za sve vanjske pozive API-ja
- Provjerite valjanost svih potpisa webhookova prije obrade
Rukovanje podacima
- Tražite samo dopuštenja koja vaša aplikacija stvarno treba
- Ne pohranjujte Stripe podatke izvan onoga što je nužno za funkcionalnost
- Uvedite pravila zadržavanja podataka usklađena s vašim pravilima privatnosti
- Osigurajte mehanizam kojim korisnici mogu zatražiti brisanje podataka
Pravna usklađenost
Pravila privatnosti
Vaša aplikacija mora imati javno dostupna pravila privatnosti koja pokrivaju:
- Koje podatke vaša aplikacija prikuplja iz platforme Stripe
- Kako se podaci pohranjuju, obrađuju i dijele
- Pravila zadržavanja i brisanja podataka
- Prava korisnika u vezi s njihovim podacima
- Kontaktne podatke za upite o privatnosti
- Usklađenost s primjenjivim propisima (GDPR, CCPA itd.)
Uvjeti pružanja usluge
- Osigurajte jasne uvjete pružanja usluge za svoju aplikaciju
- Ne uključujte uvjete koji su u sukobu s uvjetima pružanja usluge platforme Stripe
- Jasno navedite sva ograničenja korištenja
Regulatorna usklađenost
- Uskladite se sa svim primjenjivim propisima o zaštiti podataka
- Sklopite odgovarajuće ugovore o obradi podataka
- Podržite zahtjeve za prenosivost i brisanje podataka
- Vodite revizijske zapise o pristupu podacima i njihovoj obradi
Vremenski okvir procesa pregleda
| Faza | Trajanje |
|---|---|
| Početno slanje | 5-10 radnih dana |
| Pregled izmjena | 3-7 radnih dana |
| Konačno odobrenje | 1-2 radna dana |
| Objava | Odmah nakon odobrenja |
Tip
Riješite sve povratne informacije iz pregleda u jednoj izmjeni kako biste izbjegli višestruke krugove pregleda. Tim platforme Stripe daje konkretne povratne informacije na koje se može djelovati za svaki pronađeni problem.
Česti razlozi odbijanja
- Nedostatak rukovanja pogreškama, aplikacija se ruši pri mrežnim pogreškama ili neočekivanim podacima
- Nedostatna stanja učitavanja, prazni zasloni tijekom dohvaćanja podataka
- Nejasne cijene, cijene nisu u potpunosti objavljene u oglasu
- Prekomjerna dopuštenja, traženje dopuštenja koja aplikaciji nisu potrebna
- Neispravan sandbox način rada, aplikacija ne radi u testnom načinu rada
- Sigurnosni problemi, pohrana tajni izvan Secret Store API-ja
- Nedostatak pravila privatnosti, nema dostupnog URL-a s pravilima privatnosti
- Nepotpuna funkcionalnost, značajke „uskoro“ ili rezervirani sadržaj