Kullanıcının telefonuna SMS mesajı göndererek kullanıcıların oturum açmasını sağlamak için Firebase Authentication simgesini kullanabilirsiniz. Kullanıcı, SMS mesajında yer alan tek seferlik kodu kullanarak oturum açar.
Bu belgede, Firebase SDK'sını kullanarak telefon numarasıyla oturum açma akışının nasıl uygulanacağı açıklanmaktadır.
Başlamadan önce
-
Firebase Authentication öğesini kullanabilmek için Firebase Unity SDK'sını (özellikle
FirebaseAuth.unitypackage
) Unity projenize eklemeniz gerekir.Bu ilk kurulum adımlarıyla ilgili ayrıntılı talimatları Firebase'i Unity projenize ekleme başlıklı makalede bulabilirsiniz.
- Uygulamanızı henüz Firebase projenize bağlamadıysanız bunu Firebase konsolundan yapın.
- Telefon numarasıyla oturum açma için platform şartlarını anlama:
- Telefon numarasıyla oturum açma yalnızca mobil platformlarda kullanılabilir.
- iOS'te telefon numarasıyla giriş için fiziksel bir cihaz gerekir ve simülatörde çalışmaz.
Güvenlikle ilgili endişeler
Yalnızca telefon numarası kullanılarak yapılan kimlik doğrulama, diğer yöntemlere kıyasla daha az güvenlidir. Bunun nedeni, telefon numarası sahipliğinin kullanıcılar arasında kolayca aktarılabilmesidir. Ayrıca, birden fazla kullanıcı profili olan cihazlarda SMS mesajı alabilen tüm kullanıcılar, cihazın telefon numarasını kullanarak bir hesapta oturum açabilir.
Uygulamanızda telefon numarası tabanlı oturum açma özelliğini kullanıyorsanız bu özelliği daha güvenli oturum açma yöntemleriyle birlikte sunmalı ve kullanıcıları telefon numarasıyla oturum açmanın güvenlik açısından dezavantajları konusunda bilgilendirmelisiniz.
Firebase projenizde telefon numarasıyla oturum açmayı etkinleştirme
Kullanıcıların SMS ile oturum açmasını sağlamak için öncelikle Firebase projenizde telefon numarasıyla oturum açma yöntemini etkinleştirmeniz gerekir:
- Firebase konsolunda Kimlik Doğrulama bölümünü açın.
- Oturum Açma Yöntemi sayfasında Telefon Numarası oturum açma yöntemini etkinleştirin.
- İsteğe bağlı: Ayarlar sayfasında, SMS mesajlarının gönderilmesine izin vermek veya bu mesajları engellemek istediğiniz bölgelerle ilgili bir politika belirleyin. SMS bölgesi politikası belirlemek, uygulamalarınızı SMS'in kötüye kullanımına karşı korumanıza yardımcı olabilir.
APNs bildirimlerini almaya başlama (yalnızca iOS)
iOS'te telefon numarası kimlik doğrulamasını kullanmak için uygulamanızın Firebase'den APNs bildirimleri alabilmesi gerekir. Bir kullanıcı, cihazda ilk kez telefon numarasıyla oturum açtığında Firebase Authentication, telefon numarasıyla oturum açma isteğinin uygulamanızdan geldiğini doğrulamak için cihaza sessiz bir push bildirimi gönderir. (Bu nedenle, telefon numarasıyla oturum açma özelliği simülatörde kullanılamaz.)
Firebase Authentication ile kullanılacak APNs bildirimlerini etkinleştirmek için:
- Xcode'da projeniz için push bildirimlerini etkinleştirin.
APNs sertifikanızı Firebase'e yükleyin. Henüz bir APNs sertifikanız yoksa Apple Developer Member Center'da sertifika oluşturduğunuzdan emin olun.
-
Firebase konsolundaki projenizde dişli simgesini, Proje Ayarları'nı ve ardından Cloud Messaging sekmesini seçin.
-
Geliştirme sertifikanız, üretim sertifikanız veya her ikisi için Sertifika Yükle düğmesini seçin. En az bir tane gereklidir.
-
Her sertifika için .p12 dosyasını seçin ve varsa şifreyi girin. Bu sertifikanın paket kimliğinin, uygulamanızın paket kimliğiyle eşleştiğinden emin olun. Kaydet'i seçin.
-
Kullanıcının telefonuna doğrulama kodu gönderme
Telefon numarasıyla oturum açma işlemini başlatmak için kullanıcıya telefon numarasını girmesini isteyen bir arayüz gösterin ve ardından Firebase'in kullanıcıya SMS ile kimlik doğrulama kodu göndermesini istemek için PhoneAuthProvider.VerifyPhoneNumber
işlevini çağırın:
-
Kullanıcının telefon numarasını alın.
Yasal şartlar farklılık gösterse de en iyi uygulama olarak ve kullanıcılarınızın beklentilerini karşılamak için onlara telefonla oturum açma özelliğini kullanmaları durumunda doğrulama için SMS mesajı alabileceklerini ve standart ücretlerin geçerli olacağını bildirmeniz gerekir.
- Kullanıcının telefon numarasını içeren bir PhoneAuthOptions
ileterek
PhoneAuthProvider.VerifyPhoneNumber
işlevini çağırın.PhoneAuthProvider provider = PhoneAuthProvider.GetInstance(firebaseAuth); provider.VerifyPhoneNumber( new Firebase.Auth.PhoneAuthOptions { PhoneNumber = phoneNumber, TimeoutInMilliseconds = phoneAuthTimeoutMs, ForceResendingToken = null }, verificationCompleted: (credential) => { // Auto-sms-retrieval or instant validation has succeeded (Android only). // There is no need to input the verification code. // `credential` can be used instead of calling GetCredential(). }, verificationFailed: (error) => { // The verification code was not sent. // `error` contains a human readable explanation of the problem. }, codeSent: (id, token) => { // Verification code was successfully sent via SMS. // `id` contains the verification id that will need to passed in with // the code from the user when calling GetCredential(). // `token` can be used if the user requests the code be sent again, to // tie the two requests together. }, codeAutoRetrievalTimeout: (id) => { // Called when the auto-sms-retrieval has timed out, based on the given // timeout parameter. // `id` contains the verification id of the request that timed out. });
PhoneAuthProvider.VerifyPhoneNumber
, Firebase'i aradığınızda,- (iOS'te) uygulamanıza sessiz bir push bildirimi gönderir.
- Firebase, belirtilen telefon numarasına kimlik doğrulama kodu içeren bir SMS mesajı gönderir ve tamamlama işlevinize bir doğrulama kimliği iletir. Kullanıcının oturum açması için hem doğrulama kodu hem de doğrulama kimliği gerekir.
-
Doğrulama kimliğini kaydedin ve uygulamanız yüklendiğinde geri yükleyin. Bunu yaparak, kullanıcı oturum açma akışını tamamlamadan önce uygulamanız sonlandırılırsa (ör. SMS uygulamasına geçerken) geçerli bir doğrulama kimliğinizin olmasını sağlayabilirsiniz.
Doğrulama kimliğini istediğiniz şekilde kalıcı hale getirebilirsiniz. Doğrulama kimliğini
UnityEngine.PlayerPrefs
ile kaydetmek basit bir yöntemdir.
codeSent
içine iletilen geri çağırma işlevi çağrılırsa kullanıcıdan SMS mesajıyla aldığı doğrulama kodunu yazmasını isteyebilirsiniz.
Diğer yandan, verificationCompleted
için geri arama yapılırsa otomatik doğrulama başarılı olur ve artık aşağıda açıklandığı şekilde kullanabileceğiniz bir PhoneAuthCredential
'niz olur.
Doğrulama koduyla kullanıcının oturumunu açma
Kullanıcı, SMS mesajından gelen doğrulama kodunu uygulamanıza sağladıktan sonra, doğrulama kodundan ve doğrulama kimliğinden bir PhoneAuthCredential
nesnesi oluşturup bu nesneyi FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync
'ye ileterek kullanıcının oturumunu açın.
- Kullanıcıdan doğrulama kodunu alın.
- Doğrulama kodundan ve doğrulama kimliğinden
Credential
nesnesi oluşturun.PhoneAuthCredential credential = phoneAuthProvider.GetCredential(verificationId, verificationCode);
- Kullanıcının oturumunu
PhoneAuthCredential
nesnesiyle açın:auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => { if (task.IsFaulted) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception); return; } FirebaseUser newUser = task.Result.User; Debug.Log("User signed in successfully"); // This should display the phone number. Debug.Log("Phone number: " + newUser.PhoneNumber); // The phone number providerID is 'phone'. Debug.Log("Phone provider ID: " + newUser.ProviderId); });
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:Firebase.Auth.FirebaseUser user = auth.CurrentUser; if (user != null) { string name = user.DisplayName; string email = user.Email; System.Uri photo_url = user.PhotoUrl; // The user's Id, unique to the Firebase project. // Do NOT use this value to authenticate with your backend server, if you // have one; use User.TokenAsync() instead. string uid = user.UserId; }
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.
Kimlik doğrulama sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak kullanıcıların uygulamanızda birden fazla kimlik doğrulama sağlayıcı kullanarak oturum açmasına izin verebilirsiniz.
Bir kullanıcının oturumunu kapatmak için
SignOut()
numaralı telefonu arayın:
auth.SignOut();