Google 致力于为黑人社区推动种族平等。查看具体举措

Uwierzytelnij się w Firebase przy użyciu numeru telefonu w Unity

Za pomocą Uwierzytelniania Firebase możesz zalogować się użytkownika, wysyłając wiadomość SMS na jego telefon. Użytkownik loguje się za pomocą kodu jednorazowego zawartego w wiadomości SMS.

W tym dokumencie opisano, jak zaimplementować proces logowania za pomocą numeru telefonu przy użyciu pakietu Firebase SDK.

Zanim zaczniesz

  1. Aby móc korzystać z uwierzytelniania Firebase , musisz dodać pakiet SDK Firebase Unity (w szczególności FirebaseAuth.unitypackage ) do swojego projektu Unity.

    Szczegółowe instrukcje dotyczące tych wstępnych etapów konfiguracji znajdziesz w artykule Dodawanie Firebase do projektu Unity .

  2. Jeśli aplikacja nie została jeszcze połączona z projektem Firebase, zrób to z konsoli Firebase .

Pamiętaj, że w systemie iOS logowanie za pomocą numeru telefonu wymaga urządzenia fizycznego i nie będzie działać na symulatorze.

Obawy dotyczące bezpieczeństwa

Uwierzytelnianie przy użyciu samego numeru telefonu, choć wygodne, jest mniej bezpieczne niż inne dostępne metody, ponieważ posiadanie numeru telefonu można łatwo przenosić między użytkownikami. Ponadto na urządzeniach z wieloma profilami użytkowników każdy użytkownik, który może odbierać wiadomości SMS, może zalogować się na konto przy użyciu numeru telefonu urządzenia.

Jeśli korzystasz z logowania na podstawie numeru telefonu w swojej aplikacji, powinieneś oferować go wraz z bezpieczniejszymi metodami logowania i informować użytkowników o kompromisach związanych z bezpieczeństwem korzystania z logowania za pomocą numeru telefonu.

Włącz logowanie za pomocą numeru telefonu w projekcie Firebase

Aby logować użytkowników przez SMS, musisz najpierw włączyć metodę logowania za pomocą numeru telefonu dla swojego projektu Firebase:

  1. W konsoli Firebase otwórz sekcję Uwierzytelnianie .
  2. Na stronie Metoda logowania włącz metodę logowania za pomocą numeru telefonu .

Limit żądań logowania za pomocą numeru telefonu Firebase jest na tyle wysoki, że nie ma to wpływu na większość aplikacji. Jeśli jednak musisz zalogować bardzo dużą liczbę użytkowników za pomocą uwierzytelniania telefonicznego, może być konieczne uaktualnienie planu cenowego. Zobacz cennik .

Zacznij otrzymywać powiadomienia APNs (tylko iOS)

Aby korzystać z uwierzytelniania numeru telefonu w iOS, Twoja aplikacja musi mieć możliwość odbierania powiadomień APNs z Firebase. Gdy logujesz użytkownika przy użyciu jego numeru telefonu po raz pierwszy na urządzeniu, Uwierzytelnianie Firebase wysyła na urządzenie ciche powiadomienie push, aby sprawdzić, czy żądanie logowania za pomocą numeru telefonu pochodzi z Twojej aplikacji. (Z tego powodu w symulatorze nie można używać logowania za pomocą numeru telefonu).

Aby włączyć powiadomienia APN do użytku z Uwierzytelnianiem Firebase:

  1. W Xcode włącz powiadomienia push dla swojego projektu.
  2. Prześlij swój certyfikat APNs do Firebase. Jeśli nie masz jeszcze certyfikatu APNs, utwórz go w Apple Developer Member Center .

    1. Wewnątrz projektu w konsoli Firebase wybierz ikonę koła zębatego, wybierz Ustawienia projektu , a następnie wybierz kartę Wiadomości w chmurze .

    2. Wybierz przycisk Prześlij certyfikat dla certyfikatu deweloperskiego, certyfikatu produkcyjnego lub obu. Wymagany jest co najmniej jeden.

    3. Dla każdego certyfikatu wybierz plik .p12 i podaj hasło, jeśli jest. Upewnij się, że identyfikator pakietu dla tego certyfikatu jest zgodny z identyfikatorem pakietu Twojej aplikacji. Wybierz Zapisz .

Wyślij kod weryfikacyjny na telefon użytkownika

Aby zainicjować logowanie za pomocą numeru telefonu, zaprezentuj użytkownikowi interfejs, który prosi o podanie numeru telefonu, a następnie zadzwoń do PhoneAuthProvider.VerifyPhoneNumber , aby poprosić Firebase o wysłanie kodu uwierzytelniającego na telefon użytkownika SMS-em:

  1. Uzyskaj numer telefonu użytkownika.

    Wymagania prawne są różne, ale najlepszym rozwiązaniem i określeniem oczekiwań wobec użytkowników jest poinformowanie ich, że jeśli korzystają z logowania przez telefon, mogą otrzymać wiadomość SMS w celu weryfikacji i obowiązują standardowe stawki.

  2. Wywołaj PhoneAuthProvider.VerifyPhoneNumber , przekazując do niego numer telefonu użytkownika.
    PhoneAuthProvider provider = PhoneAuthProvider.GetInstance(firebaseAuth);
    provider.VerifyPhoneNumber(phoneNumber, phoneAuthTimeoutMs, 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.
      });
    
    Kiedy dzwonisz do PhoneAuthProvider.VerifyPhoneNumber , Firebase,
    • (w systemie iOS) wysyła ciche powiadomienie push do Twojej aplikacji.
    • Firebase wyśle ​​wiadomość SMS zawierającą kod uwierzytelniający na podany numer telefonu i przekaże identyfikator weryfikacyjny do funkcji uzupełniania. Do zalogowania użytkownika będą potrzebne zarówno kod weryfikacyjny, jak i identyfikator weryfikacyjny.
  3. Zapisz identyfikator weryfikacyjny i przywróć go po załadowaniu aplikacji. W ten sposób możesz upewnić się, że nadal masz prawidłowy identyfikator weryfikacyjny, jeśli Twoja aplikacja zostanie zamknięta przed ukończeniem przez użytkownika procesu logowania (na przykład podczas przełączania do aplikacji SMS).

    Możesz zachować identyfikator weryfikacyjny w dowolny sposób. Prostym sposobem jest zapisanie identyfikatora weryfikacji za pomocą UnityEngine.PlayerPrefs .

Jeśli wywołanie zwrotne przekazane do codeSent zostanie wywołane, możesz poprosić użytkownika o wpisanie kodu weryfikacyjnego, gdy otrzyma go w wiadomości SMS.

Z drugiej strony, jeśli zostanie wywołane wywołanie zwrotne dla verificationCompleted , oznacza to, że automatyczna weryfikacja się powiodła i będziesz teraz mieć Credential , z którym możesz korzystać w sposób opisany poniżej.

Zaloguj się użytkownika za pomocą kodu weryfikacyjnego

Gdy użytkownik dostarczy aplikacji kod weryfikacyjny z wiadomości SMS, zaloguj się, tworząc obiekt Credential na podstawie kodu weryfikacyjnego i identyfikatora weryfikacyjnego, a następnie przekazując ten obiekt do FirebaseAuth.SignInWithCredential .

  1. Uzyskaj kod weryfikacyjny od użytkownika.
  2. Utwórz obiekt Credential z kodu weryfikacyjnego i identyfikatora weryfikacyjnego.
    Credential credential =
        phoneAuthProvider.GetCredential(verificationId, verificationCode);
        
  3. Zaloguj się użytkownika za pomocą obiektu Credential :
    auth.SignInWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCredentialAsync encountered an error: " +
                       task.Exception);
        return;
      }
    
      FirebaseUser newUser = task.Result;
      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);
    });
    

Następne kroki

Gdy użytkownik zaloguje się po raz pierwszy, zostanie utworzone nowe konto użytkownika i połączone z poświadczeniami — czyli nazwą użytkownika i hasłem, numerem telefonu lub informacjami o dostawcy uwierzytelniania — przy użyciu których użytkownik się zalogował. To nowe konto jest przechowywane jako część projektu Firebase i może służyć do identyfikowania użytkownika w każdej aplikacji w projekcie, niezależnie od tego, jak się on loguje.

  • W swoich aplikacjach możesz uzyskać podstawowe informacje o profilu użytkownika z obiektu Firebase.Auth.FirebaseUser :

    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;
    }
    
  • W regułach bezpieczeństwa bazy danych czasu rzeczywistego i usługi Cloud Storage Firebase możesz uzyskać unikalny identyfikator zalogowanego użytkownika ze zmiennej auth i używać go do kontrolowania, do jakich danych użytkownik ma dostęp.

Możesz zezwolić użytkownikom na logowanie się do Twojej aplikacji przy użyciu wielu dostawców uwierzytelniania, łącząc poświadczenia dostawcy uwierzytelniania z istniejącym kontem użytkownika.

Aby wylogować użytkownika, wywołaj SignOut() :

auth.SignOut();