Sobes.tech
Middle+

Чӣ гуна имконпазир кардани тасдиқ via 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 // Apple кулланучысының уникаль идентификаторы
            let fullName = appleIDCredential.fullName // Кулланучының исеме
            let email = appleIDCredential.email // Кулланучының электрон почтасы (беренче керүдә генә бар)

            // Монда userIdentifier һәм башка мәгълүматны серверга җибәрергә мөмкин
            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 аша).
  • Кулланучы авторизацияне кире кайтару мөмкинлеген тәэмин итү.
  • Уңышлы авторизациядән соң кулланучыны теркәү/авторизацияләү өчен backend белән эшләү.

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