---
title: "Kvalitetskrav för appgranskning | Tajo"
description: "Kvalitets-, säkerhets-, UX- och juridiska standarder som din Stripe App måste uppfylla för att godkännas i granskning"
url: https://tajo.io/se/docs/stripe-apps/review-requirements/
markdown: https://tajo.io/se/docs/stripe-apps/review-requirements.md
lang: sv-SE
author: "Set Noa"
author_url: https://tajo.io/se/set-noa/
robots: noindex
---

Ansök om tidig åtkomst

Ange ditt förnamn och din e-postadress på jobbet. Vi skickar en länk för att bekräfta din begäran om åtkomst till Tajo.

# Kvalitetskrav för appgranskning

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

Stripe granskar varje app som skickas in till marketplace mot en omfattande uppsättning kvalitetskrav. Att förstå dessa standarder innan utvecklingen sparar tid och minskar antalet granskningsiterationer.

Caution

**Status: planerad, inte byggd.** Tajo har ingen Stripe-app, så inget i det här avsnittet kan installeras i dag. App-ID:n, URL:er och inloggningsuppgifter på den här sidan är illustrativa platshållare, inte skarpa endpoints.

## Översikt

Stripe App-granskningen utvärderar din app inom sex nyckelområden:

1. **Transparent prissättning**, Tydlig kommunikation av kostnader
2. **Appfunktionalitet**, Tillförlitlighet och fullständighet
3. **Utvecklarstandards**, Kodkvalitet och API-användning
4. **UX-kvalitet**, Användargränssnitt och upplevelsestandarder
5. **Säkerhet**, Dataskydd och säkra metoder
6. **Juridisk efterlevnad**, Integritets- och regulatoriska krav

## Transparent prissättning

Din app måste tydligt kommunicera alla kostnader till användare:

- **Prisupplysning**: All prissättning måste anges i förväg i marketplace-listningen
- **Inga dolda avgifter**: Användare får inte möta oväntade avgifter efter installation
- **Provperiodsvill kor**: Om du erbjuder en provperiod, ange tydligt varaktigheten och vad som händer efter den
- **Uppgraderingsflöden**: Eventuella merförsäljnings- eller uppgraderingsuppmaningar måste vara icke-påträngande och tydligt frivilliga
- **Valuta**: Visa priser i användarens lokala valuta när möjligt

Caution

Appar som döljer prissättning eller debiterar användare utan tydligt samtycke avvisas omedelbart.

## Datum- och tidsformatering

Alla datum och tider som visas i din app måste följa Stripe Dashboard-konventioner:

- Använd användarens locale för datumformatering när tillgänglig
- Visa tider i användarens lokala tidszon
- Använd relativa tidsstämplar för nyliga händelser (t.ex. “2 timmar sedan”)
- Använd absoluta tidsstämplar för äldre händelser med fullständigt datum och tid
- Följ ISO 8601 för alla API-riktade datumfält

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

## Appinställningar

Om din app kräver konfiguration:

- Tillhandahåll en dedikerad **Inställningsvy** tillgänglig från appens viewport
- Fyll i förnuftiga standarder i förväg där möjligt
- Validera alla användarinmatningar med tydliga felmeddelanden
- Tillåt användare att uppdatera inställningar utan att installera om appen
- Bevara inställningar mellan sessioner med Stripe Secret Store API

## Sandboxstöd

Din app måste fungera korrekt i Stripes sandbox (test)-läge:

- **Testlägeskompatibilitet**: Alla funktioner måste fungera i testläge
- **Testdata**: Använd realistisk testdata som demonstrerar appfunktionalitet
- **Inga livedata i sandbox**: Exponera aldrig produktionsdata i testläge
- **Elegant hantering**: Om en funktion är otillgänglig i sandbox, visa ett tydligt meddelande som förklarar varför
- Ange `sandbox_install_compatible: true` i ditt manifest

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

## Appfunktionalitet

### Tillförlitlighet

- Appen får inte krascha eller frysa under normal användning
- Alla annonserade funktioner måste fungera som beskrivs
- Nätverksfel måste hanteras elegant med alternativ för nytt försök
- Appen måste förbli responsiv under bakgrundsoperationer

### Fullständighet

- Inget platshållarinnehåll, “kommer snart”-funktioner eller brutna länkar
- Alla UI-element måste vara funktionella – inga döda knappar eller inaktiva kontroller
- Hjälptext och dokumentationslänkar måste lösa till giltiga sidor
- Avinstallation måste rensa alla appdata och webhooks

### Prestanda

- UI måste renderas inom 3 sekunder på en standardanslutning
- Bakgrundssynkroniseringsoperationer får inte blockera UI:t
- Stora datamängder måste använda paginering eller lazy loading
- Minimera API-anrop för att undvika hastighetsbegränsning

## Utvecklarstandards

### API-användning

- Använd den senaste stabila versionen av Stripe API
- Följ Stripe API:s bästa metoder för paginering, felhantering och idempotens
- Överskriv inte hastighetsgränser – implementera exponentiell backoff för nya försök
- Använd webhooks för händelsedrivna uppdateringar istället för polling

### Kodkvalitet

- Inga konsolfel eller varningar i produktionsbyggen
- Ta bort all debugloggning innan inlämning
- Hantera alla kantfall (tomma tillstånd, saknad data, nätverksfel)
- Följ Stripes komponentbibliotekmönster för konsekvent UI

### Versionshantering

- Använd semantisk versionshantering (MAJOR.MINOR.PATCH)
- Dokumentera brytande ändringar i versionsuppdateringar
- Bibehåll bakåtkompatibilitet där möjligt

## UX-kvalitet

### Annonsering

- **Inga annonser**: Din app får inte visa annonser av något slag
- **Ingen korsmarknadsföring**: Marknadsför inte andra produkter eller tjänster inom app-UI:t
- **Varumärkt innehåll**: Visa bara din egen varumärkesidentitet, inte tredjepartsvarumärken (förutom integrationspartners som Brevo)

### Språk och innehåll

- **Konsekvent språk**: Använd konsekvent terminologi i hela appen
- **Professionell ton**: Matcha Stripe Dashboards professionella, kortfattade kommunikationsstil
- **Inget jargong**: Undvik teknisk jargong som säljare kanske inte förstår
- **Stavningskontroll**: Se till att all text är fri från stavnings- och grammatikfel
- **Endast engelska**: All användarvänlig text måste vara på engelska för marketplace-appar

### Bekräftelsedialoger

Kräv användarbekräftelse för destruktiva eller betydelsefulla åtgärder:

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

Åtgärder som kräver bekräftelse:

- Koppla ifrån integrationer
- Ta bort synkroniserad data
- Ändra inställningar som påverkar dataflödet
- Återställa konfiguration till standardvärden

### Laddningstillstånd

Visa alltid laddningsindikatorer för asynkrona operationer:

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

Krav:

- Visa spinners eller skelettskärmar under dataladdning
- Inaktivera knappar under formulärinlämning
- Visa förloppsindikatorer för långvariga operationer
- Visa aldrig en tom skärm under laddning

### Felmeddelanden

Tillhandahåll tydliga, åtgärdbara felmeddelanden:

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

Riktlinjer för felmeddelanden:

- Förklara vad som hände på vanligt språk
- Föreslå en specifik åtgärd som användaren kan vidta för att lösa problemet
- Tillhandahåll ett sätt att försöka utföra den misslyckade operationen igen
- Logga detaljerad felinformation för felsökning (visas inte för användare)
- Inkludera felkoder för supportreferens när tillämpligt

## Säkerhet

### Secret Store API

Använd Stripes Secret Store API för all lagring av känsliga data:

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

**Lagra aldrig** känsliga data i:

- Local storage eller session storage
- Cookies
- URL-parametrar
- Hårdkodade värden i källkoden
- Klartextskonfigurationsfiler

### Kryptografi

- **Ingen anpassad kryptografi**: Implementera inte dina egna krypteringsalgoritmer
- Använd Stripes inbyggda säkerhetsprimitiver (Secret Store, signeringshemligheter)
- Använd HTTPS för alla externa API-anrop
- Validera alla webhook-signaturer innan behandling

### Datahantering

- Begär bara behörigheter din app faktiskt behöver
- Lagra inte Stripe-data utöver vad som är nödvändigt för funktionalitet
- Implementera datalagringspolicyer som är i linje med din integritetspolicy
- Tillhandahåll en mekanism för användare att begära databorttagning

## Juridisk efterlevnad

### Integritetspolicy

Din app måste ha en offentligt tillgänglig integritetspolicy som täcker:

- Vilka data din app samlar in från Stripe
- Hur data lagras, behandlas och delas
- Policyer för datalagring och -borttagning
- Användarrättigheter angående deras data
- Kontaktinformation för integritetsförfrågningar
- Efterlevnad av tillämpliga förordningar (GDPR, CCPA osv.)

### Användarvillkor

- Tillhandahåll tydliga användarvillkor för din app
- Inkludera inte villkor som strider mot Stripes användarvillkor
- Ange tydligt eventuella användningsbegränsningar eller restriktioner

### Regulatorisk efterlevnad

- Följ alla tillämpliga dataskyddsförordningar
- Implementera lämpliga databehandlingsavtal
- Stöd begäranden om dataportabilitet och borttagning
- Bibehåll granskningsloggar för dataåtkomst och -behandling

## Tidslinje för granskningsprocessen

| Steg | Varaktighet |
| --- | --- |
| Första inlämning | 5-10 arbetsdagar |
| Revisionsgranskning | 3-7 arbetsdagar |
| Slutligt godkännande | 1-2 arbetsdagar |
| Publicering | Omedelbart efter godkännande |

Tip

Åtgärda all granskningsfeedback i en enda revision för att undvika flera granskningscyklar. Stripe-teamet ger specifik, åtgärdbar feedback för varje hittad fråga.

## Vanliga avslagsorsaker

1. **Saknad felhantering**, App kraschar vid nätverksfel eller oväntad data
2. **Otillräckliga laddningstillstånd**, Tomma skärmar under datahämtning
3. **Oklar prissättning**, Prissättning inte fullt ut upplyst i listningen
4. **Överdrivna behörigheter**, Begär behörigheter som appen inte behöver
5. **Trasigt sandboxläge**, App fungerar inte i testläge
6. **Säkerhetsproblem**, Lagrar hemligheter utanför Secret Store API
7. **Saknad integritetspolicy**, Ingen tillgänglig URL till integritetspolicy
8. **Ofullständig funktionalitet**, “Kommer snart”-funktioner eller platshållarinnehåll
