Catch up on everthing we announced at this year's Firebase Summit. Learn more

使用電話號碼在 Android 上使用 Firebase 進行身份驗證

您可以使用 Firebase 身份驗證通過向用戶的手機發送 SMS 消息來登錄用戶。用戶使用 SMS 消息中包含的一次性代碼登錄。

最簡單的方法來添加電話號碼,登錄到您的應用程序是使用FirebaseUI ,其中包括一個下拉在登錄窗口小部件實現簽到流的電話號碼登錄,以及基於密碼的和聯合的標誌-在。本文檔介紹瞭如何使用 Firebase SDK 實現電話號碼登錄流程。

在你開始之前

  1. 如果你還沒有,添加火力地堡到您的Android項目
  2. 使用火力地堡Android的物料清單,聲明你的模塊(應用程序級)搖籃文件(通常為火力地堡認證的Android庫的依賴app/build.gradle )。

    爪哇

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:29.0.1')
    
        // Declare 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'
    }
    

    通過使用火力地堡Android的物料清單,您的應用程序將始終使用火力地堡的Android庫的兼容版本。

    (替代)聲明火力地堡庫依賴使用物料清單

    如果您選擇不使用 Firebase BoM,則必須在其依賴項行中指定每個 Firebase 庫版本。

    需要注意的是,如果你在你的應用程序使用多個火力地堡庫,我們強烈建議您使用的物料清單管理庫版本,以保證所有版本相互兼容。

    dependencies {
        // Declare 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:21.0.1'
    }
    

    科特林+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:29.0.1')
    
        // Declare 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-ktx'
    }
    

    通過使用火力地堡Android的物料清單,您的應用程序將始終使用火力地堡的Android庫的兼容版本。

    (替代)聲明火力地堡庫依賴使用物料清單

    如果您選擇不使用 Firebase BoM,則必須在其依賴項行中指定每個 Firebase 庫版本。

    需要注意的是,如果你在你的應用程序使用多個火力地堡庫,我們強烈建議您使用的物料清單管理庫版本,以保證所有版本相互兼容。

    dependencies {
        // Declare 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-ktx:21.0.1'
    }
    
  3. 如果您還沒有連接您的應用程序到你的火力地堡項目,從這樣做火力地堡控制台
  4. 如果您尚未設置你的應用程序的SHA-1散列在火力地堡控制台,這樣做。請參閱驗證您的客戶端為如何找到您的應用程序的SHA-1散列信息。

安全問題

僅使用電話號碼的身份驗證雖然方便,但不如其他可用方法安全,因為電話號碼的所有權很容易在用戶之間轉移。此外,在具有多個用戶配置文件的設備上,任何可以接收 SMS 消息的用戶都可以使用設備的電話號碼登錄帳戶。

如果您在應用中使用基於電話號碼的登錄,則應將其與更安全的登錄方法一起提供,並告知用戶使用電話號碼登錄的安全性權衡。

為您的 Firebase 項目啟用電話號碼登錄

要通過短信登錄用戶,您必須首先為 Firebase 項目啟用電話號碼登錄方法:

  1. 火力地堡控制台,打開驗證部分。
  2. 登錄方法頁,使電話號碼登錄方法。

Firebase 的電話號碼登錄請求配額足夠高,大多數應用不會受到影響。但是,如果您需要使用電話身份驗證登錄大量用戶,則可能需要升級定價計劃。請參閱定價頁面。

啟用應用驗證

要使用電話號碼身份驗證,Firebase 必須能夠驗證電話號碼登錄請求是否來自您的應用。 Firebase 身份驗證有兩種方式來實現這一點:

  • 安全網:如果用戶安裝了與谷歌播放服務的設備和火力地堡認證可以驗證設備為合法與Android的安全網,手機號碼登錄才能繼續。
  • 啟用 SafetyNet 以用於 Firebase 身份驗證:

    1. 在谷歌雲端控制台,使Android的DeviceCheck API為您的項目。將使用默認的 Firebase API 密鑰,並且需要被允許訪問 DeviceCheck API。
    2. 如果您還沒有指定您的應用程序的SHA-256指紋,從這樣做設置頁面的火力地堡控制台。請參閱驗證您的客戶,了解如何讓你的應用程序的SHA-256指紋的細節。
  • 驗證碼驗證:在這種安全網不能使用,例如當用戶沒有谷歌播放服務的支持,或在模擬器上測試您的應用程序時的情況下,火力地堡驗證使用驗證碼驗證完成手機登錄流程。 reCAPTCHA 挑戰通常可以在用戶無需解決任何問題的情況下完成。請注意,此流程要求 SHA-1 與您的應用程序相關聯。

向用戶手機發送驗證碼

要啟動電話號碼登錄,請向用戶顯示一個界​​面,提示他們輸入電話號碼。法律要求各不相同,但作為最佳實踐並為您的用戶設定期望,您應該通知他們,如果他們使用電話登錄,他們可能會收到一條 SMS 消息進行驗證,並且適用標準費率。

然後,通過他們的電話號碼給PhoneAuthProvider.verifyPhoneNumber方法來請求火力地堡驗證用戶的電話號碼。例如:

爪哇

PhoneAuthOptions options = 
  PhoneAuthOptions.newBuilder(mAuth) 
      .setPhoneNumber(phoneNumber)       // Phone number to verify
      .setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit
      .setActivity(this)                 // Activity (for callback binding)
      .setCallbacks(mCallbacks)          // OnVerificationStateChangedCallbacks
      .build();
  PhoneAuthProvider.verifyPhoneNumber(options);     

科特林+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)

verifyPhoneNumber方法是重入:如果你多次,如在活動中我們把它onStart方法中, verifyPhoneNumber除非原始請求超時方法不會發送第二短信。

如果您的應用程序在用戶登錄之前關閉(例如,當用戶正在使用他們的 SMS 應用程序時),您可以使用此行為來恢復電話號碼登錄過程。你打電話後verifyPhoneNumber ,設置一個標誌,指示驗證正在進行中。然後,保存在您的活動的標誌onSaveInstanceState方法,並在恢復標誌onRestoreInstanceState 。最後,在活動的onStart方法,檢查是否驗證已在進行中,如果是這樣,請致電verifyPhoneNumber一次。一定要清除該標誌時,驗證完成或失敗(見驗證回調)。

為了方便地處理屏幕旋轉和活動重新啟動的其他情況下,通過你的活動到verifyPhoneNumber方法。 Activity 停止時回調會自動分離,因此您可以在回調方法中自由編寫 UI 轉換代碼。

由火力地堡發送的短消息也可以通過通過指定AUTH語言本地化setLanguageCode您驗證實例方法。

爪哇

auth.setLanguageCode("fr");
// To apply the default app language instead of explicitly setting it.
// auth.useAppLanguage();

科特林+KTX

auth.setLanguageCode("fr")
// To apply the default app language instead of explicitly setting it.
// auth.useAppLanguage()

當你調用PhoneAuthProvider.verifyPhoneNumber ,你還必須提供的一個實例OnVerificationStateChangedCallbacks ,其中包含用於處理請求的結果的回調函數的實現。例如:

爪哇

mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

    @Override
    public void onVerificationCompleted(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(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
        }

        // 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;
    }
};

科特林+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
        }

        // 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
    }
}

驗證回調

在大多數應用程序,需要實現onVerificationCompletedonVerificationFailedonCodeSent回調。你也可以實現onCodeAutoRetrievalTimeOut ,這取決於你的應用程序的要求。

onVerificationCompleted(PhoneAuthCredential)

這個方法在兩種情況下被調用:

  • 即時驗證:在某些情況下,無需發送或輸入驗證碼即可即時驗證電話號碼。
  • 自動檢索:在某些設備上,Google Play 服務可以自動檢測傳入的驗證短信並在無需用戶操作的情況下執行驗證。 (此功能可能與某些載波不可用。)此使用SMS獵犬API ,其中包括在所述的SMS消息的末尾的11字符的散列。
在這兩種情況下,用戶的電話號碼已經被成功驗證,並且可以使用PhoneAuthCredential則傳遞給回調對象在用戶登錄

onVerificationFailed(FirebaseException)

調用此方法是為了響應無效的驗證請求,例如指定無效電話號碼或驗證碼的請求。

onCodeSent(字符串驗證 ID,PhoneAuthProvider.ForceResendingToken)

可選的。在通過短信將驗證碼發送到提供的電話號碼後調用此方法。

調用此方法時,大多數應用程序會顯示一個 UI,提示用戶鍵入 SMS 消息中的驗證碼。 (同時,自動驗證可能會繼續在後台運行。)然後,用戶類型後的驗證碼,您可以使用驗證碼,並傳遞給該方法創建一個驗證ID PhoneAuthCredential對象,您可以依次使用來登錄用戶。然而,一些應用程序可能會等到onCodeAutoRetrievalTimeOut正在顯示的驗證碼UI之前調用(不推薦)。

onCodeAutoRetrievalTimeOut(String verifyId)

可選的。指定到該超時持續時間後,此方法被稱為verifyPhoneNumber而不已通過onVerificationCompleted觸發第一。在沒有 SIM 卡的設備上,此方法會立即調用,因為 SMS 自動檢索是不可能的。

一些應用程序會阻止用戶輸入,直到自動驗證期超時,然後才會顯示一個 UI,提示用戶輸入 SMS 消息中的驗證碼(不推薦)。

創建 PhoneAuthCredential 對象

用戶輸入的驗證代碼,火力地堡發送到用戶的電話之後,創建一個PhoneAuthCredential對象,使用的驗證碼和已傳遞到所述驗證ID onCodeSentonCodeAutoRetrievalTimeOut回調。 (當onVerificationCompleted被調用時,你會得到一個PhoneAuthCredential直接對象,所以你可以跳過此步驟。)

要創建PhoneAuthCredential對象,調用PhoneAuthProvider.getCredential

爪哇

PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);

科特林+KTX

val credential = PhoneAuthProvider.getCredential(verificationId!!, code)

登錄用戶

你之後獲得一個PhoneAuthCredential對象,無論是在onVerificationCompleted回調或致電PhoneAuthProvider.getCredential ,通過將完成登錄流程PhoneAuthCredential對象FirebaseAuth.signInWithCredential

爪哇

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
                        }
                    }
                }
            });
}

科特林+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
                }
            }
}

使用虛構的電話號碼進行測試

您可以通過 Firebase 控制台為開發設置虛構的電話號碼。使用虛構的電話號碼進行測試具有以下好處:

  • 在不消耗您的使用配額的情況下測試電話號碼身份驗證。
  • 在不發送實際 SMS 消息的情況下測試電話號碼身份驗證。
  • 使用相同的電話號碼運行連續測試而不會受到限制。如果審閱者碰巧使用相同的電話號碼進行測試,這可以最大限度地降低 App Store 審閱過程中被拒絕的風險。
  • 無需任何額外工作即可在開發環境中輕鬆測試,例如無需 Google Play 服務即可在 iOS 模擬器或 Android 模擬器中進行開發的能力。
  • 編寫集成測試,而不會被通常應用於生產環境中真實電話號碼的安全檢查所阻止。

虛構的電話號碼必須滿足以下要求:

  1. 確保您使用的電話號碼確實是虛構的,並且不存在。 Firebase 身份驗證不允許您將真實用戶使用的現有電話號碼設置為測試號碼。一種選擇是使用555前綴號碼作為美國測試的電話號碼,例如:+1 650-555-3434
  2. 電話號碼的格式必須正確以適應長度和其他限制。他們仍將通過與真實用戶電話號碼相同的驗證。
  3. 您最多可以添加 10 個電話號碼進行開發。
  4. 使用難以猜測的測試電話號碼/代碼並經常更改它們。

創建虛構的電話號碼和驗證碼

  1. 火力地堡控制台,打開驗證部分。
  2. 在登錄方法選項卡,使手機供應商,如果你還沒有準備好。
  3. 打開進行測試手風琴菜單的電話號碼
  4. 提供要測試的電話號碼,例如:+1 650-555-3434。
  5. 提供一種用於特定數目的6位數驗證碼,例如:654321。
  6. 添加的數量。如果需要,您可以通過將鼠標懸停在相應行上並單擊垃圾桶圖標來刪除電話號碼及其代碼。

手動測試

您可以直接開始在您的應用程序中使用虛構的電話號碼。這使您可以在開發階段執行手動測試,而不會遇到配額問題或限制。您還可以在未安裝 Google Play 服務的情況下直接從 iOS 模擬器或 Android 模擬器進行測試。

當您提供虛構的電話號碼並發送驗證碼時,不會發送實際的 SMS。相反,您需要提供之前配置的驗證碼才能完成登錄。

登錄完成後,會使用該電話號碼創建 Firebase 用戶。用戶具有與真實電話號碼用戶相同的行為和屬性,並且可以以相同的方式訪問實時數據庫/Cloud Firestore 和其他服務。在此過程中鑄造的 ID 令牌具有與真實電話號碼用戶相同的簽名。

另一種選擇是設置一個測試角色通過自定義的權利要求對這些用戶他們區分假冒的用戶,如果你想進一步限制訪問。

手動觸發的驗證碼流用於測試,使用forceRecaptchaFlowForTesting()方法。

// Force reCAPTCHA flow
FirebaseAuth.getInstance().getFirebaseAuthSettings().forceRecaptchaFlowForTesting();

集成測試

除了手動測試之外,Firebase 身份驗證還提供 API 來幫助編寫電話身份驗證測試的集成測試。這些 API 通過禁用 Web 中的 reCAPTCHA 要求和 iOS 中的靜默推送通知來禁用應用驗證。這使得在這些流程中進行自動化測試成為可能並且更容易實現。此外,它們有助於提供在 Android 上測試即時驗證流程的能力。

在Android上,調用setAppVerificationDisabledForTesting()的前signInWithPhoneNumber通話。這會自動禁用應用驗證,讓您無需手動解決即可傳遞電話號碼。請注意,即使禁用了 reCAPTCHA 和/或 SafetyNet,使用真實電話號碼仍無法完成登錄。此 API 只能使用虛構的電話號碼。

// Turn off phone auth app verification.
FirebaseAuth.getInstance().getFirebaseAuthSettings()
   .setAppVerificationDisabledForTesting();

調用verifyPhoneNumber用虛構的數字觸發onCodeSent回調,在其中你需要提供相應的驗證碼。這允許在 Android 模擬器中進行測試。

爪哇

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(String verificationId,
                                   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(PhoneAuthCredential phoneAuthCredential) {
                // Sign in with the credential
                // ...
            }

            @Override
            public void onVerificationFailed(FirebaseException e) {
                // ...
            }
        })
        .build();
PhoneAuthProvider.verifyPhoneNumber(options);

科特林+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)

此外,您還可以通過設置在虛構的數量,並通過調用自動檢索其相應的驗證碼測試Android中自動檢索流setAutoRetrievedSmsCodeForPhoneNumber

verifyPhoneNumber被調用時,它會觸發onVerificationCompletedPhoneAuthCredential直接。這僅適用於虛構的電話號碼。

將您的應用程序發佈到 Google Play 商店時,請確保此功能已禁用,並且您的應用程序中沒有硬編碼虛構的電話號碼。

爪哇

// 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(PhoneAuthCredential credential) {
                // Instant verification is applied and a credential is directly returned.
                // ...
            }

            // ...
        })
        .build();
PhoneAuthProvider.verifyPhoneNumber(options);

科特林+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)

下一步

用戶首次登錄後,將創建一個新用戶帳戶並將其鏈接到用戶登錄時使用的憑據(即用戶名和密碼、電話號碼或身份驗證提供商信息)。這個新帳戶作為 Firebase 項目的一部分存儲,可用於識別項目中每個應用中的用戶,無論用戶如何登錄。

  • 在您的應用程序,你可以從用戶的基本資料信息FirebaseUser對象。請參閱管理用戶

  • 在你的火力地堡實時數據庫和雲存儲安全規則,你可以得到簽署的,從用戶的唯一的用戶ID auth的變量,並用它來控制哪些數據的用戶可以訪問。

您可以允許用戶通過使用多個身份驗證提供登錄到您的應用程序連接身份驗證提供憑據到現有的用戶帳戶。

要註銷用戶,請撥打signOut

爪哇

FirebaseAuth.getInstance().signOut();

科特林+KTX

Firebase.auth.signOut()