---
title: "Zahtevi kvaliteta pri pregledu aplikacije | Tajo"
description: "Standardi kvaliteta, bezbednosti, UX-a i pravne usklađenosti koje vaša Stripe App mora da ispuni da bi prošla pregled"
url: https://tajo.io/sr/docs/stripe-apps/review-requirements/
markdown: https://tajo.io/sr/docs/stripe-apps/review-requirements.md
lang: sr-Latn-RS
author: "Set Noa"
author_url: https://tajo.io/sr/set-noa/
robots: noindex
---

Zatražite rani pristup

Unesite ime i poslovnu adresu e-pošte. Poslaćemo vam vezu za potvrdu zahteva za pristup Taju.

# Zahtevi kvaliteta pri pregledu aplikacije

[Set Noa](https://tajo.io/sr/set-noa/)

Stripe pregleda svaku aplikaciju prijavljenu za marketplace prema sveobuhvatnom skupu zahteva kvaliteta. Ako ove standarde razumete pre razvoja, uštedećete vreme i smanjiti broj krugova pregleda.

Caution

**Status: planirano, nije izrađeno.** Tajo nema Stripe aplikaciju, pa ništa iz ovog odeljka danas ne može da se instalira. Identifikatori aplikacije, adrese i akreditivi na ovoj stranici su ilustrativni rezervisani primeri, a ne aktivne krajnje tačke.

## Pregled

Pregled Stripe App ocenjuje vašu aplikaciju kroz šest ključnih oblasti:

1. **Transparentne cene**, jasno saopštavanje troškova
2. **Funkcionalnost aplikacije**, pouzdanost i potpunost
3. **Standardi za programere**, kvalitet koda i upotreba API-ja
4. **Kvalitet UX-a**, standardi korisničkog interfejsa i iskustva
5. **Bezbednost**, zaštita podataka i bezbedne prakse
6. **Pravna usklađenost**, zahtevi privatnosti i regulative

## Transparentne cene

Vaša aplikacija mora jasno da saopšti sve troškove korisnicima:

- **Objavljivanje cena**: sve cene moraju biti navedene unapred u marketplace opisu
- **Bez skrivenih naknada**: korisnici ne smeju da naiđu na neočekivane troškove nakon instalacije
- **Uslovi probnog perioda**: ako nudite probni period, jasno navedite koliko traje i šta se dešava kada se završi
- **Tokovi nadogradnje**: svaki upit za dodatnu prodaju ili nadogradnju mora biti nenametljiv i jasno opcion
- **Valuta**: prikazujte cene u lokalnoj valuti korisnika kad god je to moguće

Caution

Aplikacije koje prikrivaju cene ili naplaćuju korisnicima bez jasnog pristanka biće odmah odbijene.

## Formatiranje datuma i vremena

Svi datumi i vremena prikazani u vašoj aplikaciji moraju da prate konvencije Stripe Dashboard-a:

- Koristite lokalizaciju korisnika za formatiranje datuma kada je dostupna
- Prikazujte vremena u lokalnoj vremenskoj zoni korisnika
- Koristite relativne vremenske oznake za skorašnje događaje (npr. „pre 2 sata”)
- Koristite apsolutne vremenske oznake sa punim datumom i vremenom za starije događaje
- Pratite ISO 8601 za sva polja sa datumom koja idu ka API-ju

```typescript
// 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"
```

## Podešavanja aplikacije

Ako vaša aplikacija zahteva konfigurisanje:

- Obezbedite poseban **pogled sa podešavanjima** dostupan iz viewport-a aplikacije
- Popunite razumne podrazumevane vrednosti kad god je to moguće
- Proveravajte sve korisničke unose uz jasne poruke o greškama
- Omogućite korisnicima da menjaju podešavanja bez ponovne instalacije aplikacije
- Trajno čuvajte podešavanja između sesija pomoću Stripe Secret Store API-ja

## Podrška za sandbox

Vaša aplikacija mora ispravno da radi u Stripe sandbox (test) režimu:

- **Kompatibilnost sa test režimom**: sve funkcije moraju da rade u test režimu
- **Test podaci**: koristite realistične test podatke koji pokazuju funkcionalnost aplikacije
- **Bez live podataka u sandbox-u**: nikada ne izlažite produkcione podatke u test režimu
- **Elegantno rešavanje**: ako neka funkcija nije dostupna u sandbox-u, prikažite jasnu poruku sa objašnjenjem
- Postavite `sandbox_install_compatible: true` u svom manifestu

```json
{
  "sandbox_install_compatible": true
}
```

## Funkcionalnost aplikacije

### Pouzdanost

- Aplikacija ne sme da se ruši ni da se zamrzava tokom uobičajene upotrebe
- Sve oglašene funkcije moraju da rade kako je opisano
- Mrežne greške moraju da se obrađuju elegantno, uz mogućnost ponovnog pokušaja
- Aplikacija mora da ostane responzivna tokom operacija u pozadini

### Potpunost

- Bez sadržaja koji je samo popuna, funkcija sa oznakom „uskoro” i pokvarenih veza
- Svi elementi interfejsa moraju biti funkcionalni, bez mrtvih dugmadi i neaktivnih kontrola
- Tekstovi pomoći i veze ka dokumentaciji moraju da vode na važeće stranice
- Deinstalacija mora u potpunosti da ukloni sve podatke aplikacije i webhook-ove

### Performanse

- Interfejs mora da se prikaže u roku od 3 sekunde na standardnoj vezi
- Sinhronizacija u pozadini ne sme da blokira interfejs
- Veliki skupovi podataka moraju da koriste paginaciju ili odloženo učitavanje
- Svedite API pozive na najmanju meru da biste izbegli ograničenje broja zahteva

## Standardi za programere

### Upotreba API-ja

- Koristite najnoviju stabilnu verziju Stripe API-ja
- Pratite najbolje prakse Stripe API-ja za paginaciju, obradu grešaka i idempotentnost
- Ne prekoračujte ograničenja broja zahteva, primenite eksponencijalno odlaganje za ponovne pokušaje
- Koristite webhook-ove za ažuriranja vođena događajima umesto stalnog ispitivanja

### Kvalitet koda

- Bez grešaka i upozorenja u konzoli u produkcionim buildovima
- Uklonite sve debug zapise pre prijave
- Obradite sve granične slučajeve (prazna stanja, nedostajući podaci, mrežni prekidi)
- Pratite obrasce Stripe biblioteke komponenti radi doslednog interfejsa

### Verzionisanje

- Koristite semantičko verzionisanje (MAJOR.MINOR.PATCH)
- Dokumentujte promene koje narušavaju kompatibilnost u ažuriranjima verzija
- Održavajte kompatibilnost unazad kad god je moguće

## Kvalitet UX-a

### Oglašavanje

- **Bez reklama**: vaša aplikacija ne sme da prikazuje reklame bilo koje vrste
- **Bez unakrsne promocije**: ne promovišite druge proizvode ili usluge unutar interfejsa aplikacije
- **Brendirani sadržaj**: prikazujte samo sopstveni brend, ne i brendove trećih strana (osim integracionih partnera kao što je Brevo)

### Jezik i sadržaj

- **Dosledan jezik**: koristite doslednu terminologiju u celoj aplikaciji
- **Profesionalan ton**: uskladite se sa profesionalnim i sažetim stilom komunikacije Stripe Dashboard-a
- **Bez žargona**: izbegavajte tehnički žargon koji trgovci možda neće razumeti
- **Provera pravopisa**: postarajte se da sav tekst bude bez pravopisnih i gramatičkih grešaka
- **Samo engleski**: sav tekst vidljiv korisnicima mora biti na engleskom za marketplace aplikacije

### Dijalozi za potvrdu

Tražite potvrdu korisnika za destruktivne ili značajne akcije:

```typescript
// 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();
  }
};
```

Akcije koje zahtevaju potvrdu:

- Prekidanje veze sa integracijama
- Brisanje sinhronizovanih podataka
- Promena podešavanja koja utiču na tok podataka
- Vraćanje konfiguracije na podrazumevane vrednosti

### Stanja učitavanja

Uvek prikazujte indikatore učitavanja za asinhrone operacije:

```typescript
// 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} />;
};
```

Zahtevi:

- Prikazujte spinere ili skeletne ekrane tokom učitavanja podataka
- Onemogućite dugmad tokom slanja formulara
- Prikazujte indikatore napretka za dugotrajne operacije
- Nikada ne prikazujte prazan ekran tokom učitavanja

### Poruke o greškama

Obezbedite jasne poruke o greškama koje vode ka rešenju:

```typescript
// 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."
```

Smernice za poruke o greškama:

- Objasnite šta se dogodilo jednostavnim jezikom
- Predložite konkretnu akciju kojom korisnik može da reši problem
- Obezbedite način da se neuspela operacija ponovi
- Beležite detaljne informacije o grešci radi otklanjanja problema (koje se ne prikazuju korisnicima)
- Navedite kodove grešaka radi lakše podrške kada je to primenljivo

## Bezbednost

### Secret Store API

Koristite Stripe Secret Store API za čuvanje svih osetljivih podataka:

```typescript
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;
};
```

Osetljive podatke **nikada** ne čuvajte u:

- Local storage ili session storage
- Kolačićima
- URL parametrima
- Vrednostima upisanim direktno u izvorni kod
- Konfiguracionim fajlovima u čistom tekstu

### Kriptografija

- **Bez sopstvene kriptografije**: ne implementirajte sopstvene algoritme za šifrovanje
- Koristite ugrađene bezbednosne mehanizme platforme Stripe (Secret Store, tajne za potpisivanje)
- Koristite HTTPS za sve pozive spoljnih API-ja
- Proverite sve webhook potpise pre obrade

### Rukovanje podacima

- Tražite samo dozvole koje su vašoj aplikaciji zaista potrebne
- Ne čuvajte Stripe podatke izvan onoga što je neophodno za funkcionisanje
- Primenite politike čuvanja podataka usklađene sa svojom politikom privatnosti
- Obezbedite mehanizam preko kojeg korisnici mogu da zatraže brisanje podataka

## Pravna usklađenost

### Politika privatnosti

Vaša aplikacija mora da ima javno dostupnu politiku privatnosti koja obuhvata:

- Koje podatke vaša aplikacija prikuplja iz platforme Stripe
- Kako se podaci čuvaju, obrađuju i dele
- Politike čuvanja i brisanja podataka
- Prava korisnika u vezi sa njihovim podacima
- Kontakt podatke za upite o privatnosti
- Usklađenost sa važećim propisima (GDPR, CCPA i drugi)

### Uslovi korišćenja

- Obezbedite jasne uslove korišćenja za svoju aplikaciju
- Ne uključujte odredbe koje su u sukobu sa Stripe uslovima korišćenja
- Jasno navedite sva ograničenja upotrebe

### Regulatorna usklađenost

- Uskladite se sa svim važećim propisima o zaštiti podataka
- Sklopite odgovarajuće ugovore o obradi podataka
- Podržite zahteve za prenosivost i brisanje podataka
- Vodite revizijske zapise o pristupu podacima i njihovoj obradi

## Vremenski okvir procesa pregleda

| Faza | Trajanje |
| --- | --- |
| Prva prijava | 5-10 radnih dana |
| Pregled izmena | 3-7 radnih dana |
| Konačno odobrenje | 1-2 radna dana |
| Objavljivanje | Odmah nakon odobrenja |

Tip

Odgovorite na sve primedbe iz pregleda u jednoj izmeni kako biste izbegli više krugova pregleda. Stripe tim daje konkretne i primenljive povratne informacije za svaki uočeni problem.

## Uobičajeni razlozi za odbijanje

1. **Nedostaje obrada grešaka**, aplikacija se ruši pri mrežnim greškama ili neočekivanim podacima
2. **Nedovoljna stanja učitavanja**, prazni ekrani tokom preuzimanja podataka
3. **Nejasne cene**, cene nisu u potpunosti objavljene u opisu
4. **Prekomerne dozvole**, traže se dozvole koje aplikaciji nisu potrebne
5. **Neispravan sandbox režim**, aplikacija ne radi u test režimu
6. **Bezbednosni problemi**, čuvanje tajni izvan Secret Store API-ja
7. **Nedostaje politika privatnosti**, nema dostupnog URL-a politike privatnosti
8. **Nepotpuna funkcionalnost**, funkcije sa oznakom „uskoro” ili sadržaj koji je samo popuna
