# Guideline 4.8: skal din app have Sign in with Apple?

> Guideline 4.8: Tilbyder din app Google eller Facebook, skal du også have et login, der beskytter e-mailen, som Apples. Undtagelser, Expo-kode og kontosletning.

Original side: [Guideline 4.8: skal din app have Sign in with Apple?](https://devoria.fr/da/blog/guideline-4-8-sign-in-with-apple)
Forfatter: [Mehdi Azizi](https://devoria.fr/da/mehdi-azizi)
Udgivet: 2026-10-27
Indhold senest revideret: 2026-10-27


Guideline 4.8 gælder, så snart din app bruger Google, Facebook eller et andet tredjepartslogin til at oprette hovedkontoen. Så kræver den en anden, ligeværdig loginmulighed, som begrænser dataene til navn og e-mail, lader brugeren skjule sin e-mail og ikke tracker brugeren til reklamer uden samtykke. **Siden januar 2024 behøver den mulighed ikke længere at være "Sign in with Apple", men det er den, Apple selv nævner i sine afvisningsbeskeder.**

I mine apps tilbyder Solys og Nolera Apple, Google og e-mail. Denne guide tager udgangspunkt i Apples nuværende tekst og viser derefter, hvordan jeg tilføjer Apple-login i en Expo-app koblet til Supabase, og hvad det ændrer for kontosletning. Vil du have overblikket over afvisningsgrundene, så læs hellere [hvorfor Apple afviser en app](https://devoria.fr/da/blog/apple-afviser-app-afvisninger-guidelines).

## Hvad siger guideline 4.8 Login Services?

4.8 ligger i sektion 4, "Design", i [App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/#login-services). Den handler om apps, der bruger "a third-party or social login service" til at oprette eller godkende hovedkontoen: Facebook Login, Google Sign-In, Log in with X, LinkedIn, Amazon eller WeChat. De apps skal også tilbyde en anden loginservice "as an equivalent option", som opfylder tre betingelser.

| Apples betingelse           | Kort sagt                           |
| --------------------------- | ----------------------------------- |
| Begrænsede data             | Navn og e-mail, intet andet         |
| Mulighed for privat e-mail  | Brugeren kan skjule den             |
| Ingen reklame uden samtykke | Ingen reklametracking uden samtykke |

Teksten definerer også hovedkontoen: den konto, personen opretter i din app for at identificere sig, logge ind og få adgang til dine funktioner. Ifølge den definition **opretter en Google-knap, der kun bruges til at importere en fil, ikke en hovedkonto**. 4.8 handler om den skærm, hvor man kommer ind i din app.

### Hvad der ændrede sig i januar 2024

Før 2024 krævede reglen "Sign in with Apple" i apps, der brugte et tredjepartslogin til hovedkontoen. Den [25. januar 2024](https://developer.apple.com/news/?id=f1v8pyay) lempede Apple på det punkt: Du kan tilbyde Apple-login eller en tilsvarende service, der beskytter privatlivet. Mange sider siger stadig det modsatte. [Expos dokumentation](https://docs.expo.dev/versions/latest/sdk/apple-authentication/) skriver stadig, at en app med tredjepartslogin skal tilbyde Apple.

I praksis slutter den 4.8-afvisningsbesked, der er delt på [Apples udviklerfora](https://developer.apple.com/forums/thread/765145), sådan her: "Note that Sign in with Apple meets the requirements specified in guideline 4.8". Apple nævner ingen anden service, der opfylder kravene. **For ikke at spille gætteleg med revieweren tilføjer jeg Apple-login.**

## De fem undtagelser i teksten

Apple nævner fem tilfælde, hvor der ikke kræves et andet login:

1. **Din app bruger kun dit eget kontosystem**, for eksempel e-mail med adgangskode eller en kode sendt på e-mail.
2. Din app er en alternativ app-butik eller distribueres af en, med et login, der hører til den butik.
3. Din app er til uddannelse, virksomheder eller erhverv og kræver en eksisterende skole- eller firmakonto.
4. Din app bruger et elektronisk ID-system, der er støttet af staten eller en branche.
5. Din app er klient til en bestemt tredjepartsservice: Personen logger ind på sin mail eller sit sociale netværk for at få adgang til sit eget indhold.

Før du overhovedet kigger på undtagelserne, så spørg dig selv: Har din app brug for en konto? Hvis ikke, kræver guideline 5.1.1(v), at den kan bruges uden login, som jeg forklarer i [guiden til guideline 5.1.1](https://devoria.fr/da/blog/guideline-5-1-1-app-store-afvisning).

| Din loginskærm          | Gælder 4.8?          |
| ----------------------- | -------------------- |
| Ingen konto             | Nej                  |
| Kun e-mail eller kode   | Nej                  |
| Kun Google              | Ja                   |
| Google og e-mail        | Ja, som udgangspunkt |
| Google og Apple         | Ja, og godkendt      |
| Eksisterende skolekonto | Nej                  |
| Google til import       | Nej, ingen konto     |

## Tilføj "Sign in with Apple" i en Expo-app

### 1. Installér modulet og angiv capability'en

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

Expos dokumentation siger derefter, at du skal slå capability'en til i appens konfiguration:

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

Den anden linje viser knappen på iPhonens sprog. Med EAS Build bliver capability'en slået til på dit app-id, når der bygges. **Det er en native indstilling: Den kommer med et nyt build, aldrig med en fjernopdatering.**

En fælde, jeg fandt, da jeg gennemgik startkoden i mine kits: Den capability kræver signering, også bare for at køre appen i simulatoren. På en Mac uden et "Apple Development"-certifikat fejlede den lokale kompilering med "No code signing certificates are available to use". Løsningen: Slå kun Apple-login til, når auth-serveren er sat op.

### 2. Vis den officielle knap, lige så synlig som Google

[Apples designregler](https://developer.apple.com/design/human-interface-guidelines/sign-in-with-apple) er klare: Apple-knappen må ikke være mindre end de andre loginknapper, og man må ikke skulle scrolle for at se den. Expos komponent tegner den officielle knap med en titel, Apple har godkendt.

```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: intet Apple-login, ingen knap.
  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 understreger, at knappen ikke vises uden bredde og højde. Farve og afrunding styres med `buttonStyle` og `cornerRadius`, ikke med style.

### 3. Åbn sessionen 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 kun ved første godkendelse: gem det med det samme.
    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 betyder noget, hentet fra [Supabases dokumentation](https://supabase.com/docs/guides/auth/social-login/auth-apple), Expos dokumentation og Apples designregler:

- **I Supabase skal du angive dit bundle-id** under Client IDs for Apple-udbyderen. En ren native app behøver ingen hemmelig nøgle for at logge ind. Tilføj `host.exp.Exponent`, hvis du tester i Expo Go.
- **Fornavn og e-mail kommer kun én gang.** Apple sender dem ikke igen ved senere logins: Gem dem ved første svar.
- **E-mailen kan være en relay-adresse.** Apple anbefaler, at du ikke bagefter beder om en personlig adresse.
- **En annullering er ikke en fejl.** I Nolera giver det ingen rød besked at lukke Apple-arket: Det er en bevidst handling.

En oplevelse fra Solys i august 2026: Apple- og Google-knapperne var i appen, men ingen af de to udbydere var slået til i Supabase. Koden var fin, rettelsen skete på serveren uden et nyt build. **En Apple-knap, der fejler foran revieweren, giver en 2.1-afvisning i stedet for en 4.8-afvisning.** Detaljerne står i [guiden til guideline 2.1](https://devoria.fr/da/blog/guideline-2-1-app-store-afvisning).

### 4. Test på en rigtig iPhone

Expo advarer om, at simulatoren kun giver en begrænset test, og at de credentials, du får i Expo Go, er anderledes end dem i den udgivne app. Test login, logout og nyt login på en rigtig iPhone med et [TestFlight](https://devoria.fr/da/blog/testflight-test-iphone-app-for-apple)-build.

## Apple-login og kontosletning

Guideline 5.1.1(v) kræver, at en konto oprettet i appen kan slettes fra appen. Med Apple-login tilføjer [Apples side om kontosletning](https://developer.apple.com/support/offering-account-deletion-in-your-app) et ekstra trin: Brug Sign in with Apple REST API'et til at [tilbagekalde personens tokens](https://developer.apple.com/documentation/signinwithapplerestapi/revoke-tokens).

Tilbagekaldelsen kræver to ting: et token for personen, som du får ved at validere en autorisationskode, og en secret signeret med din private Sign in with Apple-nøgle. **Selvom det native login klarer sig uden hemmelig nøgle, kræver tilbagekaldelsen en, og den bliver på din server.** Hvorfor står i [hemmelig API-nøgle i en Expo-app](https://devoria.fr/da/blog/hemmelig-api-noegle-expo-app).

I Nolera beder appen om et nyt Apple-login, når kontoen skal slettes, for at få en frisk autorisationskode. Den sendes til en serverfunktion, som veksler den hos Apple og derefter tilbagekalder tokenet. Hvis personen annullerer, siger en tydelig besked det, og intet bliver slettet. Resten af forløbet, inklusive data, abonnement og test, står i [kontosletning på iOS](https://devoria.fr/da/blog/sletning-af-konto-ios-app-test-apple).

## Hvad du skal svare Apple efter en 4.8-afvisning

Apples besked giver dig to udveje. Enten tilføjer du en ligeværdig mulighed. Eller også har din app allerede en: Så svarer du i App Store Connect og forklarer hvilken, og hvorfor den opfylder de tre betingelser. Apple foreslår også, at du opdaterer de screenshots, der viser loginskærmen. Fremgangsmåden for at [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 regler.

Her er en skabelon på engelsk, som du kan tilpasse (udskift 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,
```

## 4.8-tjeklisten før indsendelse

- Du ved, om din app har brug for en konto. Hvis ikke, kan den bruges uden login.
- Hvis Google, Facebook eller X opretter kontoen, er Apple-login på samme skærm.
- Apple-knappen er den officielle knap, lige så stor som de andre og synlig uden at scrolle.
- Apple-udbyderen er slået til på serveren med dit bundle-id.
- En annullering fører tilbage til loginskærmen uden fejlbesked.
- Fornavn og e-mail gemmes ved første login.
- Kontosletning tilbagekalder Apple-tokenet fra din server.
- Alt er testet på en rigtig iPhone med en Apple-konto, der aldrig har været logget ind i appen.
- Dine screenshots viser loginskærmen, som den ser ud i det indsendte build.

## Ret din afvisning, før du sender appen igen

Er din app lige blevet afvist under 4.8, samler [Apple Review Kit](https://devoria.fr/da/kits/app-review) det, jeg tjekker før hver indsendelse, med to skills, der gennemgår dit projekt i Claude Code og forbereder dit svar, hvis Apple afviser. Vil du have et menneskeligt blik på det, så [book en time med mig](https://devoria.fr/da/coaching): Vi læser beskeden sammen og kigger på din loginskærm. Hele fremgangsmåden efter en afvisning står på siden [app afvist af Apple](https://devoria.fr/da/expertise/app-afvist-af-apple).

Forbereder du din første udgivelse, så [tag din gratis diagnose](https://devoria.fr/da/diagnostic): Den fortæller dig, hvilket trin du skal tage fat på først, og sender dig min tjekliste mod Apple-afvisninger.

Ingen kan garantere, at Apple godkender din app. Men tilføjer du Apple-login det rigtige sted, er den grund i hvert fald ude af listen.

## Ofte stillede spørgsmål

### Er Apple-login obligatorisk på iOS?

Nej, ikke i alle tilfælde. Det kræves kun, hvis din app tilbyder et tredjepartslogin som Google eller Facebook til at oprette hovedkontoen. Siden januar 2024 kan en anden tilsvarende service erstatte det, men Apple nævner kun Apple-login som godkendt.

### Hvad betyder "Guideline 4.8 - Design - Login Services"?

Det er overskriften på afvisningen i Apples besked. Den betyder, at din app tilbyder et tredjepartslogin uden en ligeværdig mulighed, der begrænser dataene til navn og e-mail, lader brugeren skjule e-mailen og ikke bruges til reklame uden samtykke.

### Er min e-mail-tilmelding nok ved siden af Google?

Det er ikke sikkert. Teksten kræver en service, der lader brugeren holde sin e-mail privat, mens en almindelig formular beder om den. Apple har ikke udtalt sig om det tilfælde, og afvisningsbeskeden nævner kun Apple-login. Jeg ville ikke tage den risiko.

### Skal jeg tilbyde Apple-login på Android?

Nej. 4.8 er en App Store-regel, og Expos modul virker kun på iOS. På Android returnerer `isAvailableAsync()` false: Apple-knappen vises ikke, og Google kan stå alene.

### Skal jeg lave et nyt build efter en 4.8-afvisning?

Ja, i de fleste tilfælde. Apple-login kræver en native capability, som slås til, når der bygges. En fjernopdatering kan ikke tilføje den. Eneste undtagelse: Din app havde allerede en godkendt mulighed, og du skal bare forklare det for Apple i dit svar.


## Dit projekt

[Apple Review Kit](https://devoria.fr/da/kits/app-review): Den App Store-review-tjekliste, jeg bruger, mine rettede afvisninger fra Apple, noter til testeren og to Claude Code-skills, der gennemgår din app. 29 €.

[iOS Kit](https://devoria.fr/da/kits/ios): Lav din iPhone-app med Claude Code: Starter Code fra mine apps, skills der tjekker arbejdet, og kits til Apple Review, screenshots og ASO. 129,99 €.
