Google은 흑인 공동체를 위한 인종적 평등을 추구하기 위해 노력하고 있습니다. 자세히 알아보기

Unity에서 전화번호를 사용하여 Firebase에 인증

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

Firebase 인증을 사용하여 사용자의 전화로 SMS 메시지를 보내 사용자를 로그인할 수 있습니다. 사용자는 SMS 메시지에 포함된 일회용 코드를 사용하여 로그인합니다.

이 문서에서는 Firebase SDK를 사용하여 전화번호 로그인 흐름을 구현하는 방법을 설명합니다.

시작하기 전에

  1. Firebase 인증 을 사용하려면 먼저 Firebase Unity SDK (특히 FirebaseAuth.unitypackage )를 Unity 프로젝트에 추가해야 합니다.

    Unity 프로젝트에 Firebase 추가 에서 이러한 초기 설정 단계에 대한 자세한 지침을 찾아보세요.

  2. 아직 앱을 Firebase 프로젝트에 연결하지 않았다면 Firebase 콘솔 에서 연결하세요.

iOS에서 전화번호 로그인에는 물리적 장치가 필요하며 시뮬레이터에서는 작동하지 않습니다.

보안 문제

전화번호만 사용하는 인증은 편리하지만 다른 사용 가능한 방법보다 안전하지 않습니다. 전화번호의 소유가 사용자 간에 쉽게 이전될 수 있기 때문입니다. 또한 여러 사용자 프로필이 있는 장치에서 SMS 메시지를 받을 수 있는 모든 사용자는 장치의 전화 번호를 사용하여 계정에 로그인할 수 있습니다.

앱에서 전화번호 기반 로그인을 사용하는 경우 더 안전한 로그인 방법과 함께 이를 제공하고 전화번호 로그인 사용의 보안 상충관계를 사용자에게 알려야 합니다.

Firebase 프로젝트에 전화번호 로그인 활성화

SMS로 사용자를 로그인하려면 먼저 Firebase 프로젝트에 대한 전화번호 로그인 방법을 활성화해야 합니다.

  1. Firebase 콘솔 에서 인증 섹션을 엽니다.
  2. 로그인 방법 페이지에서 전화번호 로그인 방법을 활성화합니다.

Firebase의 전화번호 로그인 요청 할당량은 대부분의 앱이 영향을 받지 않을 만큼 충분히 높습니다. 그러나 전화 인증을 사용하여 매우 많은 수의 사용자를 로그인해야 하는 경우 요금제를 업그레이드해야 할 수 있습니다. 가격 페이지를 참조하십시오.

APN 알림 수신 시작(iOS만 해당)

iOS에서 전화번호 인증을 사용하려면 앱이 Firebase에서 APN 알림을 수신할 수 있어야 합니다. 기기에서 처음으로 전화번호로 사용자를 로그인할 때 Firebase 인증은 전화번호 로그인 요청이 앱에서 오는지 확인하기 위해 기기에 자동 푸시 알림을 보냅니다. (이 때문에 시뮬레이터에서는 전화번호 로그인을 사용할 수 없습니다.)

Firebase 인증과 함께 사용할 APN 알림을 활성화하려면 다음 안내를 따르세요.

  1. Xcode에서 프로젝트에 대한 푸시 알림을 활성화 합니다.
  2. APN 인증서를 Firebase에 업로드합니다. APN 인증서가 아직 없는 경우 Apple 개발자 회원 센터 에서 인증서를 생성해야 합니다.

    1. Firebase 콘솔의 프로젝트 내에서 톱니바퀴 아이콘을 선택하고 프로젝트 설정 을 선택한 다음 클라우드 메시징 탭을 선택합니다.

    2. 개발 인증서, 프로덕션 인증서 또는 둘 다에 대해 인증서 업로드 버튼을 선택합니다. 하나 이상이 필요합니다.

    3. 각 인증서에 대해 .p12 파일을 선택하고 암호(있는 경우)를 제공합니다. 이 인증서의 번들 ID가 앱의 번들 ID와 일치하는지 확인하십시오. 저장 을 선택합니다.

사용자의 전화로 인증 코드 보내기

전화번호 로그인을 시작하려면 전화번호를 제공하라는 인터페이스를 사용자에게 제공한 다음 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에서) 앱에 자동 푸시 알림을 보냅니다.
    • Firebase는 인증 코드가 포함된 SMS 메시지를 지정된 전화번호로 보내고 인증 ID를 완료 함수에 전달합니다. 사용자를 로그인하려면 인증 코드와 인증 ID가 모두 필요합니다.
  3. 인증 ID를 저장하고 앱이 로드되면 복원합니다. 이렇게 하면 사용자가 로그인 과정을 완료하기 전에 앱이 종료되는 경우(예: SMS 앱으로 전환하는 동안) 유효한 확인 ID를 계속 보유하고 있는지 확인할 수 있습니다.

    원하는 방식으로 확인 ID를 유지할 수 있습니다. 간단한 방법은 UnityEngine.PlayerPrefs 로 확인 ID를 저장하는 것입니다.

codeSent 에 전달된 콜백이 호출되면 SMS 메시지로 인증 코드를 수신할 때 사용자에게 확인 코드를 입력하라는 메시지를 표시할 수 있습니다.

반면, validationCompleted에 대한 콜백이 호출되면 자동 verificationCompleted 이 성공한 것이며 이제 아래에 설명된 대로 사용할 수 있는 Credential 을 갖게 됩니다.

인증 코드로 사용자 로그인

사용자가 SMS 메시지의 인증 코드를 앱에 제공한 후 인증 코드 및 인증 ID에서 Credential 객체를 만들고 해당 객체를 FirebaseAuth.SignInWithCredential 에 전달하여 사용자를 로그인합니다.

  1. 사용자로부터 인증 코드를 받습니다.
  2. 확인 코드 및 확인 ID에서 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 실시간 데이터베이스 및 Cloud Storage 보안 규칙 에서 auth 변수에서 로그인한 사용자의 고유한 사용자 ID를 가져와 사용자가 액세스할 수 있는 데이터를 제어하는 ​​데 사용할 수 있습니다.

인증 공급자 자격 증명을 기존 사용자 계정에 연결하여 사용자가 여러 인증 공급자를 사용하여 앱에 로그인하도록 허용할 수 있습니다.

사용자를 로그아웃하려면 SignOut() 을 호출합니다.

auth.SignOut();