# Guideline 4.8 Login Services: må du ha Sign in with Apple?

> Guideline 4.8: tilbyr appen Google eller Facebook, må du legge til en innlogging som skjuler e-posten, som Apple. Unntak, Expo-kode og kontosletting.

Opprinnelig side: [Guideline 4.8 Login Services: må du ha Sign in with Apple?](https://devoria.fr/no/blog/guideline-4-8-login-services-sign-in-with-apple)
Forfatter: [Mehdi Azizi](https://devoria.fr/no/mehdi-azizi)
Publisert: 2026-10-27
Innhold sist revidert: 2026-10-27


Guideline 4.8 gjelder så snart appen din bruker Google, Facebook eller en annen tredjepartsinnlogging for å opprette hovedkontoen. Da krever den et annet, likeverdig innloggingsalternativ som begrenser dataene til navn og e-post, lar brukeren skjule e-posten sin og ikke sporer brukeren for reklame uten samtykke. **Siden januar 2024 må dette alternativet ikke nødvendigvis være «Sign in with Apple», men det er det Apple selv nevner i avslagsmeldingene sine.**

Av appene mine tilbyr Solys og Nolera Apple, Google og e-post. Denne guiden tar utgangspunkt i Apples nåværende tekst, og viser deretter hvordan jeg legger til Apple-innlogging i en Expo-app koblet til Supabase, og hva det endrer for kontosletting. Vil du ha oversikten over avslagsgrunnene, les heller [hvorfor Apple avviser en app](https://devoria.fr/no/blog/avvist-av-apple-hvorfor-appen-blir-avvist).

## Hva sier guideline 4.8 Login Services?

4.8 ligger i seksjon 4, «Design», i [App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/#login-services). Den gjelder apper som bruker «a third-party or social login service» til å opprette eller autentisere hovedkontoen: Facebook Login, Google Sign-In, Log in with X, LinkedIn, Amazon eller WeChat. Disse appene må også tilby, «as an equivalent option», en annen innloggingstjeneste som oppfyller tre krav.

| Apples krav                 | Enkelt forklart                    |
| --------------------------- | ---------------------------------- |
| Begrensede data             | Navn og e-post, ikke noe mer       |
| Mulig å holde e-post privat | Brukeren kan skjule den            |
| Ingen reklame uten samtykke | Ingen reklamesporing uten samtykke |

Teksten definerer også hovedkontoen: kontoen personen oppretter i appen din for å identifisere seg, logge inn og få tilgang til funksjonene dine. Etter denne definisjonen **oppretter ikke en Google-knapp som bare brukes til å importere en fil noen hovedkonto**. 4.8 gjelder skjermen der man går inn i appen din.

### Hva som endret seg i januar 2024

Før 2024 krevde regelen «Sign in with Apple» for apper som brukte tredjepartsinnlogging for hovedkontoen. [25. januar 2024](https://developer.apple.com/news/?id=f1v8pyay) myket Apple opp dette: du kan tilby Apple-innlogging, eller en likeverdig tjeneste som beskytter personvernet. Mange sider sier fortsatt det motsatte. [Expo-dokumentasjonen](https://docs.expo.dev/versions/latest/sdk/apple-authentication/) skriver fortsatt at en app med tredjepartsinnlogging må tilby Apple.

I praksis slutter 4.8-avslagsmeldingen som er publisert på [Apples utviklerforum](https://developer.apple.com/forums/thread/765145) slik: «Note that Sign in with Apple meets the requirements specified in guideline 4.8». Apple nevner ingen annen tjeneste som oppfyller kravene. **For å slippe å gjette hva revieweren vil ha, legger jeg til Apple-innlogging.**

## De fem unntakene i teksten

Apple lister opp fem tilfeller der ingen annen innlogging kreves:

1. **Appen din bruker bare ditt eget kontosystem**, for eksempel e-post med passord eller en kode sendt på e-post.
2. Appen din er en alternativ appbutikk, eller distribueres av en, med en innlogging som hører til den butikken.
3. Appen din er for utdanning, bedrift eller jobb, og krever en eksisterende skole- eller bedriftskonto.
4. Appen din bruker et elektronisk identitetssystem støttet av staten eller en bransje.
5. Appen din er klient for en bestemt tredjepartstjeneste: personen logger inn på e-posten eller det sosiale nettverket sitt for å få tilgang til sitt eget innhold.

Før du i det hele tatt ser på unntakene, spør deg selv: trenger appen din en konto? Hvis ikke, krever guideline 5.1.1(v) at den kan brukes uten innlogging, som jeg forklarer i [guiden til guideline 5.1.1](https://devoria.fr/no/blog/guideline-5-1-1-app-store-avvisning).

| Innloggingsskjermen din | Gjelder 4.8?         |
| ----------------------- | -------------------- |
| Ingen konto             | Nei                  |
| Bare e-post eller kode  | Nei                  |
| Bare Google             | Ja                   |
| Google og e-post        | Ja, i utgangspunktet |
| Google og Apple         | Ja, og i samsvar     |
| Eksisterende skolekonto | Nei                  |
| Google for import       | Nei, ingen konto     |

## Legge til «Sign in with Apple» i en Expo-app

### 1. Installer modulen og deklarer capabilityen

```bash
npx expo install expo-apple-authentication
```

Expo-dokumentasjonen ber deg deretter aktivere capabilityen i appkonfigurasjonen:

```json
{
  "expo": {
    "ios": {
      "usesAppleSignIn": true,
      "infoPlist": { "CFBundleAllowMixedLocalizations": true }
    }
  }
}
```

Den andre linjen viser knappen på iPhonens språk. Med EAS Build aktiveres capabilityen på app-ID-en din når du bygger. **Det er en native innstilling: den kommer med et nytt build, aldri med en fjernoppdatering.**

En felle jeg fant da jeg gikk gjennom startkoden i kitene mine: denne capabilityen krever signering, selv for å kjøre appen i simulatoren. På en Mac uten «Apple Development»-sertifikat feilet den lokale kompileringen med «No code signing certificates are available to use». Løsningen: aktiver Apple-innlogging bare når autentiseringsserveren er konfigurert.

### 2. Vis den offisielle knappen, like synlig som Google

[Apples designregler](https://developer.apple.com/design/human-interface-guidelines/sign-in-with-apple) er klare: Apple-knappen skal ikke være mindre enn de andre innloggingsknappene, og man skal ikke måtte scrolle for å se den. Expo-komponenten tegner den offisielle knappen, med en tittel Apple godkjenner.

```tsx
import * as AppleAuthentication from "expo-apple-authentication";
import { useEffect, useState } from "react";

export function BoutonApple({ onPress }: { onPress: () => void }) {
  const [disponible, setDisponible] = useState(false);

  useEffect(() => {
    AppleAuthentication.isAvailableAsync().then(setDisponible);
  }, []);

  // Android og web: ingen Apple-innlogging, ingen knapp.
  if (!disponible) return null;

  return (
    <AppleAuthentication.AppleAuthenticationButton
      buttonType={AppleAuthentication.AppleAuthenticationButtonType.CONTINUE}
      buttonStyle={AppleAuthentication.AppleAuthenticationButtonStyle.BLACK}
      cornerRadius={12}
      style={{ width: "100%", height: 50 }}
      onPress={onPress}
    />
  );
}
```

Expo presiserer at knappen ikke vises uten bredde og høyde. Farge og avrunding settes med `buttonStyle` og `cornerRadius`, ikke via style.

### 3. Åpne sesjonen i Supabase

```ts
import * as AppleAuthentication from "expo-apple-authentication";
import { supabase } from "./supabase";

export async function connexionApple(): Promise<"ok" | "annule"> {
  try {
    const credential = await AppleAuthentication.signInAsync({
      requestedScopes: [
        AppleAuthentication.AppleAuthenticationScope.FULL_NAME,
        AppleAuthentication.AppleAuthenticationScope.EMAIL,
      ],
    });
    if (!credential.identityToken) throw new Error("Apple-token mangler");
    const { error } = await supabase.auth.signInWithIdToken({
      provider: "apple",
      token: credential.identityToken,
    });
    if (error) throw error;
    // Fornavnet kommer bare ved første autorisasjon: vi lagrer det med en gang.
    const prenom = credential.fullName?.givenName;
    if (prenom) await supabase.auth.updateUser({ data: { prenom } });
    return "ok";
  } catch (e) {
    if ((e as { code?: string }).code === "ERR_REQUEST_CANCELED")
      return "annule";
    throw e;
  }
}
```

Fire detaljer er viktige, hentet fra [Supabase-dokumentasjonen](https://supabase.com/docs/guides/auth/social-login/auth-apple), Expo-dokumentasjonen og Apples designregler:

- **I Supabase legger du inn bundle-ID-en din** under Client IDs for Apple-leverandøren. En app som bare er native trenger ingen hemmelig nøkkel for å logge inn. Legg til `host.exp.Exponent` hvis du tester i Expo Go.
- **Fornavnet og e-posten kommer bare én gang.** Apple sender dem ikke ved senere innlogginger: lagre dem ved første svar.
- **E-posten kan være en relay-adresse.** Apple anbefaler at du ikke ber om en personlig adresse etterpå.
- **En avbrytelse er ikke en feil.** I Nolera gir det ingen rød melding å lukke Apple-arket: det er en bevisst handling.

Et ekte tilfelle fra Solys, i august 2026: Apple- og Google-knappene var i appen, men ingen av leverandørene var aktivert i Supabase. Koden var riktig, og rettelsen skjedde på serversiden, uten nytt build. **En Apple-knapp som feiler foran revieweren gir et 2.1-avslag i stedet for et 4.8-avslag.** Detaljene finner du i [guiden til guideline 2.1](https://devoria.fr/no/blog/guideline-2-1-app-store-avvisning).

### 4. Test på en ekte iPhone

Expo advarer om at simulatoren bare gir begrenset testing, og at identifikatorene du får i Expo Go er forskjellige fra dem i den publiserte appen. Test innlogging, utlogging og ny innlogging på en ekte iPhone, med et [TestFlight](https://devoria.fr/no/blog/testflight-teste-iphone-app-for-innsending)-build.

## Apple-innlogging og kontosletting

Guideline 5.1.1(v) krever at en konto opprettet i appen kan slettes fra appen. Med Apple-innlogging legger [Apples side om kontosletting](https://developer.apple.com/support/offering-account-deletion-in-your-app) til et steg: bruk REST-API-et til Sign in with Apple for å [tilbakekalle tokenene](https://developer.apple.com/documentation/signinwithapplerestapi/revoke-tokens) til personen.

Tilbakekallingen krever to ting: et token for personen, som du får ved å validere en autorisasjonskode, og en hemmelighet signert med din private Sign in with Apple-nøkkel. **Selv om native innlogging klarer seg uten hemmelig nøkkel, krever tilbakekallingen en, og den blir liggende på serveren din.** Hvorfor står i [hemmelig API-nøkkel i en Expo-app](https://devoria.fr/no/blog/hemmelig-api-nokkel-expo-app).

I Nolera ber appen om en ny Apple-innlogging når kontoen skal slettes, for å få en fersk autorisasjonskode. Den sender koden til en serverfunksjon, som veksler den hos Apple og deretter tilbakekaller tokenet. Avbryter personen, sier en tydelig melding det, og ingenting slettes. Resten av flyten, inkludert data, abonnement og testing, finner du i [kontosletting på iOS](https://devoria.fr/no/blog/kontosletting-ios-app-test-for-apple).

## Hva du svarer Apple etter et 4.8-avslag

Apples melding gir to utveier. Enten legger du til et likeverdig alternativ. Eller så har appen din allerede et: da svarer du i App Store Connect, sier hvilket det er og hvorfor det oppfyller de tre kravene. Apple foreslår også at du oppdaterer skjermbildene som viser innloggingsskjermen. 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 de andre reglene.

Her er en mal på engelsk som du kan tilpasse (bytt ut build-nummeret):

```text
Hello,

Thank you for your review.

Build X adds Sign in with Apple as an equivalent login option.
It appears on the same screen as Google Sign-In, with the same
size, and is visible without scrolling.

How to verify: launch the app, open the sign-in screen and
tap "Continue with Apple".

We also updated the screenshots that show the sign-in screen.

Best regards,
```

## Sjekklisten for 4.8 før innsending

- Du vet om appen din trenger en konto. Hvis ikke, kan den brukes uten innlogging.
- Hvis Google, Facebook eller X oppretter kontoen, er Apple-innlogging på samme skjerm.
- Apple-knappen er den offisielle knappen, like stor som de andre, synlig uten scrolling.
- Apple-leverandøren er aktivert på serversiden, med bundle-ID-en din.
- En avbrytelse fører tilbake til innloggingsskjermen, uten feilmelding.
- Fornavn og e-post lagres ved første innlogging.
- Kontosletting tilbakekaller Apple-tokenet, fra serveren din.
- Alt er testet på en ekte iPhone, med en Apple-konto som aldri har logget inn i appen.
- Skjermbildene dine viser innloggingsskjermen slik den er i buildet du sender inn.

## Rett opp avslaget før du sender appen på nytt

Har appen din nettopp fått avslag etter 4.8, samler [Apple 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å innloggingsskjermen din. Hele fremgangsmåten etter et avslag finner du 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-avslag.

Ingen kan garantere at Apple godkjenner appen din. Men legger du Apple-innlogging på riktig sted, er i hvert fall denne avslagsgrunnen ute av bildet.

## Ofte stilte spørsmål

### Er Sign in with Apple obligatorisk på iOS?

Nei, ikke i alle tilfeller. Det kreves bare hvis appen din tilbyr en tredjepartsinnlogging, som Google eller Facebook, for å opprette hovedkontoen. Siden januar 2024 kan en annen likeverdig tjeneste erstatte den, men Apple nevner bare Apple-innlogging som godkjent.

### Hva betyr «Guideline 4.8 - Design - Login Services»?

Det er overskriften på avslaget i Apples melding. Det betyr at appen din tilbyr en tredjepartsinnlogging uten et likeverdig alternativ som begrenser dataene til navn og e-post, lar brukeren skjule e-posten og ikke brukes til reklame uten samtykke.

### Holder det med registrering via e-post ved siden av Google?

Det er ikke garantert. Teksten krever en tjeneste som lar brukeren holde e-posten privat, mens et vanlig skjema ber om den. Apple har ikke publisert noe standpunkt i dette tilfellet, og avslagsmeldingen nevner bare Apple-innlogging. Jeg ville ikke tatt den risikoen.

### Må jeg tilby Apple-innlogging på Android?

Nei. 4.8 er en App Store-regel, og Expo-modulen fungerer bare på iOS. På Android returnerer `isAvailableAsync()` false: Apple-knappen vises ikke, og Google kan stå alene.

### Trenger jeg et nytt build etter et 4.8-avslag?

Ja, i de fleste tilfeller. Apple-innlogging krever en native capability som aktiveres når du bygger. En fjernoppdatering kan ikke legge den til. Eneste unntak: appen din hadde allerede et godkjent alternativ, og da holder det å forklare det for Apple i svaret ditt.


## Prosjektet ditt

[Apple Review Kit](https://devoria.fr/no/kits/app-review): Sjekklisten jeg bruker for App Store-review, Apple-avslagene mine med rettelser, testernotater og to Claude Code-skills som gjennomgår appen din. 29 €.

[iOS Kit](https://devoria.fr/no/kits/ios): Lag iPhone-appen din med Claude Code: startkoden til appene mine, skills som sjekker arbeidet, og kits for Apple Review, skjermbilder og ASO. 129,99 €.
