Uçtan uca OAuth 2.0 oturum açma akışını gerçekleştirmek için Firebase SDK'sını kullanarak kullanıcılarınızın Apple Kimliklerini kullanarak Firebase'de kimlik doğrulaması yapmasına izin verebilirsiniz.
Başlamadan önce
Kullanıcıların Apple ile oturum açmasını sağlamak için önce Apple'ın geliştirici sitesinde Apple ile Oturum Açma'yı yapılandırın, ardından Firebase projeniz için oturum açma sağlayıcı olarak Apple'ı etkinleştirin.
Apple Geliştirici Programı'na katılma
Apple ile oturum açma özelliği yalnızca Apple Developer Program üyeleri tarafından yapılandırılabilir.
Apple ile oturum açma özelliğini yapılandırma
Firebase projenizde Apple ile Giriş etkinleştirilmeli ve doğru şekilde yapılandırılmalıdır. Apple Developer yapılandırması, Android ve Apple platformlarında farklılık gösterir. Lütfen devam etmeden önce iOS+ ve/veya Android kılavuzlarının "Apple ile Giriş'i Yapılandırma" bölümündeki talimatları uygulayın.Apple'ı oturum açma sağlayıcısı olarak etkinleştirme
- Firebase konsolunda Auth (Kimlik Doğrulama) bölümünü açın. Oturum açma yöntemi sekmesinde Apple sağlayıcısını etkinleştirin.
- Apple ile Giriş sağlayıcı ayarlarını yapılandırın:
- Uygulamanızı yalnızca Apple platformlarında dağıtıyorsanız Hizmet Kimliği, Apple Ekip Kimliği, özel anahtar ve anahtar kimliği alanlarını boş bırakabilirsiniz.
- Android cihazlarda destek için:
- Firebase'i Android projenize ekleyin. Uygulamanızı Firebase konsolunda ayarlarken uygulamanızın SHA-1 imzasını kaydettiğinizden emin olun.
- Firebase konsolunda Auth (Kimlik Doğrulama) bölümünü açın. Oturum açma yöntemi sekmesinde Apple sağlayıcısını etkinleştirin. Önceki bölümde oluşturduğunuz hizmet kimliğini belirtin. Ayrıca, OAuth kod akışı yapılandırma bölümünde Apple Ekip Kimliğinizi ve önceki bölümde oluşturduğunuz özel anahtarı ve anahtar kimliğini belirtin.
Apple'ın anonimleştirilmiş veri şartlarına uyun
Apple ile Giriş, kullanıcılara oturum açarken e-posta adresleri de dahil olmak üzere verilerini anonimleştirme seçeneği sunar. Bu seçeneği belirleyen kullanıcıların privaterelay.appleid.com
alan adıyla e-posta adresleri olur. Uygulamanızda Apple ile Giriş'i kullandığınızda, bu anonimleştirilmiş Apple kimlikleriyle ilgili olarak Apple'ın geçerli tüm geliştirici politikalarına veya şartlarına uymanız gerekir.
Bu, kimliği doğrudan tanımlayan kişisel bilgileri anonimleştirilmiş bir Apple Kimliği ile ilişkilendirmeden önce gerekli kullanıcı iznini almayı içerir. Firebase Authentication kullanılırken aşağıdaki işlemler yapılabilir:
- Anonimleştirilmiş bir Apple Kimliği'ne e-posta adresi bağlayabilir veya tam tersini yapabilirsiniz.
- Anonimleştirilmiş bir Apple Kimliği'ne telefon numarası bağlama veya tam tersi
- Anonim olmayan bir sosyal kimlik bilgisini (Facebook, Google vb.) anonimleştirilmiş bir Apple Kimliği'ne veya tam tersi şekilde bağlamak
Yukarıdaki listede olası her duruma yer verilmemiştir. Uygulamanızın Apple'ın şartlarını karşıladığından emin olmak için geliştirici hesabınızın Üyelik bölümündeki Apple Geliştirici Programı Lisans Sözleşmesi'ne bakın.
Firebase.Auth.FirebaseAuth
sınıfına erişme
FirebaseAuth
sınıfı, tüm API çağrıları için ağ geçididir.
Bu nesneye FirebaseAuth.DefaultInstance üzerinden erişilebilir.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
Firebase SDK ile oturum açma akışını yönetme
Apple ile oturum açma işlemi, Apple ve Android platformlarında farklılık gösterir.
Apple platformlarında
Apple ile oturum açma nonce ve jeton oluşturma işlemlerini gerçekleştirmek için üçüncü taraf bir eklenti yükleyin. Örneğin, Unity'nin Apple ile Oturum Açma Varlık Depolama Paketi'ni yükleyebilirsiniz. Oluşturulan rastgele nonce dizesini Firebase işlemlerinde kullanılmak üzere ham dize durumunda iletmek için kodu değiştirmeniz gerekebilir (ör. nonce'un SHA256 özet formu oluşturulmadan önce bir kopyasını saklayın).
FirebaseCredential oluşturmak ve Firebase'de oturum açmak için sonuçta elde edilen jeton dizesini ve ham nonce'ı kullanın.
Firebase.Auth.Credential credential = Firebase.Auth.OAuthProvider.GetCredential("apple.com", appleIdToken, rawNonce, null); auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult result = task.Result; Debug.LogFormat("User signed in successfully: {0} ({1})", result.User.DisplayName, result.User.UserId); });
Aynı kalıp, son giriş gerektiren hassas işlemler için yeni kimlik bilgilerini almak üzere kullanılabilen
ReauthenticateAsync
ile de kullanılabilir. Daha fazla bilgi için Kullanıcıları yönetme başlıklı makaleyi inceleyin.Apple platformlarında Apple ile Giriş'i kullanarak bağlantı oluştururken mevcut bir Firebase hesabının Apple hesabına zaten bağlanmış olduğu hatasıyla karşılaşabilirsiniz. Bu durumda standart
Firebase.FirebaseException
yerineFirebase.Auth.FirebaseAccountLinkException
oluşturulur. Bu durumda istisna, geçerli olması halinde Apple'a bağlı kullanıcınınFirebaseAuth.SignInAndRetrieveDataWithCredentialAsync
üzerinden oturum açması için kullanılabilecek birUserInfo.UpdatedCredential
özelliği içerir. Güncellenen kimlik bilgisi, oturum açma işlemi için yeni bir Apple ile Oturum Açma jetonu oluşturma ihtiyacını ortadan kaldırır.auth.CurrentUser.LinkWithCredentialAsync( Firebase.Auth.OAuthProvider.GetCredential("apple.com", idToken, rawNonce, null)) .ContinueWithOnMainThread( task => { if (task.IsCompletedSuccessfully) { // Link Success } else { if (task.Exception != null) { foreach (Exception exception in task.Exception.Flatten().InnerExceptions) { Firebase.Auth.FirebaseAccountLinkException firebaseEx = exception as Firebase.Auth.FirebaseAccountLinkException; if (firebaseEx != null && firebaseEx.UserInfo.UpdatedCredential.IsValid()) { // Attempt to sign in with the updated credential. auth.SignInAndRetrieveDataWithCredentialAsync(firebaseEx.UserInfo.UpdatedCredential). ContinueWithOnMainThread( authResultTask => { // Handle Auth result. }); } else { Debug.Log("Link with Apple failed:" + firebaseEx ); } } // end for loop } } });
Android'de
Android'de, uçtan uca oturum açma akışını gerçekleştirmek için Firebase SDK'yı kullanarak web tabanlı genel OAuth oturum açma özelliğini uygulamanıza entegre ederek kullanıcılarınızın kimliğini Firebase ile doğrulayın.
Oturum açma akışını Firebase SDK ile işlemek için aşağıdaki adımları uygulayın:
Apple için uygun sağlayıcı kimliğiyle yapılandırılmış bir
FederatedOAuthProviderData
örneği oluşturun.Firebase.Auth.FederatedOAuthProviderData providerData = new Firebase.Auth.FederatedOAuthProviderData(); providerData.ProviderId = "apple.com";
İsteğe bağlı: Kimlik doğrulama sağlayıcısından istemek istediğiniz varsayılan kapsamların dışında ek OAuth 2.0 kapsamları belirtin.
providerData.Scopes = new List<string>(); providerData.Scopes.Add("email"); providerData.Scopes.Add("name");
İsteğe bağlı: Apple'ın oturum açma ekranını İngilizce dışında bir dilde göstermek istiyorsanız
locale
parametresini ayarlayın. Desteklenen yerel ayarlar için Apple ile Giriş dokümanlarına bakın.providerData.CustomParameters = new Dictionary<string,string>; // Localize to French. providerData.CustomParameters.Add("language", "fr");
Sağlayıcı verileriniz yapılandırıldıktan sonra bu verileri kullanarak FederatedOAuthProvider oluşturun.
// Construct a FederatedOAuthProvider for use in Auth methods. Firebase.Auth.FederatedOAuthProvider provider = new Firebase.Auth.FederatedOAuthProvider(); provider.SetProviderData(providerData);
Auth sağlayıcı nesnesini kullanarak Firebase ile kimlik doğrulama. Diğer FirebaseAuth işlemlerinden farklı olarak bu işlemin, kullanıcının kimlik bilgilerini girebileceği bir web görünümü açarak kullanıcı arayüzünüzün kontrolünü ele geçireceğini unutmayın.
Oturum açma akışını başlatmak için
signInWithProvider
işlevini çağırın:auth.SignInWithProviderAsync(provider).ContinueOnMainThread(task => { if (task.IsCanceled) { Debug.LogError("SignInWithProviderAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInWithProviderAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult authResult = task.Result; Firebase.Auth.FirebaseUser user = authResult.User; Debug.LogFormat("User signed in successfully: {0} ({1})", user.DisplayName, user.UserId); });
Aynı kalıp, son giriş gerektiren hassas işlemler için yeni kimlik bilgilerini almak üzere kullanılabilen
ReauthenticateWithProvider
ile de kullanılabilir.user.ReauthenticateWithProviderAsync(provider).ContinueOnMainThread(task => { if (task.IsCanceled) { Debug.LogError("ReauthenticateWithProviderAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError( "ReauthenticateWithProviderAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult authResult = task.Result; Firebase.Auth.FirebaseUser user = authResult.User; Debug.LogFormat("User reauthenticated successfully: {0} ({1})", user.DisplayName, user.UserId); });
Ayrıca, farklı kimlik sağlayıcıları mevcut hesaplara bağlamak için
LinkWithCredentialAsync()
simgesini kullanabilirsiniz.Apple'ın, kullanıcıların Apple hesaplarını diğer verilere bağlamadan önce kullanıcılardan açık rıza almanızı zorunlu kıldığını unutmayın.
Örneğin, bir Facebook hesabını mevcut Firebase hesabına bağlamak için kullanıcının Facebook'ta oturum açmasıyla aldığınız erişim jetonunu kullanın:
// Initialize a Facebook credential with a Facebook access token. Firebase.Auth.Credential credential = Firebase.Auth.FacebookAuthProvider.GetCredential(facebook_token); // Assuming the current user is an Apple user linking a Facebook provider. user.LinkWithCredentialAsync(credential) .ContinueWithOnMainThread( task => { if (task.IsCanceled) { Debug.LogError("LinkWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("LinkWithCredentialAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult result = task.Result; Firebase.Auth.FirebaseUser user = result.User; Debug.LogFormat("User linked successfully: {0} ({1})", user.DisplayName, user.UserId); });
Apple Notlar ile oturum açma
Firebase Auth tarafından desteklenen diğer sağlayıcıların aksine Apple, fotoğraf URL'si sağlamaz.
Ayrıca, kullanıcı e-postasını uygulamayla paylaşmamayı seçtiğinde Apple, bu kullanıcı için benzersiz bir e-posta adresi (xyz@privaterelay.appleid.com
biçiminde) sağlar ve bu adresi uygulamanızla paylaşır. Özel e-posta geçiş hizmetini yapılandırdıysanız Apple, anonimleştirilmiş adrese gönderilen e-postaları kullanıcının gerçek e-posta adresine yönlendirir.
Apple, kullanıcı bilgilerini (ör. görünen ad) uygulamalarla yalnızca kullanıcı ilk kez oturum açtığında paylaşır. Firebase, genellikle kullanıcının Apple ile ilk kez oturum açtığında görünen adı depolar. Bu adı auth.CurrentUser.DisplayName
ile alabilirsiniz.
Ancak daha önce Firebase'i kullanmadan bir kullanıcının uygulamada oturum açması için Apple'ı kullandıysanız Apple, kullanıcının görünen adını Firebase'e sağlamaz.
Sonraki adımlar
Bir kullanıcı ilk kez oturum açtıktan sonra yeni bir kullanıcı hesabı oluşturulur ve kullanıcının oturum açtığı kimlik bilgilerine (kullanıcı adı ve şifre, telefon numarası veya kimlik doğrulama sağlayıcı bilgileri) bağlanır. Bu yeni hesap, Firebase projenizin bir parçası olarak depolanır ve kullanıcının oturum açma şeklinden bağımsız olarak projenizdeki her uygulamada kullanıcıyı tanımlamak için kullanılabilir.Uygulamalarınızda, kullanıcının temel profil bilgilerini Firebase.Auth.FirebaseUser nesnesinden alabilirsiniz. Kullanıcıları yönetme başlıklı makaleyi inceleyin.
Firebase Realtime Database ve Cloud Storage güvenlik kurallarınızda, oturum açmış kullanıcının benzersiz kullanıcı kimliğini auth değişkeninden alabilir ve kullanıcının hangi verilere erişebileceğini kontrol etmek için bu kimliği kullanabilirsiniz.