Middle+
Как да реализираме авторизация чрез Apple в приложение за iOS?
sobes.tech AI
Отговор от 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.
-
Използвайте framework
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()
}
// Реализация на делегати
@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
let fullName = appleIDCredential.fullName
let email = appleIDCredential.email
print("User ID: \(userIdentifier)")
print("Full Name: \(fullName?.givenName ?? "") \(fullName?.familyName ?? "")")
print("Email: \(email ?? "")")
} else if let passwordCredential = authorization.credential as? ASPasswordCredential {
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!
}
}
// Обработка на данните след успешна автентикация:
// Използвайте `userIdentifier` за уникална идентификация на потребителя Apple.
// `fullName` и `email` са налични само при първия вход за този потребител и вашето приложение. Запазете ги.
// Изпратете `userIdentifier`, `identityToken` (съдържа информация за верификация на сървъра) и `authorizationCode` на вашия сървър за верификация и създаване/свързване на потребителски акаунт.
// Сървърът трябва да верифицира `identityToken` с Apple, за да се увери в автентичността на заявката.
Освен основната автентикация, е важно да реализирате:
* Проверка на състоянието на автентикация на потребителя (например чрез `ASAuthorizationAppleIDProvider().getCredentialState`).
* Възможност за оттегляне на автентикацията от потребителя.
* Взаимодействие с вашия бекенд за създаване/автентикиране на потребителя след успешна автентикация чрез Apple.
Забележка: `Sign In with Apple` е наличен само на устройства с iOS 13 / macOS Catalina и по-нови. За по-старите версии на ОС е необходим резервен механизъм за автентикация.