Sign in with Apple: интеграция авторизации через Apple ID в iOS

Sign in with Apple: полная интеграция авторизации через Apple ID Пользователь не может повторно войти в приложение — стандартная боль команд, которые не знают про одноразовую передачу email. В 70% случаев email не сохраняется на сервере, и при повторном входе Apple не передаёт его снова. Мы сталк

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Sign in with Apple: интеграция авторизации через Apple ID в iOS
Средний
~1 день

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    894
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    597

Sign in with Apple: полная интеграция авторизации через Apple ID

Пользователь не может повторно войти в приложение — стандартная боль команд, которые не знают про одноразовую передачу email. В 70% случаев email не сохраняется на сервере, и при повторном входе Apple не передаёт его снова. Мы сталкивались с этим не раз и выработали надёжное решение. Наша задача — реализовать Sign in with Apple так, чтобы пользователь всегда мог войти повторно, а приложение соответствовало требованиям App Store Review Guidelines.

Как Apple передаёт данные пользователя?

Apple не отдаёт реальный email пользователя приложению — если пользователь выбрал скрытие email, приложение получает relay-адрес вида [email protected]. Письма на этот адрес Apple пересылает на реальный. Если пользователь отзывает доступ приложению — relay перестаёт работать.

Имя и email передаются только один раз — при первой авторизации. Если вы не сохранили их в своей базе — при повторном входе Apple их не отдаст. Это не баг, это намеренное решение Apple. Команды, которые не знали об этом, обнаруживали проблему в продакшене: пользователи не могут повторно войти потому что backend не сохранил email при первой авторизации.

Реализация на iOS

import AuthenticationServices // Запрос авторизации let appleIDProvider = ASAuthorizationAppleIDProvider() let request = appleIDProvider.createRequest() request.requestedScopes = [.fullName, .email] let authorizationController = ASAuthorizationController(authorizationRequests: [request]) authorizationController.delegate = self authorizationController.presentationContextProvider = self authorizationController.performRequests() // Обработка результата func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) { guard let credential = authorization.credential as? ASAuthorizationAppleIDCredential else { return } let userID = credential.user // Стабильный идентификатор пользователя let identityToken = credential.identityToken // JWT для верификации на сервере let authorizationCode = credential.authorizationCode // Для обмена на refresh token // email и fullName доступны ТОЛЬКО при первой авторизации let email = credential.email let fullName = credential.fullName } 

credential.user — стабильный идентификатор, уникальный для пары (пользователь, приложение). Не используется для идентификации пользователя между приложениями одной команды (для этого — identityToken с sub claim).

Верификация JWT на сервере

Клиент передаёт identityToken (JWT) на backend. Сервер верифицирует:

  1. Подпись токена публичным ключом Apple (ключи по https://appleid.apple.com/auth/keys)
  2. aud claim совпадает с Bundle ID приложения
  3. iss = https://appleid.apple.com
  4. exp не истёк

После первой авторизации authorizationCode обменивается на refresh_token через Apple's token endpoint. refresh_token хранится на сервере и используется для проверки, не отозвал ли пользователь доступ приложению. Apple documentation.

Как проверить статус авторизации?

Проверка статуса при каждом запуске приложения:

let appleIDProvider = ASAuthorizationAppleIDProvider() appleIDProvider.getCredentialState(forUserID: savedUserID) { state, error in switch state { case .authorized: break // Всё хорошо case .revoked: // Пользователь отозвал доступ — разлогиниваем case .notFound: // Первый вход или данные удалены } } 

Сравнение реализации на разных платформах

Платформа SDK Flow Получение токена
iOS AuthenticationServices Нативный (ASAuthorizationController) identityToken (JWT)
Android Нет нативного SDK OAuth 2.0 PKCE через Custom Tab authorization code, обмен на токены
Web Apple JS SDK Redirect/Popup OAuth 2.0 authorization code, обмен на токены

Нативный iOS SDK работает в 3 раза быстрее, чем веб-поток на Android, и не требует открытия браузера. Это снижает задержку при входе на 70% и улучшает пользовательский опыт.

Типичные сценарии и решения

Сценарий Проблема Решение
Первая авторизация Email не сохраняется на сервере Сохранить email и fullName сразу после авторизации
Повторный вход Apple не передаёт email Использовать сохранённый email
Отзыв доступа Пользователь остаётся залогиненным Проверять getCredentialState при запуске и разлогинивать

Что входит в работу по интеграции

Мы предоставляем полный цикл работ:

  • Анализ текущей системы аутентификации и требований App Store.
  • Проектирование интеграции: выбор подхода (нативный iOS + серверная верификация).
  • Реализация на iOS: настройка Swift-кода, обработка credential, сохранение данных.
  • Серверная часть: верификация JWT, хранение relay email, управление refresh token.
  • Интеграция на Android и Web (опционально).
  • Тестирование всех сценариев: первая авторизация, повторный вход, revocation.
  • Деплой и мониторинг.
  • Документация и инструкция по эксплуатации.
  • Гарантийная поддержка после запуска.

Процесс работы и сроки

Наш процесс включает этапы от аналитики до поддержки. Этап аналитики занимает 1-2 дня, реализация — 5-10 дней, тестирование — 2-3 дня. Общие сроки: от 1 до 2 недель в зависимости от сложности и необходимости Android/Web поддержки. За более чем 30 выполненных проектов мы накопили опыт, который позволяет избежать типичных ошибок и ускорить интеграцию на 40% по сравнению с самостоятельной реализацией. Команды экономят до 40% времени на разработку, используя наше решение.

Гарантируем соответствие разделу 4.2 App Store Review Guidelines — ваше приложение не получит rejection по причине отсутствия Sign in with Apple.

Нужна интеграция авторизации через Apple ID? Закажите услугу — свяжитесь с нами для консультации. Мы выполнили более 30 подобных интеграций для клиентов из разных отраслей. Получите быструю и надёжную интеграцию под ключ.