# Guideline 4.8: is Sign in with Apple verplicht?

> Guideline 4.8: biedt je app Google of Facebook, voeg dan een login toe die je e-mail beschermt, zoals Apple. Uitzonderingen, Expo-code en accountverwijdering.

Originele pagina: [Guideline 4.8: is Sign in with Apple verplicht?](https://devoria.fr/nl/blog/guideline-4-8-login-services-sign-in-with-apple)
Auteur: [Mehdi Azizi](https://devoria.fr/nl/mehdi-azizi)
Publicatie: 2026-10-27
Laatste inhoudsrevisie: 2026-10-27


Guideline 4.8 geldt zodra je app Google, Facebook of een andere externe login gebruikt om het hoofdaccount aan te maken. Dan moet je een andere, gelijkwaardige inlogoptie aanbieden die de gegevens beperkt tot naam en e-mailadres, waarmee je je e-mailadres kunt verbergen en die de gebruiker niet zonder toestemming volgt voor advertenties. **Sinds januari 2024 hoeft die optie niet per se "Sign in with Apple" te zijn, maar het is wel de optie die Apple zelf noemt in zijn afwijzingsberichten.**

Van mijn apps bieden Solys en Nolera inloggen met Apple, Google en e-mail. Deze gids vertrekt vanuit de huidige tekst van Apple, laat daarna zien hoe ik inloggen met Apple toevoeg aan een Expo-app die aan Supabase gekoppeld is, en wat het verandert voor het verwijderen van accounts. Voor het overzicht van alle afwijzingsredenen kun je beter [waarom Apple een app afwijst](https://devoria.fr/nl/blog/app-afgewezen-door-apple-waarom) lezen.

## Wat zegt guideline 4.8 Login Services?

Guideline 4.8 staat in sectie 4, "Design", van de [App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/#login-services). Hij gaat over apps die "a third-party or social login service" gebruiken om het hoofdaccount aan te maken of te verifiëren: Facebook Login, Google Sign-In, Log in with X, LinkedIn, Amazon of WeChat. Die apps moeten daarnaast, "as an equivalent option", een andere inlogdienst aanbieden die aan drie voorwaarden voldoet.

| Voorwaarde van Apple                 | In gewone taal                              |
| ------------------------------------ | ------------------------------------------- |
| Beperkte gegevens                    | Naam en e-mailadres, meer niet              |
| Privé e-mailadres mogelijk           | De gebruiker kan het verbergen              |
| Geen advertenties zonder toestemming | Geen advertentietracking zonder toestemming |

De tekst definieert ook het hoofdaccount: het account dat iemand in je app aanmaakt om zich te identificeren, in te loggen en je functies te gebruiken. Volgens die definitie **maakt een Google-knop die alleen dient om een bestand te importeren geen hoofdaccount aan**. Guideline 4.8 gaat over het scherm waarmee je je app binnenkomt.

### Wat er in januari 2024 veranderde

Vóór 2024 verplichtte de regel "Sign in with Apple" voor apps die een externe login voor het hoofdaccount gebruikten. Op [25 januari 2024](https://developer.apple.com/news/?id=f1v8pyay) heeft Apple dat versoepeld: je mag inloggen met Apple aanbieden, of een gelijkwaardige dienst die de privacy beschermt. Veel pagina's beweren nog het tegendeel. De [documentatie van Expo](https://docs.expo.dev/versions/latest/sdk/apple-authentication/) schrijft nog steeds dat een app met een externe login Apple moet aanbieden.

In de praktijk eindigt het 4.8-afwijzingsbericht dat op de [ontwikkelaarsforums van Apple](https://developer.apple.com/forums/thread/765145) staat zo: "Note that Sign in with Apple meets the requirements specified in guideline 4.8". Apple noemt geen enkele andere dienst die voldoet. **Om niet te hoeven gokken wat de reviewer accepteert, voeg ik inloggen met Apple toe.**

## De vijf uitzonderingen in de tekst

Apple noemt vijf gevallen waarin geen andere login vereist is:

1. **Je app gebruikt alleen je eigen accountsysteem**, bijvoorbeeld e-mail met wachtwoord of een code die per e-mail wordt verstuurd.
2. Je app is een alternatieve app store, of wordt via zo'n store verspreid, met een login die bij die store hoort.
3. Je app is educatief, zakelijk of professioneel, en vereist een bestaand school- of bedrijfsaccount.
4. Je app gebruikt een elektronisch identiteitssysteem dat door een overheid of sector wordt ondersteund.
5. Je app is de client van een specifieke externe dienst: iemand logt in op zijn eigen mail of sociale netwerk om bij zijn eigen content te komen.

Stel jezelf nog vóór die uitzonderingen één vraag: heeft je app wel een account nodig? Zo niet, dan vraagt guideline 5.1.1(v) om de app zonder login bruikbaar te laten, zoals ik uitleg in de [gids over guideline 5.1.1](https://devoria.fr/nl/blog/guideline-5-1-1-app-store-afwijzing-oplossen).

| Je inlogscherm         | Geldt 4.8?         |
| ---------------------- | ------------------ |
| Geen account           | Nee                |
| Alleen e-mail of code  | Nee                |
| Alleen Google          | Ja                 |
| Google en e-mail       | Ja, in principe    |
| Google en Apple        | Ja, en het voldoet |
| Bestaand schoolaccount | Nee                |
| Google voor een import | Nee, geen account  |

## "Sign in with Apple" toevoegen aan een Expo-app

### 1. De module installeren en de capability declareren

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

De documentatie van Expo vraagt je daarna de capability in de configuratie van de app aan te zetten:

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

De tweede regel toont de knop in de taal van de iPhone. Met EAS Build wordt de capability op je app-ID aangezet op het moment van de build. **Het is een native instelling: die gaat mee met een nieuwe build, nooit met een update op afstand.**

Een valkuil die ik vond toen ik de startcode van mijn kits nalas: deze capability vereist signing, zelfs om de app in de simulator te starten. Op een Mac zonder "Apple Development"-certificaat faalde de lokale build met "No code signing certificates are available to use". De oplossing: inloggen met Apple pas aanzetten wanneer de authenticatieserver geconfigureerd is.

### 2. De officiële knop tonen, even zichtbaar als Google

De [designregels van Apple](https://developer.apple.com/design/human-interface-guidelines/sign-in-with-apple) zijn duidelijk: de Apple-knop mag niet kleiner zijn dan de andere inlogknoppen, en je mag niet hoeven scrollen om hem te zien. Het component van Expo tekent de officiële knop, met een titel die Apple toestaat.

```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 en web: geen inloggen met Apple, dus geen knop.
  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 geeft aan dat de knop niet verschijnt zonder breedte en hoogte. Kleur en afronding stel je in via `buttonStyle` en `cornerRadius`, niet via de style.

### 3. De sessie openen in 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 ontbreekt");
    const { error } = await supabase.auth.signInWithIdToken({
      provider: "apple",
      token: credential.identityToken,
    });
    if (error) throw error;
    // De voornaam komt alleen bij de eerste autorisatie: meteen opslaan.
    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;
  }
}
```

Vier details zijn belangrijk, uit de [documentatie van Supabase](https://supabase.com/docs/guides/auth/social-login/auth-apple), die van Expo en de designregels van Apple:

- **Geef in Supabase je bundle-ID op** bij de Client IDs van de Apple-provider. Een puur native app heeft geen geheime sleutel nodig om in te loggen. Voeg `host.exp.Exponent` toe als je in Expo Go test.
- **Voornaam en e-mailadres komen maar één keer binnen.** Apple stuurt ze bij volgende logins niet meer mee: sla ze op bij de eerste keer.
- **Het e-mailadres kan een relay-adres zijn.** Apple raadt aan daarna niet alsnog om een persoonlijk adres te vragen.
- **Annuleren is geen fout.** Als je in Nolera het Apple-venster sluit, verschijnt er geen rode melding: het is een bewuste actie.

Iets wat ik in augustus 2026 met Solys meemaakte: de Apple- en Google-knoppen zaten in de app, maar geen van beide providers stond aan in Supabase. De code klopte, de oplossing gebeurde aan de serverkant, zonder nieuwe build. **Een Apple-knop die faalt bij de reviewer levert een afwijzing op 2.1 op in plaats van op 4.8.** De details staan in de [gids over guideline 2.1](https://devoria.fr/nl/blog/guideline-2-1-app-store-afwijzing-oplossen).

### 4. Testen op een echte iPhone

Expo waarschuwt dat de simulator maar beperkt testen toelaat, en dat de gegevens die je in Expo Go krijgt verschillen van die van de gepubliceerde app. Test inloggen, uitloggen en opnieuw inloggen op een echte iPhone, met een [TestFlight](https://devoria.fr/nl/blog/testflight-iphone-app-testen-voor-indienen)-build.

## Inloggen met Apple en accountverwijdering

Guideline 5.1.1(v) vraagt dat een account dat in de app is aangemaakt ook vanuit de app verwijderd kan worden. Met inloggen met Apple voegt de [pagina van Apple over accountverwijdering](https://developer.apple.com/support/offering-account-deletion-in-your-app) een stap toe: de REST API van Sign in with Apple gebruiken om de tokens van de gebruiker [in te trekken](https://developer.apple.com/documentation/signinwithapplerestapi/revoke-tokens).

Dat intrekken vraagt twee dingen: een token van de gebruiker, dat je krijgt door een autorisatiecode te valideren, en een secret dat ondertekend is met je private Sign in with Apple-sleutel. **Ook al heeft de native login geen geheime sleutel nodig, het intrekken wel, en die blijft op je server.** Het waarom lees je in [geheime API-sleutel in een Expo-app](https://devoria.fr/nl/blog/geheime-api-sleutel-expo-app-beschermen).

Bij Nolera vraagt de app bij het verwijderen van het account opnieuw om in te loggen met Apple, om een verse autorisatiecode te krijgen. Die stuurt de app naar een serverfunctie, die hem bij Apple inwisselt en daarna de token intrekt. Annuleert de gebruiker, dan zegt een duidelijke melding dat, en wordt er niets verwijderd. De rest van het proces, inclusief gegevens, abonnement en tests, staat in [iOS-account verwijderen](https://devoria.fr/nl/blog/account-verwijderen-ios-app-testen-app-review).

## Wat je Apple antwoordt na een 4.8-afwijzing

Het bericht van Apple biedt twee uitwegen. Of je voegt een gelijkwaardige optie toe. Of je app heeft er al een: dan antwoord je in App Store Connect, zeg je welke het is en waarom die aan de drie voorwaarden voldoet. Apple raadt ook aan de screenshots bij te werken die het inlogscherm tonen. De procedure om [App Review te antwoorden](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/reply-to-app-review-messages/) is dezelfde als bij andere regels.

Hier een sjabloon in het Engels, om aan te passen (vervang het buildnummer):

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

## De 4.8-checklist voor het insturen

- Je weet of je app een account nodig heeft. Zo niet, dan werkt hij zonder login.
- Als Google, Facebook of X het account aanmaken, staat inloggen met Apple op hetzelfde scherm.
- De Apple-knop is de officiële knop, even groot als de andere, zichtbaar zonder scrollen.
- De Apple-provider staat aan op de server, met je bundle-ID.
- Annuleren brengt je terug naar het inlogscherm, zonder foutmelding.
- Voornaam en e-mailadres worden bij de eerste login opgeslagen.
- Accountverwijdering trekt de Apple-token in, vanaf je server.
- Alles is getest op een echte iPhone, met een Apple-account dat nog nooit in de app heeft ingelogd.
- Je screenshots tonen het inlogscherm zoals het in de ingestuurde build staat.

## Je afwijzing oplossen voordat je de app opnieuw instuurt

Is je app net afgewezen op 4.8, dan bundelt de [Apple Review Kit](https://devoria.fr/nl/kits/app-review) wat ik vóór elke inzending controleer, met twee skills die je project in Claude Code nalopen en je antwoord voorbereiden als Apple afwijst. Wil je een menselijke blik, [boek een uur met mij](https://devoria.fr/nl/coaching): we lezen het bericht samen en bekijken je inlogscherm. De volledige aanpak na een afwijzing staat op de pagina [app afgewezen door Apple](https://devoria.fr/nl/expertise/app-afgewezen-door-apple).

Bereid je je eerste release voor, [doe dan je gratis diagnose](https://devoria.fr/nl/diagnostic): die vertelt je welke stap je eerst aanpakt en stuurt je mijn checklist tegen Apple-afwijzingen.

Niemand kan garanderen dat Apple je app accepteert. Inloggen met Apple op de juiste plek toevoegen haalt in elk geval deze reden van de lijst.

## Veelgestelde vragen

### Is inloggen met Apple verplicht op iOS?

Nee, niet altijd. Het is alleen vereist als je app een externe login, zoals Google of Facebook, aanbiedt om het hoofdaccount aan te maken. Sinds januari 2024 mag een andere gelijkwaardige dienst het vervangen, maar Apple noemt alleen inloggen met Apple als conform.

### Wat betekent "Guideline 4.8 - Design - Login Services"?

Dat is de titel van de afwijzing in het bericht van Apple. Het betekent dat je app een externe login aanbiedt zonder gelijkwaardige optie die de gegevens beperkt tot naam en e-mailadres, het e-mailadres laat verbergen en niet zonder toestemming voor advertenties wordt gebruikt.

### Is mijn registratie met e-mail naast Google genoeg?

Dat is niet gegarandeerd. De tekst vraagt om een dienst waarmee je je e-mailadres privé kunt houden, terwijl een gewoon formulier er juist om vraagt. Apple heeft hier geen standpunt over gepubliceerd, en zijn afwijzingsbericht noemt alleen inloggen met Apple. Ik zou dat risico niet nemen.

### Moet ik inloggen met Apple ook op Android aanbieden?

Nee. Guideline 4.8 is een App Store-regel, en de module van Expo werkt alleen op iOS. Op Android geeft `isAvailableAsync()` false terug: de Apple-knop verschijnt niet, en Google mag als enige overblijven.

### Is er een nieuwe build nodig na een 4.8-afwijzing?

Ja, in de meeste gevallen. Inloggen met Apple vraagt een native capability die bij de build wordt aangezet. Een update op afstand kan die niet toevoegen. Enige uitzondering: je app had al een conforme optie, en je hoeft het Apple alleen uit te leggen in je antwoord.


## Je project

[Apple Review Kit](https://devoria.fr/nl/kits/app-review): De App Store-reviewchecklist die ik gebruik, mijn opgeloste afwijzingen, de notities voor de tester en twee Claude Code-skills die je app nalezen. 29 €.

[iOS Kit](https://devoria.fr/nl/kits/ios): Maak je iPhone-app met Claude Code: de Starter Code van mijn apps, skills die zijn werk controleren en de kits Apple Review, Screenshots en ASO. 129,99 €.
