# Guideline 1.2 User-Generated Content: hva Apple krever

> Guideline 1.2: publiserer brukerne dine noe, trenger du filter, rapportering, blokkering, kontakt og godtatte vilkår. Sjekkliste for Expo og Supabase.

Opprinnelig side: [Guideline 1.2 User-Generated Content: hva Apple krever](https://devoria.fr/no/blog/guideline-1-2-user-generated-content-apple-krav)
Forfatter: [Mehdi Azizi](https://devoria.fr/no/mehdi-azizi)
Publisert: 2026-11-04
Innhold sist revidert: 2026-11-04


Guideline 1.2 gjelder så snart brukere publiserer noe som andre ser: en melding, et bilde, en anmeldelse, og etter min mening også et enkelt brukernavn på en toppliste. Apples tekst krever da et filter, rapportering med rask oppfølging, blokkering og publisert kontaktinformasjon. **Avvisningsmeldingene legger til et femte krav: godtatte bruksvilkår som verken tolererer støtende innhold eller brukere som misbruker tjenesten.**

Denne guiden handler ikke om en avvisning. Den viser hva jeg bygde inn i TradaZen, appen min for å øve på trading, da topplistene begynte å vise brukernavn som spillerne selv hadde valgt. Vil du ha oversikten over avvisningsgrunnene, les heller [hvorfor Apple avviser en app](https://devoria.fr/no/blog/avvist-av-apple-hvorfor-appen-blir-avvist).

## Hva sier guideline 1.2?

1.2, «User-Generated Content», ligger i seksjon 1, «Safety», i [App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/#user-generated-content). Den gjelder apper med brukerinnhold eller en sosial nettverkstjeneste. For å hindre misbruk «must include» disse appene fire beskyttelser:

- «A method for filtering objectionable material from being posted to the app»: **et filter som stopper støtende innhold før det publiseres**.
- «A mechanism to report offensive content and timely responses to concerns»: en måte å rapportere innhold på, og rask respons på rapporter.
- «The ability to block abusive users from the service»: muligheten til å blokkere brukere som misbruker tjenesten.
- «Published contact information so users can easily reach you»: publisert kontaktinformasjon som er lett å finne.

Den gjeldende versjonen av teksten, oppdatert 8. juni 2026, går lenger. Den minner om at det er ditt ansvar å fjerne innhold som bryter regelen, bruksvilkårene dine eller fellesskapsreglene dine. Finner Apple slikt innhold, ber de deg fjerne det og legge frem en forbedringsplan, og de kan fjerne appen i mellomtiden.

Teksten lister også opp apper som ikke hører hjemme i App Store: de som hovedsakelig brukes til pornografi, tilfeldig eller anonym chat à la Chatroulette, rangering av utseendet til ekte mennesker, trusler eller trakassering. **For slik bruk holder ikke de fire beskyttelsene.** 1.2.1 legger til regler for skaperapper, blant annet alderskontroll for innhold som går utover appens aldersgrense.

## Gjelder dette appen din?

Spørreskjemaet for aldersgrense i App Store Connect gir en god definisjon. Det snakker om [brukergenerert innhold](https://developer.apple.com/help/app-store-connect/reference/app-information/age-ratings-values-and-definitions) når innhold laget av brukere spres bredt i appen: videoer, bilder, tekst eller lyd. Meldinger mellom brukere behandles for seg.

| Det andre ser                       | Gjelder det?         |
| ----------------------------------- | -------------------- |
| Meldinger mellom medlemmer          | Ja                   |
| Offentlige bilder eller anmeldelser | Ja                   |
| Brukernavn på en toppliste          | Ja, etter min mening |
| Private notater                     | Nei                  |
| Innhold du har skrevet selv         | Nei                  |

Apple nevner ikke brukernavn. Likevel behandler jeg dem som brukerinnhold: hvem som helst kan velge et krenkende navn, og andre spillere ser det. Det var valget jeg tok for topplistene i TradaZen.

## De 5 mekanismene du må kode, med Expo og Supabase

Avvisningsmeldingen for 1.2, slik en utvikler publiserte den på [Apples forum](https://developer.apple.com/forums/thread/807358) mot slutten av 2025, lister opp tiltakene Apple forventer. Den begynner med «Require that users agree to terms (EULA)» og slutter med et tidskrav: handle på rapporter «within 24 hours», ved å fjerne innholdet og utestenge den som publiserte det.

| Mekanisme         | Hvor du koder den       |
| ----------------- | ----------------------- |
| Godtatte vilkår   | Skjerm og profil        |
| Filter            | Server, før visning     |
| Rapportering      | Knapp og tabell         |
| Blokkering        | Tabell og tilgangsregel |
| Publisert kontakt | App og App Store-side   |

SQL-eksemplene nedenfor må tilpasses skjemaet ditt. De bygger på [Supabases tilgangsregler per rad](https://supabase.com/docs/guides/database/postgres/row-level-security), som gjelder selv om noen omgår appen din.

### 1. Godtatte vilkår, med null toleranse for misbruk

Bruksvilkårene dine må si svart på hvitt at verken støtende innhold eller brukere som misbruker tjenesten tolereres. Eksempel på en klausul, som du bør få noen til å se over, ikke juridisk rådgivning: «Krenkende, hatefullt, seksuelt eller trakasserende innhold tolereres ikke. Rapportert innhold kan fjernes og den som publiserte det utestenges, uten forvarsel.»

**En passiv setning under en registreringsknapp beviser ikke samtykke: krev en tydelig handling.** En skjerm med lenke til vilkårene og en «Jeg godtar»-knapp, før første publisering. Lagre dato og versjon som ble godtatt i profilen, og blokker publisering så lenge de mangler:

```sql
create policy "publier après les CGU" on public.posts
for insert to authenticated
with check (
  auth.uid() = author_id
  and exists (
    select 1 from public.profiles p
    where p.id = auth.uid() and p.cgu_acceptees_le is not null
  )
);
```

### 2. Et filter før andre ser innholdet

Filteret ligger på serveren, fordi koden i appen kan omgås. En kopi i appen er bare der for å varsle brukeren med en gang.

I TradaZen sjekker en databasefunksjon hvert brukernavn, og appen bruker den samme listen for å varsle spilleren. Jeg holder de to identiske. På serversiden avvises ikke et krenkende brukernavn ved lagring: **det byttes ut med et nøytralt navn ved visning, så ingen blir blokkert på grunn av en falsk positiv**.

Falske positiver dukker raskt opp. I TradaZen sensurerte en første versjon av filteret fornavn som Dominique, Monique og Véronique, fordi de inneholder en bit av et banneord. Løsningen: søk etter hele ord, ikke deler av ord. Og siden appen selges på japansk og kinesisk, dekker filteret også disse språkene.

### 3. Rapportering, behandlet innen 24 timer

Hvert publisert innhold har en «Rapporter»-knapp. I TradaZen vises et brukernavn som rapporteres på ligatoppliste med en gang under en nøytral betegnelse, på telefonen til den som rapporterer. Rapporten sendes så til serveren, og sendes på nytt senere hvis telefonen er offline.

I databasen: en tabell for rapporter, én per person og per innhold:

```sql
create table public.reports (
  id uuid primary key default gen_random_uuid(),
  reporter_id uuid not null references auth.users (id) on delete cascade,
  target_id uuid not null,
  reason text,
  created_at timestamptz not null default now(),
  unique (reporter_id, target_id)
);
alter table public.reports enable row level security;
create policy "mes signalements" on public.reports
for insert to authenticated
with check (auth.uid() = reporter_id);
```

I TradaZen **byttes et brukernavn som rapporteres av flere spillere ut med et nøytralt navn**, og rapportene vises aldri til den som er rapportert. En generell forholdsregel: ID-en som brukes til rapporteringen, må ikke kunne endres av den som publiserte innholdet, ellers kan vedkommende slippe unna skjulingen.

Automatisk skjuling erstatter ikke din egen vurdering. For å rekke 24 timer, sørg for å bli varslet ved hver rapport: en [databasewebhook i Supabase](https://supabase.com/docs/guides/database/webhooks) kan kalle en serverfunksjon som sender deg en melding. Nøkkelen som lar deg fjerne innhold, blir på serveren, slik jeg forklarer i [hemmelig API-nøkkel i en Expo-app](https://devoria.fr/no/blog/hemmelig-api-nokkel-expo-app).

### 4. Blokkering som virker umiddelbart

En tabell for blokkeringer, og så en tilgangsregel som fjerner innholdet fra blokkerte personer fra feeden til den som blokkerer:

```sql
create policy "sans les bloqués" on public.posts
for select to authenticated
using (
  not exists (
    select 1 from public.blocks b
    where b.blocker_id = auth.uid() and b.blocked_id = posts.author_id
  )
);
```

I TradaZen legger du til en venn med en kode, og du kan fjerne og blokkere vennen. **En blokkert venn forsvinner fra listen, selv om vedkommende sender en ny forespørsel.**

### 5. Publisert kontaktinformasjon som er lett å finne

Legg inn en kontaktadresse i innstillingene i appen, og en support-URL som faktisk svarer i App Store Connect. I TradaZen står supportadressen i personvernerklæringen og i bruksvilkårene. Hva disse sidene bør inneholde, finner du i [personvernerklæring for en app](https://devoria.fr/no/blog/personvernerklaering-app-ios-guide).

Et siste punkt: bestem hva som skjer med innholdet til en person som sletter kontoen sin. `on delete cascade` ovenfor sletter rapportene vedkommende har sendt sammen med kontoen. Hele oppskriften står i [kontosletting på iOS](https://devoria.fr/no/blog/kontosletting-ios-app-test-for-apple).

## Hva TradaZen viser i personvernerklæringen

Disse mekanismene er beskrevet offentlig i personvernerklæringen til TradaZen, som ble utvidet i september 2026 da ligaer og venner kom: «Brukernavn går gjennom et automatisk filter; du kan rapportere et upassende brukernavn på topplisten, og fjerne og blokkere en venn.» Den samme erklæringen presiserer at e-post og journal aldri vises til andre spillere. Bakgrunnen for appen står i [casestudien om TradaZen](https://devoria.fr/no/blog/tradazen-casestudie-lansere-iphone-app).

## Hva du svarer Apple etter en 1.2-avvisning

Fortell revieweren hvor hver mekanisme finnes, både i svaret ditt og i review-notatene. Disse funksjonene ligger i appen: revieweren tester koden som er bygget inn i builden, så du trenger en ny build. Fremgangsmåten for å [svare App Review](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/reply-to-app-review-messages/) er den samme som for andre regler. Her er en mal på engelsk som du kan tilpasse, og der du bare beholder det som stemmer for appen din:

```text
Hello,

Thank you for your review. Build X includes the precautions
listed in Guideline 1.2:

- Terms: users accept our terms, with zero tolerance for
  objectionable content and abusive users, before posting.
- Filter: posts and usernames are checked on our server
  before other users can see them.
- Report: tap "..." on any post, then "Report".
- Block: tap "..." on any post, then "Block user". Their
  content disappears immediately.
- Reports notify us instantly; we act on them within 24 hours.
- Contact: Settings > Contact us, and our support URL.

Best regards,
```

Mangler en mekanisme i builden, holder det ikke med et svar. Som med [guideline 2.1](https://devoria.fr/no/blog/guideline-2-1-app-store-avvisning) vurderer Apple den builden de har foran seg.

## Sjekklisten for 1.2 før innsending

- Du har listet opp alt en bruker publiserer som andre ser, brukernavn inkludert.
- Vilkårene dine forbyr støtende innhold og misbruk, og appen krever et tydelig «Jeg godtar».
- Filteret kjører på serveren, søker etter hele ord og dekker språkene på App Store-siden din.
- Alt innhold har en «Rapporter»-knapp, og hver rapport varsler deg med en gang.
- Du vet hvordan du fjerner innhold og utestenger den som publiserte det på under 24 timer.
- Å blokkere en bruker fjerner innholdet deres umiddelbart.
- En kontaktadresse er synlig i appen, og support-URL-en svarer.
- Spørreskjemaet for aldersgrense oppgir brukerinnhold, og meldinger hvis appen din har det.
- Review-notatene sier hvor hver mekanisme finnes, med en demokonto.

## Fiks avvisningen før du sender inn appen på nytt

Har appen din nettopp blitt avvist etter 1.2, samler [Review Kit](https://devoria.fr/no/kits/app-review) det jeg sjekker før hver innsending, med to skills som går gjennom prosjektet ditt i Claude Code og forbereder svaret ditt hvis Apple avviser. Vil du ha et menneskelig blikk, [book en time med meg](https://devoria.fr/no/coaching): vi leser meldingen sammen og ser på modereringsflyten din. Hele fremgangsmåten etter en avvisning står på siden [app avvist av Apple](https://devoria.fr/no/expertise/app-avvist-av-apple).

Forbereder du din første lansering, [ta den gratis diagnosen](https://devoria.fr/no/diagnostic): den forteller deg hvilket steg du bør ta først, og sender deg sjekklisten min mot Apple-avvisninger.

Ingen kan garantere at Apple godkjenner appen din. Disse fem mekanismene, godt synlige, fjerner i hvert fall denne grunnen fra listen.

## Ofte stilte spørsmål

### Hva betyr «Guideline 1.2 - Safety - User-Generated Content»?

Det er overskriften på avvisningen i meldingen fra Apple. Den betyr at appen din viser innhold laget av brukere uten alle de forventede beskyttelsene: filter, rask behandling av rapporter, blokkering, publisert kontaktinformasjon og godtatte bruksvilkår.

### Teller et brukernavn på en toppliste som brukerinnhold?

Apples tekst sier ikke det. Jeg behandler det som brukerinnhold, fordi et brukernavn velges fritt og ses av andre spillere. I TradaZen går brukernavnene på topplistene gjennom et filter, de kan rapporteres, og de byttes ut med et nøytralt navn hvis de skaper problemer.

### Må rapporter virkelig behandles innen 24 timer?

Det er det Apples avvisningsmelding krever. Selve regelteksten snakker om rask respons. Et automatisk filter er altså ikke nok: noen må fjerne innholdet og utestenge den som publiserte det. Automatisk skjuling etter flere rapporter hjelper deg å holde stand i mellomtiden.

### Må bruksvilkårene godtas inne i appen?

Det er den sikreste måten. Avvisningsmeldingen krever at brukerne godtar vilkår som verken tolererer støtende innhold eller brukere som misbruker tjenesten. En lenke nederst på en side beviser ikke samtykke. En skjerm med en «Jeg godtar»-knapp, før første publisering, etterlater ingen tvil.

### Kan en app for anonym chat komme gjennom guideline 1.2?

Den gjeldende teksten nevner tilfeldig eller anonym chat blant bruksområdene som ikke hører hjemme i App Store. En app som hovedsakelig brukes til dette, kan fjernes uten forvarsel, selv med filter, rapportering og blokkering.


## Prosjektet ditt

[Review Kit](https://devoria.fr/no/kits/app-review): Sjekklisten min for App Store-gjennomgang, Apples avslag på appene mine med rettelser, sjekklisten for Google Play og tre Claude Code-skills. 499 kr.

[iOS & Android Kit](https://devoria.fr/no/kits/ios): Lag din iPhone- og Android-app med Claude Code: startkoden fra appene mine, veien helt til butikkene og alle kitene. 999 kr.

[Diagnose: dette står mellom deg og iPhone-appen din](https://devoria.fr/no/diagnostic): 7 spørsmål, 60 sekunder: du får vite hva som egentlig hindrer deg i å publisere iPhone-appen din, veien din i 4 steg og kitet som passer deg.
