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:
-
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.
-
Xcode projesine "Sign In with Apple" yeteneğini ekleyin.
-
AuthenticationServicesframework'ü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.
- Başarılı kimlik doğrulama sonrası alınan verileri işleyin:
- Kullanıcıyı benzersiz şekilde tanımlamak için
userIdentifierkullanın. fullNameveemailsadece ilk girişte kullanılabilir. Bunları kaydedin.userIdentifier,identityToken(sunucuda doğrulama için bilgi içerir) veauthorizationCode'u sunucunuza gönderin.- Sunucu,
"identityToken"u Apple ile doğrulamalı ve isteğin gerçekliğini onaylamalıdır.
- Kullanıcıyı benzersiz şekilde tanımlamak için
Ayrıca, şu ek özellikleri de uygulamak önemlidir:
- Kullanıcının yetkilendirme durumunu yönetmek (örneğin,
ASAuthorizationAppleIDProvider().getCredentialStateile). - 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.