无法通过 Firebase SMS 身份验证/验证进行验证

时间:2020-12-22 12:55:41

标签: java android firebase-authentication

我的依赖

implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.2.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.google.firebase:firebase-auth:20.0.1'
testImplementation 'junit:junit:4.13.1'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'

implementation 'com.google.android.material:material:1.3.0-alpha04'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.cardview:cardview:1.0.0'

implementation 'com.mikhaellopez:circularimageview:3.2.0'
implementation 'com.github.bumptech.glide:glide:4.11.0'

implementation platform('com.google.firebase:firebase-bom:26.2.0')
implementation 'com.google.firebase:firebase-auth'
implementation 'com.google.android.gms:play-services-safetynet:17.0.0'
implementation 'androidx.browser:browser:1.3.0'

我的登录代码

public class PhoneLoginActivity extends AppCompatActivity {
private ActivityPhoneLoginBinding binding;
private static String TAG = "PhoneLoginActivity";

private FirebaseAuth mAuth;
private String mVerificationId;
private PhoneAuthProvider.ForceResendingToken mResendToken;
private PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallbacks;

private ProgressDialog progressDialog;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    binding = DataBindingUtil.setContentView(this, R.layout.activity_phone_login);
    mAuth = FirebaseAuth.getInstance();
    progressDialog = new ProgressDialog(this);

    binding.btnNext.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (binding.btnNext.getText().toString().equals("Next")) {

                String phone = "+" + binding.edCodeCountry.getText().toString() + binding.edPhone.getText().toString();
                startPhoneNumberVerification(phone);
                FirebaseAuth.getInstance().getFirebaseAuthSettings().forceRecaptchaFlowForTesting(true);
            } else {
                progressDialog.setMessage("Verifying...");
                progressDialog.show();
                verifyPhoneNumberWithCode(mVerificationId, binding.edCode.getText().toString());
            }
        }
    });

    mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

        @Override
        public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential) {
            Log.d(TAG, "onVerificationCompleted: Complete");
            signInWithPhoneAuthCredential(phoneAuthCredential);
            progressDialog.dismiss();
        }

        @Override
        public void onVerificationFailed(@NonNull FirebaseException e) {
            Log.d(TAG, "onVerificationFailed: " + e.getMessage());
        }

        @Override
        public void onCodeSent(@NonNull String verificationId,
                               @NonNull PhoneAuthProvider.ForceResendingToken token) {

            Log.d(TAG, "onCodeSent: " + verificationId);


            mVerificationId = verificationId;
            mResendToken = token;

            binding.btnNext.setText("Confirm");
            progressDialog.dismiss();

        }
    };
}

private void startPhoneNumberVerification(String phoneNumber) {

    progressDialog.setMessage("Send code to : " + phoneNumber);
    progressDialog.show();
    PhoneAuthProvider.getInstance().verifyPhoneNumber(
            phoneNumber,        // Phone number to verify
            60,                 // Timeout duration
            TimeUnit.SECONDS,   // Unit of timeout
            this,               // Activity (for callback binding)
            mCallbacks);        // OnVerificationStateChangedCallbacks

}

private void verifyPhoneNumberWithCode(String verificationId, String code) {

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

private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {

                        progressDialog.dismiss();
                        Log.d(TAG, "signInWithCredential:success");
                        FirebaseUser user = task.getResult().getUser();
                        startActivity(new Intent(PhoneLoginActivity.this, MainActivity.class));

                    } else {

                        progressDialog.dismiss();
                        Log.w(TAG, "signInWithCredential:failure", task.getException());
                        if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {

                            Log.d(TAG, "onComplete: Error Code");
                            return;

                        }
                    }
                }
            });
}

我的 XML

<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/custom_background"
    tools:context=".view.auth.PhoneLoginActivity">
    <LinearLayout
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="15dp">
        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="15dp"
            android:layout_weight="1"
            android:gravity="center_horizontal"
            android:text="Enter your Phone Number"
            android:textColor="@color/selected_text_color"
            android:textSize="16sp" />
        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@android:color/transparent"
            android:src="@drawable/ic_baseline_more_vert_24" />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/toolbar"
        android:gravity="center_horizontal"
        android:orientation="vertical"
        android:padding="20dp">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:gravity="center_horizontal"
            android:orientation="horizontal">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="+"
                android:textColor="@color/text_color"
                android:textSize="16sp" />
            <EditText
                android:id="@+id/ed_code_country"
                android:layout_width="50dp"
                android:layout_height="wrap_content"
                android:gravity="end"
                android:hint="XXXX(country code eg +92 +91 etc)"
                android:inputType="number"
                android:maxLength="5"
                android:maxLines="1"
                android:textColor="@color/white"
                android:textColorHint="@color/text_color" />
            <EditText
                android:id="@+id/ed_phone"
                android:layout_width="200dp"
                android:layout_height="wrap_content"
                android:hint="Phone Number"
                android:inputType="phone"
                android:maxLines="1"
                android:textColor="@color/white"
                android:textColorHint="@color/text_color" />
        </LinearLayout>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="15dp"
            android:text="Carrier SMS charges may apply"
            android:textColor="@color/text_color"
            android:textSize="16sp"
            android:layout_marginBottom="5dp"/>
        <EditText
            android:id="@+id/ed_code"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:hint="Enter Code"
            android:inputType="number"
            android:textColor="@color/white"
            android:textColorHint="@color/text_color"
            android:maxLength="6"/>
        <!--  android:visibility="gone" />-->
    </LinearLayout>
    <Button
        android:id="@+id/btn_next"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="30dp"
        android:background="@drawable/custom_button_background"
        android:text="Next"
        android:textColor="@color/selected_text_color" />
</RelativeLayout>

当我输入我的电话号码并单击按钮时,它会将我带到浏览器,在链接框中,有我的应用程序名称和其他 firebase 内容,它说“验证你不是机器人”,然后它关闭.之后我没有收到代码,我在控制台中启用了电话验证。Firebase 但是,我仍然有这个问题

能否请您告诉我这个实现出了什么问题以及需要纠正的地方?

0 个答案:

没有答案