Sobes.tech
Middle+

Cum se implementează autorizarea prin Apple într-o aplicație iOS?

sobes.tech AI

Răspuns de la AI

Pentru implementarea autentificării prin Apple (Sign In with Apple) pe o aplicație iOS sunt pașii următori:

  1. Configurați aplicația în Apple Developer Portal:

    • Activați Capabilitatea "Sign In with Apple" pentru App ID-ul dvs.
    • Generați sau actualizați Profilul de Provisonare cu Capabilitatea activată.
  2. Adăugați Capabilitatea "Sign In with Apple" în proiectul Xcode.

  3. Utilizați framework-ul AuthenticationServices.

Exemplu de cod pentru inițierea unei cereri de autentificare:

import AuthenticationServices

@available(iOS 13.0, *)
func performSignInWithApple() {
    // Creăm un provider
    let appleIDProvider = ASAuthorizationAppleIDProvider()

    // Creăm cereri
    let request = appleIDProvider.createRequest()
    request.requestedScopes = [.fullName, .email] // Solicităm numele și email-ul utilizatorului

    // Creăm un controller pentru gestionarea cererilor
    let authorizationController = ASAuthorizationController(authorizationRequests: [request])

    // Setăm delegate-urile pentru gestionarea răspunsurilor
    authorizationController.delegate = self
    authorizationController.presentationContextProvider = self

    // Începem procesul de autentificare
    authorizationController.performRequests()
}

// Implementarea delegate-urilor
// ASAuthorizationControllerDelegate
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerDelegate {
    // Gestionarea autentificării de succes
    func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
        if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
            let userIdentifier = appleIDCredential.user // Identificator unic Apple
            let fullName = appleIDCredential.fullName // Numele utilizatorului
            let email = appleIDCredential.email // Email-ul utilizatorului (disponibil doar la prima autentificare)

            // Aici puteți trimite userIdentifier și alte date către serverul dvs. pentru verificare și creare/koppeling cont
            print("User ID: \(userIdentifier)")
            print("Full Name: \(fullName?.givenName ?? "") \(fullName?.familyName ?? "")")
            print("Email: \(email ?? "")")
        } else if let passwordCredential = authorization.credential as? ASPasswordCredential {
            // Utilizatorul a folosit parole salvate din iCloud Keychain
            let username = passwordCredential.user
            let password = passwordCredential.password
            // Aici puteți folosi aceste date pentru login
            print("Username: \(username)")
            print("Password: \(password)")
        }
    }

    // Gestionarea erorii de autentificare
    func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
        print("Sign in with Apple a eșuat: \(error.localizedDescription)")
        // Aici tratați erorile (de exemplu, utilizatorul a anulat autentificarea)
    }
}

// ASAuthorizationControllerPresentationContextProviding
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerPresentationContextProviding {
    // Oferă fereastra pe care va fi afișat interfața de autentificare
    func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
        return view.window! // Este important să returnați window-ul NU nil
    }
}

// TODO: Asigurați-vă că YourViewController implementează protocoalele necesare.
  1. Procesați datele obținute după autentificarea cu succes:
    • Utilizați userIdentifier pentru identificarea unică a utilizatorului Apple.
    • fullName și email sunt disponibile doar la prima autentificare a acestui utilizator și în aplicația dvs. Salvați-le.
    • Trimiteți userIdentifier, identityToken (conține informații pentru verificare pe server) și authorizationCode pe serverul dvs. pentru verificare și creare/koppeling cont.
    • Serverul trebuie să verifice "identityToken" cu Apple pentru a confirma autenticitatea cererii.

Pe lângă autentificarea principală, este important să implementați și:

  • Verificarea stării autentificării utilizatorului (de exemplu, prin ASAuthorizationAppleIDProvider().getCredentialState).
  • Posibilitatea de revocare a autentificării de către utilizator.
  • Interacțiunea cu backend-ul dvs. pentru crearea / autentificarea utilizatorului după autentificarea cu succes prin Apple.

Notă: Sign In with Apple este disponibil doar pe dispozitivele cu iOS 13 / macOS Catalina și mai noi. Pentru versiunile mai vechi ale sistemului de operare, este necesar un mecanism de autentificare de rezervă.