# Guideline 4.8 Login Services: нужен ли вход через Apple?

> Guideline 4.8: если в приложении есть вход через Google или Facebook, добавь вход, скрывающий e-mail, например через Apple. Исключения, код Expo, удаление.

Оригинальная страница: [Guideline 4.8 Login Services: нужен ли вход через Apple?](https://devoria.fr/ru/blog/guideline-4-8-login-services-sign-in-with-apple)
Автор: [Mehdi Azizi](https://devoria.fr/ru/mehdi-azizi)
Опубликовано: 2026-10-27
Последняя правка контента: 2026-10-27


Guideline 4.8 начинает действовать, как только твоё приложение использует Google, Facebook или другой сторонний вход для создания основного аккаунта. Тогда она требует ещё один, равноценный вариант входа: он ограничивает данные именем и e-mail, позволяет скрыть e-mail и не отслеживает пользователя для рекламы без его согласия. **С января 2024 года этим вариантом не обязательно должен быть Sign in with Apple, но именно его Apple сама называет в своих отказах.**

В моих приложениях Solys и Nolera предлагают вход через Apple, Google и по e-mail. Этот гайд начинается с актуального текста Apple, потом показывает, как я добавляю вход через Apple в приложение на Expo, подключённое к Supabase, и что это меняет для удаления аккаунта. Если нужен общий обзор причин отказа, лучше прочитай, [почему Apple отклоняет приложение](https://devoria.fr/ru/blog/otkaz-apple-app-store-prichiny).

## Что говорит guideline 4.8 Login Services?

Пункт 4.8 находится в разделе 4, «Design», [App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/#login-services). Он касается приложений, которые используют «a third-party or social login service» для создания или аутентификации основного аккаунта: Facebook Login, Google Sign-In, Log in with X, LinkedIn, Amazon или WeChat. Такие приложения должны также предлагать, «as an equivalent option», другой сервис входа, который выполняет три условия.

| Условие Apple            | Простыми словами                          |
| ------------------------ | ----------------------------------------- |
| Ограниченные данные      | Имя и e-mail, ничего больше               |
| Можно скрыть e-mail      | Пользователь может его спрятать           |
| Без рекламы без согласия | Никакого рекламного трекинга без согласия |

Текст также определяет основной аккаунт: это аккаунт, который человек создаёт в твоём приложении, чтобы идентифицироваться, входить и получать доступ к функциям. Согласно этому определению, **кнопка Google, которая нужна только для импорта файла, не создаёт основной аккаунт**. Пункт 4.8 касается экрана, через который входят в приложение.

### Что изменилось в январе 2024

До 2024 года правило требовало Sign in with Apple от приложений, которые использовали сторонний вход для основного аккаунта. [25 января 2024 года](https://developer.apple.com/news/?id=f1v8pyay) Apple смягчила это требование: можно предложить вход через Apple или равноценный сервис, который защищает приватность. Многие страницы до сих пор утверждают обратное. В [документации Expo](https://docs.expo.dev/versions/latest/sdk/apple-authentication/) всё ещё написано, что приложение со сторонним входом должно предлагать Apple.

На практике отказ по 4.8, опубликованный на [форумах разработчиков Apple](https://developer.apple.com/forums/thread/765145), заканчивается так: «Note that Sign in with Apple meets the requirements specified in guideline 4.8». Никакой другой подходящий сервис Apple не называет. **Чтобы не играть с ревьюером в угадайку, я добавляю вход через Apple.**

## Пять исключений, предусмотренных текстом

Apple перечисляет пять случаев, когда другой вход не требуется:

1. **Твоё приложение использует только собственную систему аккаунтов**, например e-mail с паролем или код, присланный на e-mail.
2. Твоё приложение является альтернативным магазином приложений или распространяется через такой магазин, со входом, принадлежащим этому магазину.
3. Твоё приложение образовательное, корпоративное или профессиональное и требует существующий аккаунт школы или компании.
4. Твоё приложение использует систему электронной идентификации, поддерживаемую государством или отраслью.
5. Твоё приложение является клиентом конкретного стороннего сервиса: человек входит в свою почту или соцсеть, чтобы получить доступ к своему контенту.

Ещё до этих исключений задай себе вопрос: а нужен ли твоему приложению аккаунт вообще? Если нет, guideline 5.1.1(v) требует, чтобы им можно было пользоваться без входа, как я объясняю в [гайде по guideline 5.1.1](https://devoria.fr/ru/blog/guideline-5-1-1-app-store-rejection-fix).

| Твой экран входа           | Применяется 4.8?      |
| -------------------------- | --------------------- |
| Аккаунта нет               | Нет                   |
| Только e-mail или код      | Нет                   |
| Только Google              | Да                    |
| Google и e-mail            | Да, по всей видимости |
| Google и Apple             | Да, и всё в порядке   |
| Существующий аккаунт школы | Нет                   |
| Google для импорта         | Нет, аккаунта нет     |

## Добавить Sign in with Apple в приложение на Expo

### 1. Установить модуль и объявить capability

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

Затем документация Expo просит включить capability в конфигурации приложения:

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

Вторая строка показывает кнопку на языке iPhone. С EAS Build capability включается для идентификатора твоего приложения во время сборки. **Это нативная настройка: она уходит только с новым билдом, никогда с удалённым обновлением.**

Ловушка, которую я нашёл, перечитывая стартовый код своих китов: эта capability требует подписи, даже чтобы запустить приложение в симуляторе. На Mac без сертификата «Apple Development» локальная сборка падала с ошибкой «No code signing certificates are available to use». Исправление: включать вход через Apple только тогда, когда настроен сервер аутентификации.

### 2. Показать официальную кнопку, такую же заметную, как Google

[Правила дизайна Apple](https://developer.apple.com/design/human-interface-guidelines/sign-in-with-apple) однозначны: кнопка Apple не должна быть меньше других кнопок входа, и её должно быть видно без прокрутки экрана. Компонент Expo рисует официальную кнопку с заголовком, разрешённым Apple.

```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 и веб: входа через Apple нет, кнопки нет.
  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 уточняет, что без ширины и высоты кнопка не появится. Цвет и скругление задаются через `buttonStyle` и `cornerRadius`, а не через style.

### 3. Открыть сессию в 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");
    const { error } = await supabase.auth.signInWithIdToken({
      provider: "apple",
      token: credential.identityToken,
    });
    if (error) throw error;
    // Имя приходит только при первой авторизации: сохраняем его сразу.
    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;
  }
}
```

Важны четыре детали из [документации Supabase](https://supabase.com/docs/guides/auth/social-login/auth-apple), документации Expo и правил дизайна Apple:

- **В Supabase укажи свой bundle identifier** в Client IDs провайдера Apple. Чисто нативному приложению для входа не нужен секретный ключ. Добавь `host.exp.Exponent`, если тестируешь в Expo Go.
- **Имя и e-mail приходят только один раз.** При следующих входах Apple их больше не присылает: сохраняй их сразу при первом ответе.
- **E-mail может быть адресом-ретранслятором.** Apple рекомендует не запрашивать потом личный адрес.
- **Отмена не является ошибкой.** В Nolera закрытие окна Apple не вызывает никакого красного сообщения: это осознанное действие.

Реальный случай из Solys, август 2026: кнопки Apple и Google были в приложении, но ни один из двух провайдеров не был включён в Supabase. Код был правильным, исправление сделали на стороне сервера, без нового билда. **Кнопка Apple, которая не срабатывает у ревьюера, приносит отказ по 2.1 вместо отказа по 4.8.** Подробности в [гайде по guideline 2.1](https://devoria.fr/ru/blog/guideline-2-1-app-store-otkaz).

### 4. Тестировать на настоящем iPhone

Expo предупреждает, что в симуляторе можно протестировать только частично, а идентификаторы, полученные в Expo Go, отличаются от идентификаторов опубликованного приложения. Проверь вход, выход и повторный вход на настоящем iPhone, с билдом из [TestFlight](https://devoria.fr/ru/blog/testflight-testirovanie-iphone-prilozheniya).

## Вход через Apple и удаление аккаунта

Guideline 5.1.1(v) требует, чтобы аккаунт, созданный в приложении, можно было удалить из приложения. Для входа через Apple [страница Apple об удалении аккаунта](https://developer.apple.com/support/offering-account-deletion-in-your-app) добавляет шаг: использовать REST API Sign in with Apple, чтобы [отозвать токены](https://developer.apple.com/documentation/signinwithapplerestapi/revoke-tokens) пользователя.

Для отзыва нужны две вещи: токен пользователя, который получают, валидируя код авторизации, и секрет, подписанный твоим приватным ключом Sign in with Apple. **Даже если нативный вход обходится без секретного ключа, для отзыва он нужен, и хранится он на твоём сервере.** Почему так, объясняю в статье [секретный API-ключ в приложении на Expo](https://devoria.fr/ru/blog/sekretnyj-api-klyuch-expo-prilozhenie).

В Nolera при удалении аккаунта приложение снова запрашивает вход через Apple, чтобы получить свежий код авторизации. Оно отправляет его серверной функции, которая обменивает код у Apple и отзывает токен. Если человек отменяет, понятное сообщение об этом говорит, и ничего не удаляется. Остальной процесс, включая данные, подписку и тесты, описан в статье [удаление аккаунта в iOS](https://devoria.fr/ru/blog/udalenie-akkaunta-ios-prilozhenie-app-review).

## Что ответить Apple после отказа по 4.8

В сообщении Apple предлагает два выхода. Либо ты добавляешь равноценный вариант. Либо такой вариант в приложении уже есть: ты отвечаешь в App Store Connect, говоришь, какой именно и почему он выполняет три условия. Apple также советует обновить скриншоты, на которых виден экран входа. Порядок, как [ответить App Review](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/reply-to-app-review-messages/), тот же, что и для других правил.

Вот шаблон на английском, адаптируй его (замени номер билда):

```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 перед отправкой

- Ты знаешь, нужен ли приложению аккаунт. Если нет, им можно пользоваться без входа.
- Если аккаунт создаётся через Google, Facebook или X, вход через Apple есть на том же экране.
- Кнопка Apple официальная, такого же размера, как остальные, видна без прокрутки.
- Провайдер Apple включён на сервере, с твоим bundle identifier.
- Отмена возвращает на экран входа без сообщения об ошибке.
- Имя и e-mail сохраняются при первом же входе.
- Удаление аккаунта отзывает токен Apple с твоего сервера.
- Всё протестировано на настоящем iPhone, с аккаунтом Apple, который ни разу не входил в приложение.
- Скриншоты показывают экран входа таким, какой он в отправленном билде.

## Исправь отказ, прежде чем отправлять приложение заново

Если твоё приложение только что отклонили по 4.8, в [Apple Review Kit](https://devoria.fr/ru/kits/app-review) собрано всё, что я проверяю перед каждой отправкой, плюс два skills, которые проверяют твой проект в Claude Code и готовят ответ, если Apple откажет. Если нужен взгляд живого человека, [забронируй час со мной](https://devoria.fr/ru/coaching): вместе прочитаем сообщение и посмотрим твой экран входа. Полный порядок действий после отказа описан на странице [приложение отклонено Apple](https://devoria.fr/ru/expertise/app-rejected-by-apple).

Если готовишь свой первый релиз, [пройди бесплатную диагностику](https://devoria.fr/ru/diagnostic): она подскажет, с какого шага начать, и пришлёт тебе мой чек-лист против отказов Apple.

Никто не может гарантировать, что Apple примет твоё приложение. Но вход через Apple в нужном месте хотя бы убирает эту причину из списка.

## Частые вопросы

### Обязателен ли вход через Apple в iOS?

Нет, не всегда. Он требуется, только если приложение предлагает сторонний вход, например Google или Facebook, для создания основного аккаунта. С января 2024 года его может заменить другой равноценный сервис, но как подходящий Apple называет только вход через Apple.

### Что значит «Guideline 4.8 - Design - Login Services»?

Это заголовок отказа в сообщении Apple. Он означает, что приложение предлагает сторонний вход, но не даёт равноценного варианта, который ограничивает данные именем и e-mail, позволяет скрыть e-mail и не используется для рекламы без согласия.

### Хватит ли регистрации по e-mail рядом с Google?

Это не гарантировано. Текст требует сервис, позволяющий сохранить e-mail в тайне, а обычная форма его как раз запрашивает. Apple не публиковала позицию по этому случаю, а в отказе называет только вход через Apple. Я бы не стал рисковать.

### Нужно ли предлагать вход через Apple на Android?

Нет. Пункт 4.8 является правилом App Store, а модуль Expo работает только в iOS. На Android `isAvailableAsync()` возвращает false: кнопка Apple не показывается, и Google может остаться единственным вариантом.

### Нужен ли новый билд после отказа по 4.8?

Да, в большинстве случаев. Вход через Apple требует нативной capability, которая включается во время сборки. Удалённое обновление не может её добавить. Единственное исключение: в приложении уже был подходящий вариант, и достаточно объяснить это Apple в ответе.


## Твой проект

[Apple Review Kit](https://devoria.fr/ru/kits/app-review): Мой чек-лист для ревью App Store, исправленные отказы Apple, заметки для ревьюера и два skills для Claude Code, которые проверяют твоё приложение. 29 €.

[iOS Kit](https://devoria.fr/ru/kits/ios): Создай приложение для iPhone с Claude Code: стартовый код моих приложений, skills для проверки его работы и наборы Apple Review, Screenshots и ASO. 129,99 €.
