Sobes.tech
Middle+

Kā īstenot autorizāciju caur Apple iOS lietotnē?

sobes.tech AI

Atbilde no AI

Apple (Sign In with Apple) autorizācijas īstenošanai iOS lietotnē ir nepieciešami šādi soļi:

  1. Konfigurējiet lietotni Apple Developer Portal:

    • Iespējojiet "Sign In with Apple" iespēju jūsu App ID.
    • Ģenerējiet vai atjauniniet Provisioning Profile ar šo iespēju.
  2. Pievienojiet "Sign In with Apple" iespēju Xcode projektā.

  3. Izmantojiet AuthenticationServices framework'u.

Piemēra kods autorizācijas pieprasījuma uzsākšanai:

import AuthenticationServices

@available(iOS 13.0, *)
func performSignInWithApple() {
    // Izveidojam nodrošinātāju
    let appleIDProvider = ASAuthorizationAppleIDProvider()

    // Izveidojam pieprasījumus
    let request = appleIDProvider.createRequest()
    request.requestedScopes = [.fullName, .email] // Pieprasām lietotāja vārdu un e-pastu

    // Izveidojam kontrolieri pieprasījumu apstrādei
    let authorizationController = ASAuthorizationController(authorizationRequests: [request])

    // Iestatām delegātus
    authorizationController.delegate = self
    authorizationController.presentationContextProvider = self

    // Sākam autorizācijas procesu
    authorizationController.performRequests()
}

// Delegātu īstenošana
// ASAuthorizationControllerDelegate
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerDelegate {
    // Veiksmīga autorizācija
    func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
        if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
            let userIdentifier = appleIDCredential.user // Unikāls lietotāja identifikators
            let fullName = appleIDCredential.fullName // Vārds
            let email = appleIDCredential.email // E-pasts

            // Šos datus var nosūtīt uz jūsu serveri
            print("User ID: \(userIdentifier)")
            print("Full Name: \(fullName?.givenName ?? "") \(fullName?.familyName ?? "")")
            print("Email: \(email ?? "")")
        } else if let passwordCredential = authorization.credential as? ASPasswordCredential {
            // Lietotājs izmantoja saglabātos paroles datus
            let username = passwordCredential.user
            let password = passwordCredential.password
            // Šos datus var izmantot pieslēgšanai
            print("Username: \(username)")
            print("Password: \(password)")
        }
    }

    // Kļūdas apstrāde
    func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
        print("Sign in with Apple failed: \(error.localizedDescription)")
        // Šeit apstrādājam kļūdas
    }
}

// ASAuthorizationControllerPresentationContextProviding
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerPresentationContextProviding {
    // Nodrošina logu, kurā tiks rādīts autorizācijas interfeiss
    func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
        return view.window! // Svarīgi atgriezt NE nil logu
    }
}

// Piezīme: YourViewController ir jāīsteno nepieciešamie protokoli.
  1. Apstrādājiet datus, kas iegūti pēc veiksmīgas autorizācijas:
    • Izmantojiet userIdentifier unikālas lietotāja identifikācijai Apple.
    • fullName un email ir pieejami tikai pirmajā pieslēgšanās reizē un jāuzglabā.
    • Nosūtiet userIdentifier, identityToken (informācija servera verifikācijai) un authorizationCode uz jūsu serveri verifikācijai un lietotāja konta izveidei/saišanai.
    • Serverim jāverificē identityToken ar Apple, lai pārliecinātos par pieprasījuma autentiskumu.

Papildus galvenajai autorizācijai ir svarīgi īstenot:

  • Lietotāja autorizācijas stāvokļa pārvaldību (piemēram, caur ASAuthorizationAppleIDProvider().getCredentialState).
  • Lietotāja atsaukšanas iespēju.
  • Sadarbību ar jūsu backend, lai izveidotu/autentificētu lietotāju pēc veiksmīgas autorizācijas.

Piezīme: Sign In with Apple ir pieejams tikai ierīcēs ar iOS 13 / macOS Catalina un jaunākām versijām. Vecākām OS versijām nepieciešams rezerves autentifikācijas mehānisms.