Sobes.tech
Middle+

Hogyan valósítható meg az Apple által történő hitelesítés egy iOS alkalmazásban?

sobes.tech MI

Válasz az MI-től

Az Apple (Sign In with Apple) hitelesítésének megvalósításához az iOS alkalmazásban a következő lépések szükségesek:

  1. Állítsa be az alkalmazást az Apple Developer Portalon:

    • Kapcsolja be a "Sign In with Apple" képességet az App ID-hez.
    • Generáljon vagy frissítsen Provisioning Profile-t a képesség engedélyezésével.
  2. Adja hozzá a "Sign In with Apple" képességet az Xcode projektjéhez.

  3. Használja a AuthenticationServices keretrendszert.

Példa kód az autentikációs kérés indításához:

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()
}

// Delegate implementáció
@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!
    }
}

// A feldolgozás a sikeres autentikáció után kapott adatok:
// Használja a `userIdentifier`-t az Apple felhasználó egyedi azonosítására.
// A `fullName` és az `email` csak az első bejelentkezéskor érhető el, mentse el őket.
// Küldje el a `userIdentifier`, `identityToken` (amely a szerver oldali ellenőrzéshez tartalmaz információkat) és az `authorizationCode`-t a szerverének az ellenőrzéshez és a felhasználói fiók létrehozásához/kötéséhez.
// A szervernek ellenőriznie kell az `identityToken`-t az Apple-lel, hogy megbizonyosodjon a kérés hitelességéről.

Az alapvető autentikáció mellett fontos megvalósítani:

* A felhasználó autentikációs állapotának ellenőrzése (pl. `ASAuthorizationAppleIDProvider().getCredentialState`).
* A felhasználó által történő autentikáció visszavonásának lehetőségét.
* A backend rendszerrel való interakció a felhasználó létrehozásához / hitelesítéséhez az Apple-en keresztüli sikeres autentikáció után.

Megjegyzés: A `Sign In with Apple` csak iOS 13 / macOS Catalina és újabb eszközökön érhető el. Régebbi rendszerekhez tartozó eszközökön alternatív hitelesítési mechanizmus szükséges.