Middle+
Jak implementovat autorizaci přes Apple v aplikaci na iOS?
sobes.tech AI
Odpověď od AI
Pro implementaci autentizace přes Apple (Sign In with Apple) v iOS aplikaci jsou potřeba následující kroky:
-
Nakonfigurujte aplikaci v Apple Developer Portal:
- Zapněte schopnost "Sign In with Apple" pro váš App ID.
- Vytvořte nebo aktualizujte Provisioning Profile s povolenou schopností.
-
Přidejte schopnost "Sign In with Apple" do projektu Xcode.
-
Použijte framework
AuthenticationServices.
Příklad kódu pro zahájení požadavku na autentizaci:
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()
}
// Implementace delegátů
@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!
}
}
// Zpracování dat po úspěšné autentizaci:
// Použijte `userIdentifier` k jednoznačné identifikaci uživatele Apple.
// `fullName` a `email` jsou dostupné pouze při první přihlášení a je třeba je uložit.
// Odešlete `userIdentifier`, `identityToken` (obsahuje informace pro ověření na serveru) a `authorizationCode` na váš server k ověření a vytvoření/koppování uživatelského účtu.
// Server by měl ověřit `identityToken` s Apple, aby potvrdil pravost požadavku.
Kromě hlavní autentizace je důležité implementovat:
* Kontrolu stavu autentizace uživatele (např. přes `ASAuthorizationAppleIDProvider().getCredentialState`).
* Možnost odvolání autentizace uživatelem.
* Interakci s vaším backendem pro vytvoření/autentifikaci uživatele po úspěšné autentizaci přes Apple.
Poznámka: `Sign In with Apple` je dostupný pouze na zařízeních s iOS 13 / macOS Catalina a novější. Pro starší verze OS je třeba záložní autentizační mechanismus.