Sobes.tech
Middle+

როგორ განვახორციელოთ ავტორიზაცია Apple-ის მეშვეობით iOS აპლიკაციაში?

sobes.tech AI

პასუხი AI-სგან

Apple (Sign In with Apple) аша авторизацияне iOS кушымтасында тормышка ашыру өчен түбәндәге адымнар кирәк:

  1. Кушымтаны Apple Developer Portal-та көйләгез:

    • "Sign In with Apple" мөмкинлеген App ID өчен активлагыз.
    • Provisioning Profile-ны бу мөмкинлек белән генерлагыз яки яңартыгыз.
  2. Xcode проектында "Sign In with Apple" мөмкинлеген өстәгез.

  3. AuthenticationServices фреймворкын кулланыгыз.

Авторизация соравын башлау өчен код үрнәге:

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

// Делегатларны тормышка ашыру
// ASAuthorizationControllerDelegate
@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! // Мөһим: window-ны nil түгел итеп кайтарырга
    }
}

// Игелекле: YourViewController кирәкле протоколларны тормышка ашырырга тиеш.
  1. Уңышлы авторизациядан соң алынган мәгълүматны эшкәртү:
    • userIdentifier кулланучының уникаль идентификациясе өчен кулланыгыз.
    • fullName һәм email бу кулланучы өчен беренче керүдә генә бар һәм сезнең кушымтада саклагыз.
    • userIdentifier, identityToken (серверда верификация өчен мәгълүматларны үз эченә ала) һәм authorizationCode серверга җибәрегез.
    • Сервер identityToken-ны Apple белән верификацияләргә тиеш, соравның чынлыкка туры килүен тәэмин итү өчен.

Төп авторизациядән тыш, шулай ук:

  • Кулланучының авторизация хәлен эшкәртү (мәсәлән, ASAuthorizationAppleIDProvider().getCredentialState аша)
  • Кулланучы авторизацияне кире кайтару мөмкинлеген тәэмин итү
  • Сезнең бэкенд белән эшләү, авторизация уңышлы үткәннән соң кулланучыны теркәү/авторизацияләү өчен

Искәрмә: Sign In with Apple фәкать iOS 13 / macOS Catalina һәм яңа версияле җайланмаларда гына бар. Иске ОС версияләре өчен запас механизм кирәк.