我的依赖
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 但是,我仍然有这个问题
能否请您告诉我这个实现出了什么问题以及需要纠正的地方?