# Guideline 4.8 Login Services: je nutné Sign in with Apple?

> Guideline 4.8: pokud tvoje appka nabízí Google nebo Facebook, přidej přihlášení, které chrání e-mail, třeba Apple. Výjimky, kód pro Expo a smazání účtu.

Původní stránka: [Guideline 4.8 Login Services: je nutné Sign in with Apple?](https://devoria.fr/cs/blog/guideline-4-8-login-services-sign-in-with-apple)
Autor: [Mehdi Azizi](https://devoria.fr/cs/mehdi-azizi)
Publikováno: 2026-10-27
Poslední revize obsahu: 2026-10-27


Guideline 4.8 platí, jakmile tvoje appka používá Google, Facebook nebo jiné přihlášení třetí strany k vytvoření hlavního účtu. V tu chvíli vyžaduje další, rovnocennou možnost přihlášení, která omezí data na jméno a e-mail, umožní e-mail skrýt a bez souhlasu uživatele ho nesleduje kvůli reklamě. **Od ledna 2024 to už nemusí být nutně „Sign in with Apple“, ale právě tu Apple sám uvádí ve svých zprávách o zamítnutí.**

V mých appkách nabízí Solys a Nolera přihlášení přes Apple, Google a e-mail. Tenhle návod vychází z aktuálního textu Applu, pak ukazuje, jak přidávám přihlášení přes Apple do Expo appky napojené na Supabase, a co to mění u mazání účtu. Pro celkový přehled důvodů zamítnutí si radši přečti, [proč Apple zamítá appky](https://devoria.fr/cs/blog/apple-zamitl-aplikaci-duvody).

## Co říká guideline 4.8 Login Services?

Pravidlo 4.8 najdeš v sekci 4, „Design“, v [App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/#login-services). Týká se appek, které používají „a third-party or social login service“ k vytvoření nebo ověření hlavního účtu: Facebook Login, Google Sign-In, Log in with X, LinkedIn, Amazon nebo WeChat. Takové appky musí navíc nabídnout, „as an equivalent option“, jinou přihlašovací službu, která splňuje tři podmínky.

| Podmínka Applu             | Lidsky řečeno                         |
| -------------------------- | ------------------------------------- |
| Omezená data               | Jméno a e-mail, nic víc               |
| Možnost soukromého e-mailu | Uživatel ho může skrýt                |
| Žádná reklama bez souhlasu | Žádné reklamní sledování bez souhlasu |

Text definuje i hlavní účet: ten, který si člověk ve tvé appce vytvoří, aby se identifikoval, přihlásil a dostal se k jejím funkcím. Podle této definice **tlačítko Google, které slouží jen k importu souboru, hlavní účet nevytváří**. Pravidlo 4.8 míří na obrazovku, kterou se do appky vstupuje.

### Co se změnilo v lednu 2024

Před rokem 2024 pravidlo vyžadovalo „Sign in with Apple“ u appek, které pro hlavní účet používaly přihlášení třetí strany. [25. ledna 2024](https://developer.apple.com/news/?id=f1v8pyay) Apple tenhle bod zmírnil: můžeš nabídnout přihlášení přes Apple, nebo rovnocennou službu, která chrání soukromí. Spousta stránek pořád tvrdí opak. [Dokumentace Expa](https://docs.expo.dev/versions/latest/sdk/apple-authentication/) stále píše, že appka s přihlášením třetí strany musí nabízet Apple.

V praxi zpráva o zamítnutí 4.8 zveřejněná na [vývojářském fóru Applu](https://developer.apple.com/forums/thread/765145) končí takto: „Note that Sign in with Apple meets the requirements specified in guideline 4.8“. Žádnou jinou vyhovující službu Apple nejmenuje. **Abych si s reviewerem nehrál na hádanky, přidávám přihlášení přes Apple.**

## Pět výjimek, které text uvádí

Apple vyjmenovává pět případů, kdy se žádné další přihlášení nevyžaduje:

1. **Tvoje appka používá jen vlastní systém účtů**, třeba e-mail s heslem nebo kód poslaný e-mailem.
2. Tvoje appka je alternativní obchod s aplikacemi, nebo je jím distribuovaná, s přihlášením specifickým pro tento obchod.
3. Tvoje appka je vzdělávací, firemní nebo pracovní a vyžaduje existující školní nebo firemní účet.
4. Tvoje appka používá systém elektronické identity podporovaný státem nebo odvětvím.
5. Tvoje appka je klientem konkrétní služby třetí strany: člověk se přihlašuje ke své poště nebo sociální síti, aby se dostal ke svému vlastnímu obsahu.

Ještě před těmi výjimkami si polož otázku: potřebuje tvoje appka vůbec účet? Pokud ne, guideline 5.1.1(v) požaduje, aby šla používat bez přihlášení, jak vysvětluju v [návodu ke guideline 5.1.1](https://devoria.fr/cs/blog/guideline-5-1-1-zamitnuti-app-store).

| Tvoje přihlašovací obrazovka | Platí 4.8?      |
| ---------------------------- | --------------- |
| Žádný účet                   | Ne              |
| Jen e-mail nebo kód          | Ne              |
| Jen Google                   | Ano             |
| Google a e-mail              | Ano, nejspíš    |
| Google a Apple               | Ano, a vyhovuje |
| Existující školní účet       | Ne              |
| Google pro import            | Ne, žádný účet  |

## Přidání „Sign in with Apple“ do Expo appky

### 1. Nainstaluj modul a deklaruj capability

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

Dokumentace Expa pak žádá zapnout capability v konfiguraci appky:

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

Druhý řádek zobrazí tlačítko v jazyce iPhonu. S EAS Build se capability zapne na identifikátoru tvé appky v okamžiku buildu. **Je to nativní nastavení: dostane se ven jen s novým buildem, nikdy ne vzdálenou aktualizací.**

Past, na kterou jsem narazil při revizi startovního kódu svých kitů: tahle capability vyžaduje podepisování, i když appku spouštíš jen v simulátoru. Na Macu bez certifikátu „Apple Development“ lokální kompilace padala s „No code signing certificates are available to use“. Oprava: zapínat přihlášení přes Apple jen tehdy, když je nakonfigurovaný autentizační server.

### 2. Zobraz oficiální tlačítko, stejně viditelné jako Google

[Designová pravidla Applu](https://developer.apple.com/design/human-interface-guidelines/sign-in-with-apple) jsou jasná: tlačítko Apple nesmí být menší než ostatní přihlašovací tlačítka a nesmí být nutné kvůli němu scrollovat. Komponenta z Expa vykreslí oficiální tlačítko s textem, který Apple povoluje.

```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 a web: žádné přihlášení přes Apple, žádné tlačítko.
  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 upozorňuje, že bez šířky a výšky se tlačítko nezobrazí. Barva a zaoblení se nastavují přes `buttonStyle` a `cornerRadius`, ne přes style.

### 3. Otevři session v 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("Chybí token od Applu");
    const { error } = await supabase.auth.signInWithIdToken({
      provider: "apple",
      token: credential.identityToken,
    });
    if (error) throw error;
    // Křestní jméno přijde jen při první autorizaci: hned si ho uložíme.
    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;
  }
}
```

Důležité jsou čtyři detaily, vzaté z [dokumentace Supabase](https://supabase.com/docs/guides/auth/social-login/auth-apple), z dokumentace Expa a z designových pravidel Applu:

- **V Supabase zadej svůj bundle identifier** do Client IDs u poskytovatele Apple. Čistě nativní appka nepotřebuje k přihlášení tajný klíč. Pokud testuješ v Expo Go, přidej `host.exp.Exponent`.
- **Křestní jméno a e-mail přijdou jen jednou.** Při dalších přihlášeních je Apple už neposílá: ulož si je hned z první odpovědi.
- **E-mail může být relay adresa.** Apple doporučuje potom už nežádat o osobní adresu.
- **Zrušení není chyba.** V Nolera zavření Apple panelu nevyvolá žádnou červenou hlášku: je to vědomé rozhodnutí.

Zažitý případ ze Solys, v srpnu 2026: tlačítka Apple i Google v appce byla, ale ani jeden z poskytovatelů nebyl v Supabase zapnutý. Kód byl v pořádku, oprava proběhla na straně serveru, bez nového buildu. **Tlačítko Apple, které před reviewerem selže, znamená zamítnutí 2.1 místo zamítnutí 4.8.** Podrobnosti najdeš v [návodu ke guideline 2.1](https://devoria.fr/cs/blog/guideline-2-1-zamitnuti-app-store).

### 4. Testuj na skutečném iPhonu

Expo upozorňuje, že simulátor umožňuje jen omezený test a že identifikátory získané v Expo Go se liší od těch ve vydané appce. Otestuj přihlášení, odhlášení a opětovné přihlášení na skutečném iPhonu, s buildem v [TestFlightu](https://devoria.fr/cs/blog/testflight-testovani-iphone-aplikace).

## Přihlášení přes Apple a smazání účtu

Guideline 5.1.1(v) požaduje, aby účet vytvořený v appce šlo z appky i smazat. U přihlášení přes Apple přidává [stránka Applu o mazání účtu](https://developer.apple.com/support/offering-account-deletion-in-your-app) další krok: použít REST API Sign in with Apple k [revokaci tokenů](https://developer.apple.com/documentation/signinwithapplerestapi/revoke-tokens) daného člověka.

Revokace potřebuje dvě věci: token uživatele, který získáš validací autorizačního kódu, a secret podepsaný tvým privátním klíčem Sign in with Apple. **I když se nativní přihlášení bez tajného klíče obejde, revokace ho vyžaduje, a ten zůstává na tvém serveru.** Proč, to vysvětluju v článku [tajný API klíč v Expo appce](https://devoria.fr/cs/blog/tajny-api-klic-aplikace-expo).

V Nolera si appka při mazání účtu znovu vyžádá přihlášení přes Apple, aby získala čerstvý autorizační kód. Pošle ho serverové funkci, která ho u Applu vymění a pak token revokuje. Když to člověk zruší, jasná zpráva mu to oznámí a nic se nesmaže. Zbytek postupu, včetně dat, předplatného a testů, najdeš v článku [smazání účtu v iOS appce](https://devoria.fr/cs/blog/smazani-uctu-ios-aplikace-test-pred-apple).

## Co odpovědět Applu po zamítnutí 4.8

Zpráva od Applu nabízí dvě cesty. Buď přidáš rovnocennou možnost. Nebo ji tvoje appka už má: odpovíš v App Store Connect, napíšeš, o kterou jde a proč splňuje všechny tři podmínky. Apple také doporučuje aktualizovat screenshoty, které ukazují přihlašovací obrazovku. Postup, jak [odpovědět App Review](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/reply-to-app-review-messages/), je stejný jako u ostatních pravidel.

Tady je šablona v angličtině, kterou si uprav (nahraď číslo buildu):

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

## Checklist 4.8 před odesláním

- Víš, jestli tvoje appka potřebuje účet. Pokud ne, jde používat bez přihlášení.
- Pokud účet vytváří Google, Facebook nebo X, přihlášení přes Apple je na stejné obrazovce.
- Tlačítko Apple je oficiální tlačítko, stejně velké jako ostatní, viditelné bez scrollování.
- Poskytovatel Apple je zapnutý na serveru, s tvým bundle identifierem.
- Zrušení vrátí uživatele na přihlašovací obrazovku, bez chybové hlášky.
- Křestní jméno a e-mail se uloží hned při prvním přihlášení.
- Smazání účtu revokuje token Applu, z tvého serveru.
- Všechno je otestované na skutečném iPhonu, s Apple účtem, který se do appky ještě nikdy nepřihlásil.
- Tvoje screenshoty ukazují přihlašovací obrazovku přesně tak, jak vypadá v odeslaném buildu.

## Oprav zamítnutí, než appku pošleš znovu

Pokud ti Apple appku právě zamítl kvůli 4.8, [Apple Review Kit](https://devoria.fr/cs/kits/app-review) shrnuje, co kontroluju před každým odesláním, plus dva skills, které v Claude Code projdou tvůj projekt a připraví ti odpověď, když Apple zamítne. Jestli chceš lidský pohled, [zarezervuj si se mnou hodinu](https://devoria.fr/cs/coaching): projdeme zprávu spolu a podíváme se na tvoji přihlašovací obrazovku. Celý postup po zamítnutí je na stránce [appka zamítnutá Applem](https://devoria.fr/cs/expertise/aplikace-zamitnuta-applem).

Pokud chystáš své první vydání, [udělej si diagnostiku zdarma](https://devoria.fr/cs/diagnostic): řekne ti, kterým krokem začít, a pošle ti můj checklist proti zamítnutí od Applu.

Nikdo ti nemůže zaručit, že Apple tvoji appku schválí. Přidáním přihlášení přes Apple na správné místo aspoň škrtneš tenhle důvod ze seznamu.

## Časté dotazy

### Je přihlášení přes Apple na iOS povinné?

Ne, ne ve všech případech. Vyžaduje se jen tehdy, když tvoje appka nabízí přihlášení třetí strany, třeba Google nebo Facebook, k vytvoření hlavního účtu. Od ledna 2024 ho může nahradit jiná rovnocenná služba, ale Apple jako vyhovující uvádí jen přihlášení přes Apple.

### Co znamená „Guideline 4.8 - Design - Login Services“?

Je to název zamítnutí ve zprávě od Applu. Znamená, že tvoje appka nabízí přihlášení třetí strany bez rovnocenné možnosti, která omezuje data na jméno a e-mail, umožňuje e-mail skrýt a neslouží k reklamě bez souhlasu.

### Stačí registrace e-mailem vedle Googlu?

To není jisté. Text požaduje službu, která umožní nechat si e-mail pro sebe, zatímco klasický formulář ho vyžaduje. Apple k tomuto případu nezveřejnil žádné stanovisko a jeho zpráva o zamítnutí uvádí jen přihlášení přes Apple. Já bych to riziko nepodstupoval.

### Musím nabízet přihlášení přes Apple i na Androidu?

Ne. Pravidlo 4.8 je pravidlo App Store a modul z Expa funguje jen na iOS. Na Androidu vrací `isAvailableAsync()` false: tlačítko Apple se nezobrazí a Google může zůstat sám.

### Je po zamítnutí 4.8 potřeba nový build?

Ano, ve většině případů. Přihlášení přes Apple vyžaduje nativní capability, zapnutou při buildu. Vzdálená aktualizace ji přidat neumí. Jediná výjimka: tvoje appka už vyhovující možnost měla a stačí to Applu vysvětlit v odpovědi.


## Tvůj projekt

[Apple Review Kit](https://devoria.fr/cs/kits/app-review): Checklist pro App Store review, který používám, moje opravená zamítnutí od Applu, poznámky pro testera a dva skills pro Claude Code na kontrolu aplikace. 29 €.

[iOS Kit](https://devoria.fr/cs/kits/ios): Vytvoř svou iPhone aplikaci s Claude Code: startovní kód mých aplikací, skills, které kontrolují jeho práci, a kity Apple Review, Screenshots a ASO. 129,99 €.
