Save the date - Google I/O returns May 18-20. Register to get the most out of the digital experience: Build your schedule, reserve space, participate in Q&As, earn Google Developer profile badges, and more. Register now

Аутентификация в Firebase по номеру телефона в Unity

Вы можете использовать Firebase Authentication для входа пользователя в систему, отправив SMS-сообщение на телефон пользователя. Пользователь входит в систему, используя одноразовый код, содержащийся в SMS-сообщении.

В этом документе описывается, как реализовать поток входа по номеру телефона с помощью Firebase SDK.

Прежде чем вы начнете

  1. Прежде чем вы сможете использовать Firebase Authentication , вам необходимо добавить Firebase Unity SDK (в частности, FirebaseAuth.unitypackage ) в свой проект Unity.

    Подробные инструкции по этим шагам начальной настройки см. В разделе Добавление Firebase в проект Unity .

  2. Если вы еще не подключили свое приложение к проекту Firebase, сделайте это из консоли Firebase .

Обратите внимание, что в iOS для входа по номеру телефона требуется физическое устройство, и он не будет работать на симуляторе.

Проблемы безопасности

Аутентификация с использованием только номера телефона, хотя и удобна, но менее безопасна, чем другие доступные методы, поскольку обладание номером телефона может легко передаваться между пользователями. Кроме того, на устройствах с несколькими профилями пользователей любой пользователь, который может получать SMS-сообщения, может войти в учетную запись, используя номер телефона устройства.

Если вы используете в своем приложении вход на основе номера телефона, вы должны предложить его наряду с более безопасными методами входа и проинформировать пользователей о компромиссах безопасности при использовании входа по номеру телефона.

Включите вход по номеру телефона для своего проекта Firebase

Чтобы входить в систему с помощью SMS, вы должны сначала включить метод входа по номеру телефона для своего проекта Firebase:

  1. В консоли Firebase откройте раздел Аутентификация .
  2. На странице " Метод входа" включите метод входа по номеру телефона .

Квота запросов на вход по телефонному номеру Firebase достаточно высока, поэтому большинство приложений не будут затронуты. Однако, если вам нужно войти в систему очень большого количества пользователей с помощью аутентификации по телефону, вам может потребоваться обновить тарифный план. См. Страницу с ценами .

Начать получать уведомления об APN (только для iOS)

Чтобы использовать аутентификацию по номеру телефона на iOS, ваше приложение должно иметь возможность получать уведомления APN от Firebase. Когда вы впервые входите в систему с помощью номера телефона на устройстве, Firebase Authentication отправляет на устройство тихое push-уведомление, чтобы убедиться, что запрос на вход по номеру телефона поступает из вашего приложения. (По этой причине вход по номеру телефона нельзя использовать в симуляторе.)

Чтобы включить уведомления APN для использования с аутентификацией Firebase:

  1. В Xcode включите push-уведомления для своего проекта.
  2. Загрузите свой сертификат APNs в Firebase. Если у вас еще нет сертификата APNs, обязательно создайте его в Apple Developer Member Center .

    1. Внутри своего проекта в консоли Firebase щелкните значок шестеренки, выберите « Настройки проекта» , а затем выберите вкладку « Облачные сообщения ».

    2. Нажмите кнопку « Загрузить сертификат» для сертификата разработки, производственного сертификата или того и другого. Требуется хотя бы один.

    3. Для каждого сертификата выберите файл .p12 и укажите пароль, если таковой имеется. Убедитесь, что идентификатор пакета для этого сертификата совпадает с идентификатором пакета вашего приложения. Выберите Сохранить .

Отправьте проверочный код на телефон пользователя

Чтобы инициировать вход по номеру телефона, представьте пользователю интерфейс, предлагающий PhoneAuthProvider.VerifyPhoneNumber свой номер телефона, а затем вызовите PhoneAuthProvider.VerifyPhoneNumber чтобы запросить отправку Firebase кода аутентификации на телефон пользователя по SMS:

  1. Получите номер телефона пользователя.

    Юридические требования различаются, но в качестве наилучшей практики и для того, чтобы установить ожидания пользователей, вам следует сообщить им, что, если они используют вход по телефону, они могут получить SMS-сообщение для проверки и применяются стандартные тарифы.

  2. Вызовите PhoneAuthProvider.VerifyPhoneNumber , передав ему номер телефона пользователя.
    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.
      });
    
    Когда вы вызываете PhoneAuthProvider.VerifyPhoneNumber , Firebase,
    • (в iOS) отправляет в ваше приложение беззвучное push-уведомление.
    • Firebase отправляет SMS-сообщение, содержащее код аутентификации, на указанный номер телефона и передает идентификатор подтверждения вашей функции завершения. Для входа пользователя вам потребуются как проверочный код, так и проверочный идентификатор.
  3. Сохраните идентификатор подтверждения и восстановите его при загрузке приложения. Таким образом, вы можете быть уверены, что у вас по-прежнему есть действующий идентификатор подтверждения, если ваше приложение завершается до того, как пользователь завершит процесс входа (например, при переключении на приложение SMS).

    Вы можете сохранить проверочный идентификатор как хотите. Простой способ - сохранить идентификатор подтверждения с помощью UnityEngine.PlayerPrefs .

Если codeSent обратный вызов, переданный в codeSent , вы можете предложить пользователю ввести проверочный код, когда он получит его в SMS-сообщении.

С другой стороны, если вызывается обратный вызов для verificationCompleted , значит, автоматическая проверка прошла успешно, и теперь у вас будут Credential которые вы можете использовать, как описано ниже.

Авторизуйтесь пользователем с проверочным кодом

После того, как пользователь предоставит вашему приложению проверочный код из SMS-сообщения, войдите в систему, создав объект Credential из проверочного кода и проверочного идентификатора и передав этот объект в FirebaseAuth.SignInWithCredential .

  1. Получите проверочный код от пользователя.
  2. Создайте объект Credential из кода подтверждения и идентификатора подтверждения.
    Credential credential =
        phoneAuthProvider.GetCredential(verificationId, verificationCode);
        
  3. Войдите в систему, используя объект 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);
    });
    
    .

Следующие шаги

После того, как пользователь входит в систему в первый раз, создается новая учетная запись пользователя, связанная с учетными данными, то есть с именем пользователя и паролем, номером телефона или информацией о провайдере аутентификации, с которыми пользователь вошел в систему. Эта новая учетная запись хранится как часть вашего проекта Firebase и может использоваться для идентификации пользователя в каждом приложении в вашем проекте, независимо от того, как пользователь входит в систему.

  • В своих приложениях вы можете получить основную информацию профиля пользователя из объекта 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;
    }
    
  • В своей базе данных Firebase Realtime и правилах безопасности облачного хранилища вы можете получить уникальный идентификатор пользователя вошедшего в систему из переменной auth и использовать его для управления данными, к которым пользователь может получить доступ.

Вы можете разрешить пользователям входить в ваше приложение с помощью нескольких поставщиков аутентификации, связав учетные данные поставщика аутентификации с существующей учетной записью пользователя.

Чтобы выйти из системы, вызовите SignOut() :

auth.SignOut();