Назад к вопросам
Middle+
86
questionbank
Как реализовать авторизацию через Apple в приложении на iOS?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Для реализации авторизации через Apple (Sign In with Apple) на iOS приложении необходимы следующие шаги:
-
Настроить приложение в Apple Developer Portal:
- Включить Capability "Sign In with Apple" для вашего App ID.
- Сгенерировать или обновить Provisioning Profile с включенной Capability.
-
Добавить Capability "Sign In with Apple" в Xcode проект.
-
Использовать фреймворк
AuthenticationServices.
Пример кода для инициации запроса на авторизацию:
import AuthenticationServices
@available(iOS 13.0, *)
func performSignInWithApple() {
// Создаем провайдер
let appleIDProvider = ASAuthorizationAppleIDProvider()
// Создаем запросы
let request = appleIDProvider.createRequest()
request.requestedScopes = [.fullName, .email] // Запрашиваем имя и почту пользователя
// Создаем контроллер для обработки запросов
let authorizationController = ASAuthorizationController(authorizationRequests: [request])
// Устанавливаем делегаты для обработки ответов
authorizationController.delegate = self
authorizationController.presentationContextProvider = self
// Запускаем процесс авторизации
authorizationController.performRequests()
}
// Реализация делегатов
// ASAuthorizationControllerDelegate
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerDelegate {
// Обработка успешной авторизации
func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
let userIdentifier = appleIDCredential.user // Уникальный идентификатор пользователя Apple
let fullName = appleIDCredential.fullName // Имя пользователя
let email = appleIDCredential.email // Почта пользователя (доступна только при первом входе)
// Здесь можно отправить userIdentifier и другие данные на ваш сервер для верификации и создания/связывания учетной записи
print("User ID: \(userIdentifier)")
print("Full Name: \(fullName?.givenName ?? "") \(fullName?.familyName ?? "")")
print("Email: \(email ?? "")")
} else if let passwordCredential = authorization.credential as? ASPasswordCredential {
// Пользователь использовал сохраненные пароли из iCloud Keychain
let username = passwordCredential.user
let password = passwordCredential.password
// Здесь можно использовать эти данные для входа
print("Username: \(username)")
print("Password: \(password)")
}
}
// Обработка ошибки авторизации
func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
print("Sign in with Apple failed: \(error.localizedDescription)")
// Здесь обрабатываем ошибки (например, пользователь отменил авторизацию)
}
}
// ASAuthorizationControllerPresentationContextProviding
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerPresentationContextProviding {
// Предоставляет окно, на котором будет показан интерфейс авторизации
func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
return view.window! // Важно вернуть НЕ nil window
}
}
// TODO: Убедитесь, что YourViewController реализует необходимые протоколы.
- Обработать данные, полученные после успешной авторизации:
- Используйте
userIdentifierдля уникальной идентификации пользователя Apple. fullNameиemailдоступны только при первом входе для данного пользователя и вашего приложения. Сохраните их.- Передайте
userIdentifier,identityToken(содержит информацию для верификации на сервере) иauthorizationCodeна ваш сервер для верификации и создания/связывания учетной записи пользователя в вашей системе. - Сервер должен верифицировать
"identityToken"с Apple, чтобы убедиться в подлинности запроса.
- Используйте
Помимо основной авторизации, также важно реализовать:
- Обработку состояния авторизации пользователя (например, через
ASAuthorizationAppleIDProvider().getCredentialState). - Возможность отзыва авторизации пользователем.
- Взаимодействие с вашим бэкендом для создания/аутентификации пользователя после успешной авторизации через Apple.
Замечание: Sign In with Apple доступен только на устройствах с iOS 13 / macOS Catalina и новее. Для более старых версий ОС потребуется запасной механизм аутентификации.