Za pomocą Firebase Authentication możesz zalogować użytkownika, wysyłając SMS-a do telefonu użytkownika. Użytkownik loguje się za pomocą jednorazowego kodu zawartego w SMS.
Najprostszym sposobem dodania logowania przez numer telefonu do aplikacji jest użycie FirebaseUI, który zawiera widżet logowania, który obsługuje proces logowania się na telefonie logowania numerycznego oraz sfederowanego i za pomocą hasła. Ten dokument opisuje, jak wdrożyć proces logowania przez numer telefonu za pomocą pakietu SDK Firebase.
Zanim zaczniesz
- Jeśli jeszcze nie masz tego za sobą, dodaj Firebase do swojego projektu na Androida.
-
w pliku Gradle (na poziomie aplikacji) modułu,
(zwykle
<project>/<app-module>/build.gradle.kts
lub<project>/<app-module>/build.gradle
), dodaj zależność z biblioteką Firebase Authentication na Androida. Zalecamy użycie metody Firebase Android BoM aby kontrolować obsługę wersji biblioteki.dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.2.0")) // Add the dependency for the Firebase Authentication library // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth") }
Korzystając z narzędzia Firebase Android BoM, Twoja aplikacja zawsze używa zgodnych wersji bibliotek Firebase na Androida.
(Wersja alternatywna) Dodaj zależności biblioteki Firebase bez użycia komponentu BoM
Jeśli nie chcesz używać biblioteki Firebase BoM, musisz określić każdą wersję biblioteki Firebase w wierszu zależności.
Pamiętaj, że jeśli używasz wielu bibliotek Firebase w swojej aplikacji, zalecamy korzystanie z BoM do zarządzania wersjami biblioteki. Dzięki temu wszystkie wersje są zgodne.
dependencies { // Add the dependency for the Firebase Authentication library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth:23.0.0") }
- Jeśli Twoja aplikacja nie jest jeszcze połączona z projektem Firebase, możesz to zrobić na stronie konsolę Firebase.
- Jeśli nie masz jeszcze ustawionego skrótu SHA-1 swojej aplikacji w konsoli Firebase, to zrobić. Zobacz Uwierzytelnianie klienta w celu znalezienia informacji o znalezieniu SHA-1 aplikacji. za pomocą skrótu.
Potencjalne problemy z bezpieczeństwem
Uwierzytelnianie przy użyciu numeru telefonu, choć jest wygodne, jest mniej bezpieczne niż inne dostępne metody, ponieważ posiadanie numeru telefonu można łatwo przenosić między użytkownikami. Także na urządzeniach z wieloma użytkownikami profili, każdy użytkownik, który może odbierać wiadomości SMS, może zalogować się na konto przy użyciu z numerem telefonu urządzenia.
Jeśli w aplikacji korzystasz z logowania się na podstawie numeru telefonu, z bezpieczniejszymi metodami logowania oraz informować użytkowników logowanie się przy użyciu numeru telefonu.
Włączanie logowania się za pomocą numeru telefonu w projekcie Firebase
Aby logować użytkowników za pomocą SMS-ów, musisz najpierw włączyć logowanie się przy użyciu numeru telefonu do swojego projektu Firebase:
- W konsoli Firebase otwórz sekcję Uwierzytelnianie.
- Na stronie Sign-in Method (Metoda logowania) włącz Phone Number. metody logowania się.
Włącz weryfikację aplikacji
Aby korzystać z uwierzytelniania przez numer telefonu, Firebase musi mieć możliwość potwierdzenia, że: z aplikacji pochodzą prośby o zalogowanie się na numer telefonu. Są 3 sposoby Firebase Authentication osiąga ten cel:
- Play Integrity API: jeśli użytkownik ma urządzenie z zainstalowanym interfejsem Google Play services,
i Firebase Authentication mogą zweryfikować wiarygodność urządzenia przy użyciu
Interfejs Play Integrity API
możemy kontynuować logowanie się na numer telefonu. Interfejs Play Integrity API został włączony w projekcie należącym do Google
Firebase Authentication, nie w Twoim projekcie. Nie wpływa to na interfejs Play Integrity API
i ograniczeniami w projekcie. Zespół pomocy Play Integrity jest dostępny
Pakiet SDK Authentication w wersji 21.2.0 lub nowszej
(Firebase BoM wersja 31.4.0 i nowsze).
Jeśli chcesz korzystać z Play Integrity, musisz określić odcisk cyfrowy SHA-256 swojej aplikacji. z Projekt ustawień konsoli Firebase. Więcej informacji: Uwierzytelnianie Klient, który zawiera szczegółowe informacje o tym, jak pobrać odcisk cyfrowy SHA-256 aplikacji.
- Weryfikacja reCAPTCHA: jeśli nie można korzystać z Play Integrity,
na przykład gdy użytkownik ma urządzenie bez zainstalowanej aplikacji Google Play services, Firebase Authentication
korzysta z weryfikacji reCAPTCHA do ukończenia procesu logowania telefonicznego. Zadanie reCAPTCHA można wykonać
często są realizowane bez konieczności rozwiązania problemu. Pamiętaj, że ten proces wymaga:
z Twoją aplikacją jest powiązany SHA-1. Ten proces wymaga również
bez ograniczeń lub na liście dozwolonych w domenie
PROJECT_ID.firebaseapp.com
.Oto przykładowe sytuacje, w których reCAPTCHA jest uruchamiany:
- Jeśli na urządzeniu użytkownika nie ma zainstalowanej aplikacji Google Play services.
- Jeśli aplikacja nie jest rozpowszechniana za pośrednictwem Google Play Store (w pakiecie SDK Authentication w wersji 21.2.0 lub nowszej).
- Jeśli uzyskany token SafetyNet był nieprawidłowy (w Authentication pakietu SDK w wersji 21.2.0 lub nowszej).
Jeśli do weryfikacji aplikacji używana jest usługa SafetyNet lub Play Integrity, pole
.%APP_NAME%
w szablonie SMS jest zapełniane nazwą aplikacji określoną na podstawie wartości Google Play Store. W sytuacjach, gdy reCAPTCHA jest uruchamiany, pole%APP_NAME%
jest zapełniane wartościąPROJECT_ID.firebaseapp.com
.
forceRecaptchaFlowForTesting
.
Do wyłączenia weryfikacji aplikacji (w przypadku fikcyjnych numerów telefonu) możesz użyć funkcji
setAppVerificationDisabledForTesting
Rozwiązywanie problemów
„Brak stanu początkowego” podczas używania reCAPTCHA do weryfikacji aplikacji wystąpił błąd
Ten błąd może wystąpić, gdy przepływ reCAPTCHA zostanie ukończony, ale użytkownik nie przekieruje użytkownika z powrotem do aplikacji natywnej. W takim przypadku użytkownik zostanie przekierowany na zastępczy adres URL
PROJECT_ID.firebaseapp.com/__/auth/handler
. W przeglądarkach Firefox otwieranie linków do aplikacji natywnych jest domyślnie wyłączone. Jeśli ten błąd pojawia się w Firefoksie, wykonaj czynności opisane w artykule Ustawianie przeglądarki Firefox na Androida do otwierania linków w aplikacjach natywnych, aby umożliwić otwieranie linków do aplikacji.
Wysyłanie kodu weryfikacyjnego na telefon użytkownika
Aby rozpocząć logowanie za pomocą numeru telefonu, użyj interfejsu z prośbą o wyświetlenie prośby żeby wpisać swój numer telefonu. Wymagania prawne są różne, ale jest to sprawdzona metoda i określać oczekiwania użytkowników, należy ich poinformować, przez telefon, mogą otrzymać SMS-a w celu weryfikacji i standardowego obowiązują opłaty.
Następnie przekaż jego numer telefonu do
PhoneAuthProvider.verifyPhoneNumber
metoda wysyłania żądania Firebase
zweryfikować numer telefonu użytkownika. Przykład:
Kotlin+KTX
val options = PhoneAuthOptions.newBuilder(auth) .setPhoneNumber(phoneNumber) // Phone number to verify .setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit .setActivity(this) // Activity (for callback binding) .setCallbacks(callbacks) // OnVerificationStateChangedCallbacks .build() PhoneAuthProvider.verifyPhoneNumber(options)
Java
PhoneAuthOptions options = PhoneAuthOptions.newBuilder(mAuth) .setPhoneNumber(phoneNumber) // Phone number to verify .setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit .setActivity(this) // (optional) Activity for callback binding // If no activity is passed, reCAPTCHA verification can not be used. .setCallbacks(mCallbacks) // OnVerificationStateChangedCallbacks .build(); PhoneAuthProvider.verifyPhoneNumber(options);
Metoda verifyPhoneNumber
jest powtarzająca się, jeśli ją wywołasz
wiele razy, na przykład w metodzie onStart
aktywności,
Metoda verifyPhoneNumber
nie wyśle drugiego SMS-a, chyba że
przekroczono limit czasu pierwotnego żądania.
Możesz ich użyć do wznowienia procesu logowania się na numer telefonu, jeśli
aplikacja zamyka się, zanim użytkownik będzie mógł się zalogować (np. gdy użytkownik korzysta z
w aplikacji do obsługi SMS-ów). Po wywołaniu funkcji verifyPhoneNumber
ustaw flagę, która
wskazuje, że trwa weryfikacja. Następnie zapisz flagę w sekcji Aktywność
onSaveInstanceState
i przywróć flagę w
onRestoreInstanceState
Na koniec, w sekcji Aktywność
onStart
, sprawdź, czy weryfikacja jest już w toku.
Jeśli tak, zadzwoń ponownie pod numer verifyPhoneNumber
. Pamiętaj, żeby usunąć flagę, gdy
zakończy się lub nie zakończy weryfikacji (patrz
na potrzeby weryfikacji).
Aby łatwo obsługiwać obrót ekranu i inne przypadki ponownego uruchomienia urządzenia,
przekazują Twoją aktywność do metody verifyPhoneNumber
. Wywołania zwrotne
zostanie automatycznie odłączona po zakończeniu aktywności, dzięki czemu możesz swobodnie pisać UI
kodu przejścia w metodach wywołań zwrotnych.
SMS wysłany przez Firebase można też zlokalizować, określając
język uwierzytelniania za pomocą metody setLanguageCode
w Uwierzytelnianiu
instancji.
Kotlin+KTX
auth.setLanguageCode("fr") // To apply the default app language instead of explicitly setting it. // auth.useAppLanguage()
Java
auth.setLanguageCode("fr"); // To apply the default app language instead of explicitly setting it. // auth.useAppLanguage();
Gdy dzwonisz pod numer PhoneAuthProvider.verifyPhoneNumber
, musisz też
podać instancję OnVerificationStateChangedCallbacks
, która
zawiera implementacje funkcji wywołania zwrotnego, które obsługują wyniki
do danej prośby. Przykład:
Kotlin+KTX
callbacks = object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() { override fun onVerificationCompleted(credential: PhoneAuthCredential) { // This callback will be invoked in two situations: // 1 - Instant verification. In some cases the phone number can be instantly // verified without needing to send or enter a verification code. // 2 - Auto-retrieval. On some devices Google Play services can automatically // detect the incoming verification SMS and perform verification without // user action. Log.d(TAG, "onVerificationCompleted:$credential") signInWithPhoneAuthCredential(credential) } override fun onVerificationFailed(e: FirebaseException) { // This callback is invoked in an invalid request for verification is made, // for instance if the the phone number format is not valid. Log.w(TAG, "onVerificationFailed", e) if (e is FirebaseAuthInvalidCredentialsException) { // Invalid request } else if (e is FirebaseTooManyRequestsException) { // The SMS quota for the project has been exceeded } else if (e is FirebaseAuthMissingActivityForRecaptchaException) { // reCAPTCHA verification attempted with null Activity } // Show a message and update the UI } override fun onCodeSent( verificationId: String, token: PhoneAuthProvider.ForceResendingToken, ) { // The SMS verification code has been sent to the provided phone number, we // now need to ask the user to enter the code and then construct a credential // by combining the code with a verification ID. Log.d(TAG, "onCodeSent:$verificationId") // Save verification ID and resending token so we can use them later storedVerificationId = verificationId resendToken = token } }
Java
mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() { @Override public void onVerificationCompleted(@NonNull PhoneAuthCredential credential) { // This callback will be invoked in two situations: // 1 - Instant verification. In some cases the phone number can be instantly // verified without needing to send or enter a verification code. // 2 - Auto-retrieval. On some devices Google Play services can automatically // detect the incoming verification SMS and perform verification without // user action. Log.d(TAG, "onVerificationCompleted:" + credential); signInWithPhoneAuthCredential(credential); } @Override public void onVerificationFailed(@NonNull FirebaseException e) { // This callback is invoked in an invalid request for verification is made, // for instance if the the phone number format is not valid. Log.w(TAG, "onVerificationFailed", e); if (e instanceof FirebaseAuthInvalidCredentialsException) { // Invalid request } else if (e instanceof FirebaseTooManyRequestsException) { // The SMS quota for the project has been exceeded } else if (e instanceof FirebaseAuthMissingActivityForRecaptchaException) { // reCAPTCHA verification attempted with null Activity } // Show a message and update the UI } @Override public void onCodeSent(@NonNull String verificationId, @NonNull PhoneAuthProvider.ForceResendingToken token) { // The SMS verification code has been sent to the provided phone number, we // now need to ask the user to enter the code and then construct a credential // by combining the code with a verification ID. Log.d(TAG, "onCodeSent:" + verificationId); // Save verification ID and resending token so we can use them later mVerificationId = verificationId; mResendToken = token; } };
Wywołania zwrotne w ramach weryfikacji
W większości aplikacji implementujesz onVerificationCompleted
,
onVerificationFailed
i onCodeSent
wywołań zwrotnych. Ty
może też zaimplementować onCodeAutoRetrievalTimeOut
, w zależności od
z wymaganiami aplikacji.
onWeryfikacjaZakończona(PhoneAuthCredential)
Metodę tę wywołuje się w 2 sytuacjach:
- Natychmiastowa weryfikacja: w niektórych przypadkach numer telefonu można połączyć natychmiast. weryfikacji bez konieczności wysyłania ani wpisywania kodu weryfikacyjnego.
- Automatyczne pobieranie: na niektórych urządzeniach Usługi Google Play mogą automatycznie wykrywa przychodzącego SMS-a weryfikacyjnego i przeprowadza weryfikacji bez działania ze strony użytkownika. (Ta funkcja może być niedostępna u niektórych operatorów). W tym przypadku używane są funkcje SMS retriever API, zawiera 11-znakowy hasz na końcu wiadomości SMS.
PhoneAuthCredential
, który jest przekazywany do
wywołanie zwrotne do zalogowania użytkownika.
onWeryfikacja nieudzielona(FirebaseWyjątek)
Ta metoda jest wywoływana w odpowiedzi na nieprawidłowe żądanie weryfikacji, takie jak , które wskazują nieprawidłowy numer telefonu lub kod weryfikacyjny.
onCodeSent(String verificationId, PhoneAuthProvider.ForceConfirmingToken)
Opcjonalnie. Ta metoda jest wywoływana po wysłaniu kodu weryfikacyjnego przez SMS na podany numer telefonu.
Po wywołaniu tej metody większość aplikacji wyświetla interfejs użytkownika, który
aby wpisać kod weryfikacyjny z SMS-a. (Jednocześnie
automatyczna weryfikacja może być kontynuowana w tle). Następnie, gdy użytkownik
wpisz kod weryfikacyjny, możesz użyć zarówno kodu, jak i
identyfikator weryfikacyjny przekazany do metody w celu utworzenia
PhoneAuthCredential
, którego możesz użyć do zalogowania się
użytkownika. Niektóre aplikacje mogą jednak poczekać do
Funkcja onCodeAutoRetrievalTimeOut
jest wywoływana przed wyświetleniem parametru
UI kodu weryfikacyjnego (niezalecane).
onCodeAutoRetrievalTimeOut(identyfikator weryfikacji ciągu znaków)
Opcjonalnie. Ta metoda jest wywoływana po upływie czasu oczekiwania określonego w
verifyPhoneNumber
jest zaliczony bez
Reguła onVerificationCompleted
uruchamia się najpierw. Na urządzeniach bez karty SIM
karty, ta metoda jest wywoływana natychmiast, ponieważ automatyczne pobieranie SMS-ów nie jest
jak to tylko możliwe.
Niektóre aplikacje blokują dane wejściowe użytkownika do zakończenia okresu automatycznej weryfikacji, i wyświetla interfejs użytkownika z prośbą o wpisanie kodu weryfikacyjnego. z wiadomości SMS (niezalecane).
Tworzenie obiektu PhoneAuthCredential
Gdy użytkownik wpisze kod weryfikacyjny, który Firebase wysłał na
przez telefon, utwórz obiekt PhoneAuthCredential
, korzystając z funkcji weryfikacji
oraz identyfikator weryfikacyjny, który został przekazany do onCodeSent
lub
onCodeAutoRetrievalTimeOut
oddzwonienie. (Kiedy
onVerificationCompleted
nazywa się, a Ty otrzymasz
PhoneAuthCredential
, możesz więc pominąć ten krok).
Aby utworzyć obiekt PhoneAuthCredential
, wywołaj
PhoneAuthProvider.getCredential
:
Kotlin+KTX
val credential = PhoneAuthProvider.getCredential(verificationId!!, code)
Java
PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);
Logowanie użytkownika
Po uzyskaniu obiektu PhoneAuthCredential
możesz określić, czy
onVerificationCompleted
oddzwonienie lub połączenie telefoniczne
PhoneAuthProvider.getCredential
, dokończ proces logowania do
przekazując obiekt PhoneAuthCredential
do
FirebaseAuth.signInWithCredential
:
Kotlin+KTX
private fun signInWithPhoneAuthCredential(credential: PhoneAuthCredential) { auth.signInWithCredential(credential) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success") val user = task.result?.user } else { // Sign in failed, display a message and update the UI Log.w(TAG, "signInWithCredential:failure", task.exception) if (task.exception is FirebaseAuthInvalidCredentialsException) { // The verification code entered was invalid } // Update UI } } }
Java
private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) { mAuth.signInWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success"); FirebaseUser user = task.getResult().getUser(); // Update UI } else { // Sign in failed, display a message and update the UI Log.w(TAG, "signInWithCredential:failure", task.getException()); if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) { // The verification code entered was invalid } } } }); }
Testowanie za pomocą fikcyjnych numerów telefonów
W konsoli Firebase możesz skonfigurować fikcyjne numery telefonów na potrzeby programowania. Testowanie na fikcyjnym telefonie ma następujące korzyści:
- Przetestuj uwierzytelnianie za pomocą numeru telefonu bez przekraczania limitu wykorzystania.
- Przetestuj uwierzytelnianie numeru telefonu bez wysyłania faktycznego SMS-a.
- Przeprowadzaj kolejne testy przy użyciu tego samego numeru telefonu bez ograniczania limitu. Ten minimalizuje ryzyko odrzucenia aplikacji podczas procesu sprawdzania w Sklepie z aplikacjami, jeśli weryfikator ten sam numer telefonu do przetestowania.
- Możesz łatwo przeprowadzać testy w środowiskach programistycznych bez dodatkowych działań, takich jak: możliwość programowania w symulatorze iOS lub w emulatorze Androida bez Usług Google Play.
- Zapis testów integracji bez blokowania przez testy zabezpieczeń, które normalnie są stosowane przy użyciu prawdziwych numerów telefonów w środowisku produkcyjnym.
Fikcyjne numery telefonów muszą spełniać te wymagania:
- Upewnij się, że używane numery telefonów są fałszywe i nie istnieją. Operator Firebase Authentication nie umożliwia ustawiania istniejących numerów telefonów, których używają rzeczywisti użytkownicy jako numerów testowych. Jedną z opcji jest użycie 555 numerów z prefiksem jako testowych numerów telefonów w USA, na przykład: +1 650-555-3434
- Numery telefonów muszą być poprawnie sformatowane pod kątem długości i innych parametrów . Nadal przechodzą one taką samą weryfikację jak numer telefonu rzeczywistego użytkownika.
- Możesz dodać maksymalnie 10 numerów telefonów na potrzeby programowania.
- Używaj testowych numerów telefonów lub kodów, które są trudne do odgadnięcia i zmiany. i to często.
Tworzenie fikcyjnych numerów telefonów i kodów weryfikacyjnych
- W konsoli Firebase otwórz Uwierzytelnianie.
- Na karcie Metoda logowania włącz dostawcę telefonu, jeśli nie jest jeszcze włączony.
- Otwórz menu nawigacyjne Numery telefonów do testowania.
- Podaj numer telefonu, który chcesz przetestować, np. +1 650-555-3434.
- Podaj 6-cyfrowy kod weryfikacyjny tego numeru, np. 654321.
- Dodaj numer. W razie potrzeby możesz usunąć numer telefonu swojego kodu, najeżdżając kursorem na odpowiedni wiersz i klikając ikonę kosza.
Testy ręczne
Możesz od razu zacząć używać fikcyjnego numeru telefonu we wniosku. Dzięki temu możesz: przeprowadzaj testy ręczne na etapach programowania, aby uniknąć problemów z limitami i ich ograniczania. Możesz też przeprowadzać testy bezpośrednio w symulatorze iOS lub w emulatorze Androida bez Usług Google Play. Zainstalowano.
Po podaniu fikcyjnego numeru telefonu i wysłaniu kodu weryfikacyjnego SMS nie zostanie wysłany wysłano. Zamiast tego, aby dokończyć podpisywanie, musisz podać wcześniej skonfigurowany kod weryfikacyjny cal
Gdy się zalogujesz, zostanie utworzony użytkownik Firebase z tym numerem telefonu. działa i ma takie samo zachowanie jak prawdziwy użytkownik numeru telefonu oraz ma dostęp do Realtime Database/Cloud Firestore z innymi usługami w ten sam sposób. Token tożsamości wygenerowany podczas ten proces ma taki sam podpis jak prawdziwy użytkownik numeru telefonu.
Inną możliwością jest ustawienie roli testowej za pomocą niestandardowej dotyczące tych użytkowników, aby odróżnić ich jako fałszywych użytkowników, jeśli chcesz dostęp.
Aby ręcznie aktywować proces reCAPTCHA na potrzeby testowania, użyj
Metoda forceRecaptchaFlowForTesting()
.
// Force reCAPTCHA flow FirebaseAuth.getInstance().getFirebaseAuthSettings().forceRecaptchaFlowForTesting();
Testowanie integracji
Oprócz testowania ręcznego Firebase Authentication udostępnia interfejsy API, które ułatwiają pisanie testów integracji do testowania uwierzytelniania przez telefon. Te interfejsy API wyłączają weryfikację aplikacji przez wyłączenie reCAPTCHA są wymagane w przypadku aplikacji internetowych i ciche powiadomienia push w iOS. Umożliwia to testowanie automatyzacji i łatwiejsze ich wdrożenie. Zapewniają też możliwość testowania aplikacji błyskawicznych proces weryfikacji na Androidzie.
Na urządzeniu z Androidem zadzwoń pod numer setAppVerificationDisabledForTesting()
przed
signInWithPhoneNumber
połączenie. Spowoduje to automatyczne wyłączenie weryfikacji aplikacji,
dzięki czemu możesz podać numer telefonu bez ręcznego wpisywania go. Mimo że
Funkcje Play Integrity i reCAPTCHA są wyłączone, dlatego nadal nie można używać prawdziwego numeru telefonu
dokończ logowanie. Za pomocą tego interfejsu API można używać tylko fikcyjnych numerów telefonów.
// Turn off phone auth app verification. FirebaseAuth.getInstance().getFirebaseAuthSettings() .setAppVerificationDisabledForTesting();
Połączenie z numerem verifyPhoneNumber
z fikcyjnym numerem aktywuje
onCodeSent
– musisz w tym celu podać odpowiedni numer weryfikacyjny
w kodzie. Umożliwia to testowanie w emulatorach Androida.
Java
String phoneNum = "+16505554567"; String testVerificationCode = "123456"; // Whenever verification is triggered with the whitelisted number, // provided it is not set for auto-retrieval, onCodeSent will be triggered. FirebaseAuth auth = FirebaseAuth.getInstance(); PhoneAuthOptions options = PhoneAuthOptions.newBuilder(auth) .setPhoneNumber(phoneNum) .setTimeout(60L, TimeUnit.SECONDS) .setActivity(this) .setCallbacks(new PhoneAuthProvider.OnVerificationStateChangedCallbacks() { @Override public void onCodeSent(@NonNull String verificationId, @NonNull PhoneAuthProvider.ForceResendingToken forceResendingToken) { // Save the verification id somewhere // ... // The corresponding whitelisted code above should be used to complete sign-in. MainActivity.this.enableUserManuallyInputCode(); } @Override public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential) { // Sign in with the credential // ... } @Override public void onVerificationFailed(@NonNull FirebaseException e) { // ... } }) .build(); PhoneAuthProvider.verifyPhoneNumber(options);
Kotlin+KTX
val phoneNum = "+16505554567" val testVerificationCode = "123456" // Whenever verification is triggered with the whitelisted number, // provided it is not set for auto-retrieval, onCodeSent will be triggered. val options = PhoneAuthOptions.newBuilder(Firebase.auth) .setPhoneNumber(phoneNum) .setTimeout(30L, TimeUnit.SECONDS) .setActivity(this) .setCallbacks(object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() { override fun onCodeSent( verificationId: String, forceResendingToken: PhoneAuthProvider.ForceResendingToken, ) { // Save the verification id somewhere // ... // The corresponding whitelisted code above should be used to complete sign-in. this@MainActivity.enableUserManuallyInputCode() } override fun onVerificationCompleted(phoneAuthCredential: PhoneAuthCredential) { // Sign in with the credential // ... } override fun onVerificationFailed(e: FirebaseException) { // ... } }) .build() PhoneAuthProvider.verifyPhoneNumber(options)
Możesz też przetestować procesy automatycznego pobierania na Androidzie, ustawiając fikcyjną liczbę i
odpowiadający mu kod weryfikacyjny do automatycznego pobierania przez wywołanie
setAutoRetrievedSmsCodeForPhoneNumber
Gdy verifyPhoneNumber
to
wywołuje funkcję onVerificationCompleted
z PhoneAuthCredential
bezpośrednio. Ta funkcja działa tylko w przypadku fikcyjnych numerów telefonów.
Upewnij się, że ta opcja jest wyłączona, a fikcyjne numery telefonów nie są zakodowane na stałe podczas publikowania aplikacji w Sklepie Google Play.
Java
// The test phone number and code should be whitelisted in the console. String phoneNumber = "+16505554567"; String smsCode = "123456"; FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(); FirebaseAuthSettings firebaseAuthSettings = firebaseAuth.getFirebaseAuthSettings(); // Configure faking the auto-retrieval with the whitelisted numbers. firebaseAuthSettings.setAutoRetrievedSmsCodeForPhoneNumber(phoneNumber, smsCode); PhoneAuthOptions options = PhoneAuthOptions.newBuilder(firebaseAuth) .setPhoneNumber(phoneNumber) .setTimeout(60L, TimeUnit.SECONDS) .setActivity(this) .setCallbacks(new PhoneAuthProvider.OnVerificationStateChangedCallbacks() { @Override public void onVerificationCompleted(@NonNull PhoneAuthCredential credential) { // Instant verification is applied and a credential is directly returned. // ... } // ... }) .build(); PhoneAuthProvider.verifyPhoneNumber(options);
Kotlin+KTX
// The test phone number and code should be whitelisted in the console. val phoneNumber = "+16505554567" val smsCode = "123456" val firebaseAuth = Firebase.auth val firebaseAuthSettings = firebaseAuth.firebaseAuthSettings // Configure faking the auto-retrieval with the whitelisted numbers. firebaseAuthSettings.setAutoRetrievedSmsCodeForPhoneNumber(phoneNumber, smsCode) val options = PhoneAuthOptions.newBuilder(firebaseAuth) .setPhoneNumber(phoneNumber) .setTimeout(60L, TimeUnit.SECONDS) .setActivity(this) .setCallbacks(object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() { override fun onVerificationCompleted(credential: PhoneAuthCredential) { // Instant verification is applied and a credential is directly returned. // ... } // ... }) .build() PhoneAuthProvider.verifyPhoneNumber(options)
Dalsze kroki
Gdy użytkownik zaloguje się po raz pierwszy, tworzone jest nowe konto użytkownika. powiązane z danymi logowania, czyli z nazwą użytkownika, hasłem i numerem telefonu, numer telefonu lub informacje o dostawcy uwierzytelniania – użytkownik zalogowany. Ten nowy jest przechowywane w ramach projektu Firebase i może służyć do identyfikowania użytkownika w każdej aplikacji w projekcie, niezależnie od tego, jak się loguje.
-
W swoich aplikacjach możesz uzyskać podstawowe informacje o profilu użytkownika z
FirebaseUser
. Zobacz Zarządzanie użytkownikami. Na liście Firebase Realtime Database i Cloud Storage regułami zabezpieczeń, pobierz ze zmiennej
auth
unikalny identyfikator zalogowanego użytkownika, i używać ich do kontrolowania, do jakich danych użytkownik ma dostęp.
Możesz zezwolić użytkownikom na logowanie się w aplikacji przy użyciu wielokrotnego uwierzytelniania. dostawców, łącząc dane logowania dostawcy uwierzytelniania z istniejącego konta użytkownika.
Aby wylogować użytkownika, wywołaj
signOut
:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();