Sobes.tech
Middle+

Kako implementirati autorizaciju putem Apple u iOS aplikaciji?

sobes.tech АИ

Одговор од АИ

Za implementaciju autentifikacije putem Apple (Sign In with Apple) u iOS aplikaciji potrebni su sledeći koraci:

  1. Konfigurišite aplikaciju u Apple Developer Portal:

    • Uključite Capability "Sign In with Apple" za vaš App ID.
    • Generišite ili ažurirajte Provisioning Profile sa uključenom Capability.
  2. Dodajte Capability "Sign In with Apple" u Xcode projekat.

  3. Koristite framework AuthenticationServices.

Primer koda za iniciranje zahteva za autentifikaciju:

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

// Implementacija delegata
@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!
    }
}

// Obrada podataka nakon uspešne autentifikacije:
// Koristite `userIdentifier` za jedinstvenu identifikaciju Apple korisnika.
// `fullName` i `email` su dostupni samo pri prvoj prijavi za tog korisnika i vašu aplikaciju. Sačuvajte ih.
// Pošaljite `userIdentifier`, `identityToken` (sadrži informacije za verifikaciju na serveru) i `authorizationCode` na vaš server za verifikaciju i kreiranje/koppovanje korisničkog naloga.
// Server treba da verifikuje `identityToken` sa Apple-om da potvrdi autentičnost zahteva.

Pored glavne autentifikacije, važno je implementirati:

* Proveru stanja autentifikacije korisnika (npr. putem `ASAuthorizationAppleIDProvider().getCredentialState`).
* Mogućnost opoziva autentifikacije od strane korisnika.
* Interakciju sa vašim backend-om za kreiranje / autentifikaciju korisnika nakon uspešne autentifikacije putem Apple.

Napomena: `Sign In with Apple` je dostupan samo na uređajima sa iOS 13 / macOS Catalina i novijim. Za starije verzije OS-a biće potreban rezervni mehanizam autentifikacije.