簡體   English   中英

如何使用 Firebase 發送帶有確認碼的短信?

[英]How to send SMS with confirmation code using Firebase?

我的應用中有兩組人——經理和員工。 經理可以注冊他們的員工。 基本上他們為他們填寫表格(電話號碼、全名、出生日期等)。 所有信息都保存在雲 firebase 中的employees集合中。

員工無法注冊該應用程序,他們只能“驗證他們的電話號碼”。 如果他們的電話號碼已在系統中注冊,那么他們應該會收到一條帶有確認碼的短信。 如您所見,我目前將員工信息保存在數據庫中,而不是在身份驗證部分(就像我為使用 email 和密碼登錄的經理所做的那樣)。

思路如下:

  1. 經理應注冊志願者的電話號碼(據我了解身份驗證部分)。
  2. 員工安裝應用程序並在登錄部分輸入他們的電話號碼。 應向他們發送另一條短信,其中包含員工應填寫的確認碼。

所以我有兩個問題:

  1. 除了在 firebase 雲中添加員工之外,我應該如何添加員工?
  2. 當員工嘗試使用電話號碼登錄時,我如何檢查他是否已經在系統中,如果沒有,打印敬酒什么的?
  3. 一個更難的問題是我應該如何發送短信確認碼?

另外我想提一下,我不使用 FirebaseUI(我們有一個自定義的登錄視圖)。

您可以這樣做,使用此代碼發送 otp:

private String verificationCode = "";
        
private PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallback;

sendOtp();
varifyMobile();


private void sendOtp() {
    auth = FirebaseAuth.getInstance();
    mCallback = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
        @Override
        public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
        }

        @Override
        public void onVerificationFailed(FirebaseException e) {
            pd.dismiss();
            Toast.makeText(OtpVerificationActivity.this, "OTP Sent failed, Please click on Resend OTP.", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onCodeSent(String s, PhoneAuthProvider.ForceResendingToken forceResendingToken) {
            super.onCodeSent(s, forceResendingToken);
            pd.dismiss();
            verificationCode = s;
            Toast.makeText(OtpVerificationActivity.this, "OTP has been sent on " + mobile, Toast.LENGTH_SHORT).show();
        }
    };
}

private void varifyMobile() {
    PhoneAuthProvider.getInstance().verifyPhoneNumber(
            "+91" + mobile,                     // Phone number to verify
            2,                           // Timeout duration
            TimeUnit.MINUTES,                // Unit of timeout
            OtpVerificationActivity.this,        // Activity (for callback binding)
            mCallback);
}

對於驗證 Otp:

String otp = edtOtp.getText().toString();
                    PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationCode, otp);
                    SigninWithPhone(credential);

private void SigninWithPhone(PhoneAuthCredential credential) {
    auth.signInWithCredential(credential)
                    .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            if (task.isSuccessful()) {
                                Toast.makeText(OtpVerificationActivity.this, "Otp verification complete", Toast.LENGTH_SHORT).show();
                            } else {
                                pd.dismiss();
                                Toast.makeText(OtpVerificationActivity.this, "Error: " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
                            }
                        }
                    });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM