Sobes.tech
Middle+

Kaip įgyvendinti autorizaciją per Apple iOS programėlėje?

sobes.tech AI

Atsakymas iš AI

Apple (Sign In with Apple) prieigos įgyvendinimui iOS programėlėje reikalingi šie žingsniai:

  1. Nustatykite programėlę Apple Developer Portal:

    • Įjunkite "Sign In with Apple" galimybę savo App ID.
    • Sugeneruokite arba atnaujinkite Provisioning Profile su šia galimybe.
  2. Pridėkite "Sign In with Apple" galimybę į Xcode projektą.

  3. Naudokite AuthenticationServices framework'ą.

Pavyzdinis kodas autorizacijos užklausai pradėti:

import AuthenticationServices

@available(iOS 13.0, *)
func performSignInWithApple() {
    // Sukurkite teikėją
    let appleIDProvider = ASAuthorizationAppleIDProvider()

    // Sukurkite užklausas
    let request = appleIDProvider.createRequest()
    request.requestedScopes = [.fullName, .email] // Prašome naudotojo vardo ir el. pašto

    // Sukurkite valdiklį užklausų apdorojimui
    let authorizationController = ASAuthorizationController(authorizationRequests: [request])

    // Nustatykite delegatus
    authorizationController.delegate = self
    authorizationController.presentationContextProvider = self

    // Pradėkite autorizacijos procesą
    authorizationController.performRequests()
}

// Delegatų įgyvendinimas
// ASAuthorizationControllerDelegate
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerDelegate {
    // Sėkminga autorizacija
    func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
        if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
            let userIdentifier = appleIDCredential.user // Unikalus naudotojo identifikatorius
            let fullName = appleIDCredential.fullName // Vardas
            let email = appleIDCredential.email // El. paštas

            // Čia galite siųsti šiuos duomenis į savo serverį
            print("User ID: \(userIdentifier)")
            print("Full Name: \(fullName?.givenName ?? "") \(fullName?.familyName ?? "")")
            print("Email: \(email ?? "")")
        } else if let passwordCredential = authorization.credential as? ASPasswordCredential {
            // Naudotojas naudojo išsaugotus slaptažodžius iš iCloud Keychain
            let username = passwordCredential.user
            let password = passwordCredential.password
            // Čia galite naudoti šiuos duomenis prisijungimui
            print("Username: \(username)")
            print("Password: \(password)")
        }
    }

    // Klaidos apdorojimas
    func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
        print("Sign in with Apple failed: \(error.localizedDescription)")
        // Čia apdorojame klaidas
    }
}

// ASAuthorizationControllerPresentationContextProviding
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerPresentationContextProviding {
    // Pateikia langą, kuriame bus rodomas autorizacijos interfeusas
    func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
        return view.window! // Svarbu grąžinti NE nil langą
    }
}

// Pastaba: YourViewController turi įgyvendinti būtinus protokolus.
  1. Apdorokite duomenis, gautus po sėkmingos autorizacijos:
    • Naudokite userIdentifier unikaliam Apple naudotojo identifikavimui.
    • fullName ir email yra prieinami tik pirmojo prisijungimo metu ir juos išsaugokite.
    • Siųskite userIdentifier, identityToken (informacija serverio patvirtinimui) ir authorizationCode į savo serverį patvirtinimui ir naudotojo paskyros sukūrimui/susiejimui.
    • Serveris turi patvirtinti identityToken su Apple, kad įsitikintų užklausos autentiškumu.

Be pagrindinės autorizacijos, taip pat svarbu įgyvendinti:

  • Naudotojo autorizacijos būsenos valdymą (pavyzdžiui, per ASAuthorizationAppleIDProvider().getCredentialState).
  • Galimybę naudotojui atšaukti autorizaciją.
  • Sąveiką su jūsų backend'u naudotojo sukūrimui/autentifikacijai po sėkmingos autorizacijos.

Pastaba: Sign In with Apple yra prieinama tik įrenginiuose su iOS 13 / macOS Catalina ir naujesnėse versijose. Senesnėms OS versijoms reikės atsarginio autentifikacijos mechanizmo.