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

  1. 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í.
  2. Přidejte schopnost "Sign In with Apple" do projektu Xcode.

  3. 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.