Guideline 4.8 Login Services: нужен ли вход через Apple?
Автор: Mehdi Azizi
Опубликовано , 9 мин
Guideline 4.8: если в приложении есть вход через Google или Facebook, добавь вход, скрывающий e-mail, например через Apple. Исключения, код Expo, удаление.
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 отклоняет приложение.
Что говорит guideline 4.8 Login Services?
Пункт 4.8 находится в разделе 4, «Design», App Review Guidelines. Он касается приложений, которые используют «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 года Apple смягчила это требование: можно предложить вход через Apple или равноценный сервис, который защищает приватность. Многие страницы до сих пор утверждают обратное. В документации Expo всё ещё написано, что приложение со сторонним входом должно предлагать Apple.
На практике отказ по 4.8, опубликованный на форумах разработчиков Apple, заканчивается так: «Note that Sign in with Apple meets the requirements specified in guideline 4.8». Никакой другой подходящий сервис Apple не называет. Чтобы не играть с ревьюером в угадайку, я добавляю вход через Apple.
Пять исключений, предусмотренных текстом
Apple перечисляет пять случаев, когда другой вход не требуется:
- Твоё приложение использует только собственную систему аккаунтов, например e-mail с паролем или код, присланный на e-mail.
- Твоё приложение является альтернативным магазином приложений или распространяется через такой магазин, со входом, принадлежащим этому магазину.
- Твоё приложение образовательное, корпоративное или профессиональное и требует существующий аккаунт школы или компании.
- Твоё приложение использует систему электронной идентификации, поддерживаемую государством или отраслью.
- Твоё приложение является клиентом конкретного стороннего сервиса: человек входит в свою почту или соцсеть, чтобы получить доступ к своему контенту.
Ещё до этих исключений задай себе вопрос: а нужен ли твоему приложению аккаунт вообще? Если нет, guideline 5.1.1(v) требует, чтобы им можно было пользоваться без входа, как я объясняю в гайде по guideline 5.1.1.
| Твой экран входа | Применяется 4.8? |
|---|---|
| Аккаунта нет | Нет |
| Только e-mail или код | Нет |
| Только Google | Да |
| Google и e-mail | Да, по всей видимости |
| Google и Apple | Да, и всё в порядке |
| Существующий аккаунт школы | Нет |
| Google для импорта | Нет, аккаунта нет |
Добавить Sign in with Apple в приложение на Expo
1. Установить модуль и объявить capability
npx expo install expo-apple-authentication
Затем документация Expo просит включить capability в конфигурации приложения:
{
"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 однозначны: кнопка Apple не должна быть меньше других кнопок входа, и её должно быть видно без прокрутки экрана. Компонент Expo рисует официальную кнопку с заголовком, разрешённым Apple.
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
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, документации 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.
4. Тестировать на настоящем iPhone
Expo предупреждает, что в симуляторе можно протестировать только частично, а идентификаторы, полученные в Expo Go, отличаются от идентификаторов опубликованного приложения. Проверь вход, выход и повторный вход на настоящем iPhone, с билдом из TestFlight.
Вход через Apple и удаление аккаунта
Guideline 5.1.1(v) требует, чтобы аккаунт, созданный в приложении, можно было удалить из приложения. Для входа через Apple страница Apple об удалении аккаунта добавляет шаг: использовать REST API Sign in with Apple, чтобы отозвать токены пользователя.
Для отзыва нужны две вещи: токен пользователя, который получают, валидируя код авторизации, и секрет, подписанный твоим приватным ключом Sign in with Apple. Даже если нативный вход обходится без секретного ключа, для отзыва он нужен, и хранится он на твоём сервере. Почему так, объясняю в статье секретный API-ключ в приложении на Expo.
В Nolera при удалении аккаунта приложение снова запрашивает вход через Apple, чтобы получить свежий код авторизации. Оно отправляет его серверной функции, которая обменивает код у Apple и отзывает токен. Если человек отменяет, понятное сообщение об этом говорит, и ничего не удаляется. Остальной процесс, включая данные, подписку и тесты, описан в статье удаление аккаунта в iOS.
Что ответить Apple после отказа по 4.8
В сообщении Apple предлагает два выхода. Либо ты добавляешь равноценный вариант. Либо такой вариант в приложении уже есть: ты отвечаешь в App Store Connect, говоришь, какой именно и почему он выполняет три условия. Apple также советует обновить скриншоты, на которых виден экран входа. Порядок, как ответить App Review, тот же, что и для других правил.
Вот шаблон на английском, адаптируй его (замени номер билда):
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 собрано всё, что я проверяю перед каждой отправкой, плюс два skills, которые проверяют твой проект в Claude Code и готовят ответ, если Apple откажет. Если нужен взгляд живого человека, забронируй час со мной: вместе прочитаем сообщение и посмотрим твой экран входа. Полный порядок действий после отказа описан на странице приложение отклонено Apple.
Если готовишь свой первый релиз, пройди бесплатную диагностику: она подскажет, с какого шага начать, и пришлёт тебе мой чек-лист против отказов 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 в ответе.