---
title: "Wymagania jakościowe weryfikacji aplikacji | Tajo"
description: "Standardy jakości, bezpieczeństwa, UX i zgodności prawnej, które musi spełnić Twoja aplikacja Stripe App, aby przejść weryfikację"
url: https://tajo.io/pl/docs/stripe-apps/review-requirements/
markdown: https://tajo.io/pl/docs/stripe-apps/review-requirements.md
lang: pl-PL
author: "Set Noa"
author_url: https://tajo.io/pl/set-noa/
robots: noindex
---

Poproś o wcześniejszy dostęp

Podaj imię i firmowy adres e-mail. Wyślemy Ci link potwierdzający prośbę o dostęp do Tajo.

# Wymagania jakościowe weryfikacji aplikacji

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

Stripe weryfikuje każdą aplikację zgłoszoną do marketplace według rozbudowanego zestawu wymagań jakościowych. Poznanie tych standardów przed rozpoczęciem prac oszczędza czas i zmniejsza liczbę poprawek w trakcie weryfikacji.

Caution

**Status: planowana, niezbudowana.** Tajo nie ma aplikacji Stripe App, więc niczego z tej sekcji nie można dziś zainstalować. Identyfikatory aplikacji, adresy URL i dane dostępowe na tej stronie są przykładowymi symbolami zastępczymi, a nie działającymi endpointami.

## Przegląd

Weryfikacja aplikacji Stripe App ocenia ją w sześciu kluczowych obszarach:

1. **Przejrzyste ceny**, czyli jasne komunikowanie kosztów
2. **Działanie aplikacji**, czyli niezawodność i kompletność
3. **Standardy programistyczne**, czyli jakość kodu i sposób korzystania z API
4. **Jakość UX**, czyli standardy interfejsu i doświadczenia użytkownika
5. **Bezpieczeństwo**, czyli ochrona danych i bezpieczne praktyki
6. **Zgodność prawna**, czyli wymogi dotyczące prywatności i regulacji

## Przejrzyste ceny

Twoja aplikacja musi jasno komunikować użytkownikom wszystkie koszty:

- **Ujawnienie cen**: wszystkie ceny muszą być podane z góry w ofercie w marketplace
- **Brak ukrytych opłat**: użytkownicy nie mogą natrafić na nieoczekiwane opłaty po instalacji
- **Warunki okresu próbnego**: jeśli oferujesz okres próbny, jasno podaj jego długość i to, co dzieje się po jego zakończeniu
- **Ścieżki zmiany planu**: wszelkie komunikaty sprzedażowe i propozycje wyższego planu muszą być nienachalne i wyraźnie opcjonalne
- **Waluta**: jeśli to możliwe, wyświetlaj ceny w lokalnej walucie użytkownika

Caution

Aplikacje, które ukrywają ceny lub obciążają użytkowników bez wyraźnej zgody, są odrzucane natychmiast.

## Formatowanie daty i godziny

Wszystkie daty i godziny wyświetlane w Twojej aplikacji muszą być zgodne z konwencjami panelu Stripe Dashboard:

- Formatuj daty według ustawień regionalnych użytkownika, jeśli są dostępne
- Wyświetlaj godziny w lokalnej strefie czasowej użytkownika
- Dla niedawnych zdarzeń używaj znaczników względnych (np. “2 godziny temu”)
- Dla starszych zdarzeń używaj znaczników bezwzględnych z pełną datą i godziną
- W polach dat kierowanych do API stosuj ISO 8601

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

## Ustawienia aplikacji

Jeśli Twoja aplikacja wymaga konfiguracji:

- Udostępnij osobny **widok ustawień** dostępny z poziomu okna aplikacji
- Wszędzie, gdzie to możliwe, ustaw rozsądne wartości domyślne
- Waliduj wszystkie dane wprowadzane przez użytkownika i pokazuj czytelne komunikaty o błędach
- Pozwól użytkownikom zmieniać ustawienia bez ponownej instalacji aplikacji
- Utrwalaj ustawienia między sesjami za pomocą Stripe Secret Store API

## Obsługa środowiska sandbox

Twoja aplikacja musi działać poprawnie w trybie sandbox (testowym) Stripe:

- **Zgodność z trybem testowym**: wszystkie funkcje muszą działać w trybie testowym
- **Dane testowe**: używaj realistycznych danych testowych, które pokazują możliwości aplikacji
- **Żadnych danych produkcyjnych w sandboxie**: nigdy nie udostępniaj danych produkcyjnych w trybie testowym
- **Kulturalna obsługa braków**: jeśli funkcja jest niedostępna w sandboxie, wyświetl czytelny komunikat wyjaśniający dlaczego
- Ustaw `sandbox_install_compatible: true` w swoim manifeście

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

## Działanie aplikacji

### Niezawodność

- Aplikacja nie może się zawieszać ani przestawać odpowiadać podczas normalnego użycia
- Wszystkie reklamowane funkcje muszą działać zgodnie z opisem
- Błędy sieciowe muszą być obsłużone kulturalnie, z możliwością ponowienia
- Aplikacja musi pozostawać responsywna podczas operacji w tle

### Kompletność

- Żadnych treści zastępczych, funkcji “wkrótce” ani niedziałających linków
- Wszystkie elementy interfejsu muszą działać, bez martwych przycisków i nieaktywnych kontrolek
- Teksty pomocy i linki do dokumentacji muszą prowadzić do istniejących stron
- Odinstalowanie musi czysto usuwać wszystkie dane aplikacji i webhooki

### Wydajność

- Interfejs musi renderować się w ciągu 3 sekund przy standardowym łączu
- Synchronizacja w tle nie może blokować interfejsu
- Duże zbiory danych muszą korzystać ze stronicowania lub leniwego ładowania
- Ograniczaj liczbę zapytań do API, aby nie przekraczać limitów

## Standardy programistyczne

### Korzystanie z API

- Używaj najnowszej stabilnej wersji API Stripe
- Stosuj dobre praktyki API Stripe dotyczące stronicowania, obsługi błędów i idempotencji
- Nie przekraczaj limitów zapytań, przy ponowieniach stosuj wykładnicze wycofanie
- Do aktualizacji sterowanych zdarzeniami używaj webhooków zamiast odpytywania

### Jakość kodu

- Żadnych błędów i ostrzeżeń w konsoli w buildach produkcyjnych
- Przed zgłoszeniem usuń całe logowanie diagnostyczne
- Obsłuż wszystkie przypadki brzegowe (puste stany, brakujące dane, awarie sieci)
- Stosuj wzorce biblioteki komponentów Stripe, aby interfejs był spójny

### Wersjonowanie

- Stosuj wersjonowanie semantyczne (MAJOR.MINOR.PATCH)
- Dokumentuj zmiany łamiące zgodność w opisach aktualizacji
- Tam, gdzie to możliwe, zachowuj wsteczną zgodność

## Jakość UX

### Reklamy

- **Żadnych reklam**: Twoja aplikacja nie może wyświetlać reklam w jakiejkolwiek formie
- **Żadnej promocji krzyżowej**: nie promuj innych produktów ani usług w interfejsie aplikacji
- **Treści markowe**: prezentuj wyłącznie własną identyfikację wizualną, a nie marki trzecie (poza partnerami integracyjnymi, takimi jak Brevo)

### Język i treść

- **Spójny język**: stosuj spójną terminologię w całej aplikacji
- **Profesjonalny ton**: dopasuj się do profesjonalnego i zwięzłego stylu komunikacji panelu Stripe Dashboard
- **Bez żargonu**: unikaj technicznego żargonu, którego sprzedawcy mogą nie rozumieć
- **Sprawdzanie pisowni**: zadbaj, aby wszystkie teksty były wolne od błędów ortograficznych i gramatycznych
- **Tylko po angielsku**: w aplikacjach z marketplace cały tekst widoczny dla użytkownika musi być po angielsku

### Okna potwierdzenia

Wymagaj potwierdzenia użytkownika przy działaniach destrukcyjnych lub istotnych:

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

Działania wymagające potwierdzenia:

- Rozłączanie integracji
- Usuwanie zsynchronizowanych danych
- Zmiana ustawień wpływających na przepływ danych
- Przywracanie konfiguracji domyślnej

### Stany ładowania

Zawsze pokazuj wskaźniki ładowania przy operacjach asynchronicznych:

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

Wymagania:

- Podczas ładowania danych pokazuj spinnery lub szkielety ekranów
- Blokuj przyciski w trakcie wysyłania formularza
- Przy długotrwałych operacjach wyświetlaj wskaźniki postępu
- Nigdy nie pokazuj pustego ekranu podczas ładowania

### Komunikaty o błędach

Podawaj jasne komunikaty o błędach, na które można zareagować:

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

Zasady tworzenia komunikatów o błędach:

- Wyjaśnij prostym językiem, co się stało
- Zaproponuj konkretne działanie, które rozwiąże problem
- Daj możliwość ponowienia nieudanej operacji
- Zapisuj szczegółowe informacje o błędzie do celów diagnostycznych (niewidoczne dla użytkownika)
- Tam, gdzie ma to sens, dołączaj kody błędów na potrzeby wsparcia

## Bezpieczeństwo

### Secret Store API

Do przechowywania wszystkich wrażliwych danych używaj Stripe Secret Store API:

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

**Nigdy** nie przechowuj wrażliwych danych w:

- Local storage ani session storage
- Plikach cookie
- Parametrach URL
- Wartościach zapisanych na stałe w kodzie źródłowym
- Plikach konfiguracyjnych w postaci zwykłego tekstu

### Kryptografia

- **Żadnej własnej kryptografii**: nie implementuj własnych algorytmów szyfrowania
- Korzystaj z wbudowanych mechanizmów bezpieczeństwa Stripe (Secret Store, sekrety podpisu)
- Wszystkie zewnętrzne wywołania API prowadź przez HTTPS
- Przed przetworzeniem waliduj wszystkie podpisy webhooków

### Postępowanie z danymi

- Proś wyłącznie o uprawnienia, których Twoja aplikacja rzeczywiście potrzebuje
- Nie przechowuj danych Stripe wykraczających poza to, co jest niezbędne do działania
- Wdróż zasady retencji danych spójne z Twoją polityką prywatności
- Zapewnij mechanizm, dzięki któremu użytkownicy mogą zażądać usunięcia danych

## Zgodność prawna

### Polityka prywatności

Twoja aplikacja musi mieć publicznie dostępną politykę prywatności, która obejmuje:

- Jakie dane Twoja aplikacja zbiera ze Stripe
- Jak dane są przechowywane, przetwarzane i udostępniane
- Zasady retencji i usuwania danych
- Prawa użytkowników do ich danych
- Dane kontaktowe w sprawach dotyczących prywatności
- Zgodność z obowiązującymi regulacjami (GDPR, CCPA itp.)

### Regulamin

- Udostępnij czytelny regulamin swojej aplikacji
- Nie umieszczaj w nim zapisów sprzecznych z regulaminem Stripe
- Jasno opisz wszelkie ograniczenia korzystania z aplikacji

### Zgodność z przepisami

- Przestrzegaj wszystkich obowiązujących przepisów o ochronie danych
- Wdróż odpowiednie umowy powierzenia przetwarzania danych
- Obsługuj żądania przenoszenia i usunięcia danych
- Prowadź logi audytowe dostępu do danych i ich przetwarzania

## Harmonogram procesu weryfikacji

| Etap | Czas trwania |
| --- | --- |
| Pierwsze zgłoszenie | 5 do 10 dni roboczych |
| Weryfikacja poprawek | 3 do 7 dni roboczych |
| Ostateczna akceptacja | 1 do 2 dni roboczych |
| Publikacja | Natychmiast po akceptacji |

Tip

Uwzględnij wszystkie uwagi z weryfikacji w jednej poprawce, aby uniknąć wielu cykli weryfikacji. Zespół Stripe przekazuje konkretne uwagi wraz z zaleceniami dla każdego znalezionego problemu.

## Najczęstsze powody odrzucenia

1. **Brak obsługi błędów**, aplikacja zawiesza się przy błędach sieci lub nieoczekiwanych danych
2. **Niewystarczające stany ładowania**, puste ekrany podczas pobierania danych
3. **Niejasne ceny**, ceny nie zostały w pełni ujawnione w ofercie
4. **Nadmiarowe uprawnienia**, prośba o uprawnienia, których aplikacja nie potrzebuje
5. **Niedziałający tryb sandbox**, aplikacja nie działa w trybie testowym
6. **Problemy z bezpieczeństwem**, przechowywanie sekretów poza Secret Store API
7. **Brak polityki prywatności**, brak dostępnego adresu URL polityki prywatności
8. **Niekompletna funkcjonalność**, funkcje “wkrótce” lub treści zastępcze
