Sobes.tech
Middle+

Bir iOS uygulamasında Apple üzerinden kimlik doğrulama nasıl gerçekleştirilir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Bir iOS uygulamasında Apple ile Kimlik Doğrulama (Sign In with Apple) uygulamak için aşağıdaki adımlar gereklidir:

  1. Apple Geliştirici Portalında uygulamayı yapılandırın:

    • App ID için "Sign In with Apple" yeteneğini etkinleştirin.
    • Yeteneği etkinleştirilmiş Provisioning Profile oluşturun veya güncelleyin.
  2. Xcode projesine "Sign In with Apple" yeteneğini ekleyin.

  3. AuthenticationServices framework'ünü kullanın.

Kimlik doğrulama isteğini başlatmak için örnek kod:

import AuthenticationServices

@available(iOS 13.0, *)
func performSignInWithApple() {
    // Sağlayıcıyı oluştur
    let appleIDProvider = ASAuthorizationAppleIDProvider()

    // İstekleri oluştur
    let request = appleIDProvider.createRequest()
    request.requestedScopes = [.fullName, .email] // Kullanıcıdan isim ve e-posta iste

    // İstekleri işlemek için denetleyici oluştur
    let authorizationController = ASAuthorizationController(authorizationRequests: [request])

    // Yanıtları işlemek için delegeleri ayarla
    authorizationController.delegate = self
    authorizationController.presentationContextProvider = self

    // Kimlik doğrulama sürecini başlat
    authorizationController.performRequests()
}

// Delegeleri uygulama
// ASAuthorizationControllerDelegate
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerDelegate {
    // Başarılı kimlik doğrulama
    func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
        if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
            let userIdentifier = appleIDCredential.user // Benzersiz Apple kullanıcı kimliği
            let fullName = appleIDCredential.fullName // Kullanıcı adı
            let email = appleIDCredential.email // Kullanıcı e-postası (sadece ilk girişte mevcuttur)

            // Burada userIdentifier ve diğer verileri sunucunuza gönderebilirsiniz
            print("User ID: \(userIdentifier)")
            print("Full Name: \(fullName?.givenName ?? "") \(fullName?.familyName ?? "")")
            print("Email: \(email ?? "")")
        } else if let passwordCredential = authorization.credential as? ASPasswordCredential {
            // Kullanıcı iCloud Keychain'den kaydedilmiş şifreleri kullandı
            let username = passwordCredential.user
            let password = passwordCredential.password
            // Bu verileri giriş için kullanabilirsiniz
            print("Username: \(username)")
            print("Password: \(password)")
        }
    }

    // Hata durumunu yönet
    func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
        print("Sign in with Apple başarısız: \(error.localizedDescription)")
        // Hataları burada işleyin (örneğin, kullanıcı iptal etti)
    }
}

// ASAuthorizationControllerPresentationContextProviding
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerPresentationContextProviding {
    // Kimlik doğrulama arayüzünün gösterileceği pencereyi sağlar
    func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
        return view.window! // NUL olmayan pencere döndürmek önemlidir
    }
}

// TODO: YourViewController'un gerekli protokolleri uyguladığından emin olun.
  1. Başarılı kimlik doğrulama sonrası alınan verileri işleyin:
    • Kullanıcıyı benzersiz şekilde tanımlamak için userIdentifier kullanın.
    • fullName ve email sadece ilk girişte kullanılabilir. Bunları kaydedin.
    • userIdentifier, identityToken (sunucuda doğrulama için bilgi içerir) ve authorizationCode'u sunucunuza gönderin.
    • Sunucu, "identityToken"u Apple ile doğrulamalı ve isteğin gerçekliğini onaylamalıdır.

Ayrıca, şu ek özellikleri de uygulamak önemlidir:

  • Kullanıcının yetkilendirme durumunu yönetmek (örneğin, ASAuthorizationAppleIDProvider().getCredentialState ile).
  • Kullanıcının yetkiyi iptal etme seçeneği.
  • Apple üzerinden başarılı bir yetkilendirmeden sonra kullanıcıyı oluşturmak/doğrulamak için backend ile etkileşim.

Not: Sign In with Apple yalnızca iOS 13 / macOS Catalina ve sonrası cihazlarda kullanılabilir. Daha eski sürümler için yedek bir kimlik doğrulama mekanizması gereklidir.