Sobes.tech
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:

  1. 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.
  2. Pridajte Capability "Sign In with Apple" do projektu v Xcode.

  3. 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.
  1. Spracovať údaje získané po úspešnej autorizácii:
    • Použite userIdentifier na jedinečnú identifikáciu používateľa Apple.
    • fullName a email sú 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) a authorizationCode na 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.

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.