Middle+
Ako implementovať autorizáciu cez Apple v iOS aplikácii?
sobes.tech AI
Odpoveď od AI
Na implementáciu autorizácie cez Apple (Sign In with Apple) na iOS aplikácii sú potrebné nasledovné kroky:
-
Nastavte aplikáciu v Apple Developer Portal:
- Zapnite Capability "Sign In with Apple" pre váš App ID.
- Vygenerujte alebo aktualizujte Provisioning Profile s touto Capability.
-
Pridajte Capability "Sign In with Apple" do projektu v Xcode.
-
Použite framework
AuthenticationServices.
Príklad kódu na iniciáciu požiadavky na autorizáciu:
import AuthenticationServices
@available(iOS 13.0, *)
func performSignInWithApple() {
// Vytvoríme poskytovateľa
let appleIDProvider = ASAuthorizationAppleIDProvider()
// Vytvoríme požiadavky
let request = appleIDProvider.createRequest()
request.requestedScopes = [.fullName, .email] // Požiadať o meno a email používateľa
// Vytvoríme kontrolér na spracovanie požiadaviek
let authorizationController = ASAuthorizationController(authorizationRequests: [request])
// Nastavíme delegátov na spracovanie odpovedí
authorizationController.delegate = self
authorizationController.presentationContextProvider = self
// Spustíme proces autorizácie
authorizationController.performRequests()
}
// Implementácia delegátov
// ASAuthorizationControllerDelegate
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerDelegate {
// Spracovanie úspešnej autorizácie
func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
let userIdentifier = appleIDCredential.user // Jedinečný identifikátor používateľa Apple
let fullName = appleIDCredential.fullName // Meno používateľa
let email = appleIDCredential.email // Email používateľa (dostupné iba pri prvom prihlásení)
// Tu môžete odoslať userIdentifier a ďalšie údaje na váš server na overenie a vytvorenie/viazanie účtu
print("User ID: \(userIdentifier)")
print("Full Name: \(fullName?.givenName ?? "") \(fullName?.familyName ?? "")")
print("Email: \(email ?? "")")
} else if let passwordCredential = authorization.credential as? ASPasswordCredential {
// Používateľ použil uložené heslá z iCloud Keychain
let username = passwordCredential.user
let password = passwordCredential.password
// Tu môžete použiť tieto údaje na prihlásenie
print("Username: \(username)")
print("Password: \(password)")
}
}
// Spracovanie chyby autorizácie
func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
print("Sign in with Apple failed: \(error.localizedDescription)")
// Tu spracovávame chyby (napríklad, používateľ zrušil autorizáciu)
}
}
// ASAuthorizationControllerPresentationContextProviding
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerPresentationContextProviding {
// Poskytuje okno, na ktorom bude zobrazené rozhranie autorizácie
func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
return view.window! // Dôležité je vrátiť NE nil window
}
}
// TODO: Uistite sa, že YourViewController implementuje potrebné protokoly.
- Spracovať údaje získané po úspešnej autorizácii:
- Použite
userIdentifierna jedinečnú identifikáciu používateľa Apple. fullNameaemailsú dostupné iba pri prvom prihlásení tohto používateľa a vašej aplikácie. Uložte ich.- Odoslať
userIdentifier,identityToken(obsahuje informácie na overenie na serveri) aauthorizationCodena váš server na overenie a vytvorenie/viazaní účtu používateľa vo vašom systéme. - Server by mal overiť
"identityToken"s Apple, aby sa uistil o pravosti požiadavky.
- Použite
Okrem hlavnej autorizácie je tiež dôležité implementovať:
- Spracovanie stavu autorizácie používateľa (napríklad cez
ASAuthorizationAppleIDProvider().getCredentialState). - Možnosť odvolať autorizáciu používateľom.
- Interakciu s vaším backendom na vytvorenie/autentifikáciu používateľa po úspešnej autorizácii cez Apple.
Poznámka: Sign In with Apple je dostupný iba na zariadeniach s iOS 13 / macOS Catalina a novšie. Pre staršie verzie OS bude potrebný záložný mechanizmus autentifikácie.