Код: Выделить всё
private FirebaseAuth mAuth;
private EditText edtPhone, edtOTP;
private String verificationId;
private String phone;
private String otp;
private FirebaseUser mUser;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
mAuth = FirebaseAuth.getInstance();
mAuth.setLanguageCode("en");
mAuth.useAppLanguage();
mUser=mAuth.getCurrentUser();
if (FirebaseApp.getApps(this).isEmpty()) {
FirebaseApp.initializeApp(this);
}
FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance();
firebaseAppCheck.installAppCheckProviderFactory(
DebugAppCheckProviderFactory.getInstance()
);
if (mAuth.getCurrentUser() != null) {
navigateToSchoolActivity();
return;
}
edtPhone = findViewById(R.id.idPhone);
edtOTP = findViewById(R.id.idPassword);
Button generate = findViewById(R.id.idSubmit);
Button verify= findViewById(R.id.idVerify);
generate.setOnClickListener(v -> {
phone = edtPhone.getText().toString().trim();
if (validatePhoneNumber(phone)) {
sendVerificationCode(phone);
}
});
verify.setOnClickListener(v -> {
otp = edtOTP.getText().toString().trim();
if (!TextUtils.isEmpty(otp)) {
verifyCode(otp);
} else {
showToast("Please enter OTP");
}
});
}
private boolean validatePhoneNumber(String phone) {
if (TextUtils.isEmpty(phone)) {
showToast("Enter a valid Number.");
return false;
} else if (!phone.matches("^\\+[1-9]{1}[0-9]{3,14}$")) {
showToast("Enter a valid phone number in international format (e.g., +1234567890).");
return false;
}
return true;
}
private void showToast(String message) {
Toast.makeText(a0_LoginActivity.this, message, Toast.LENGTH_SHORT).show();
}
private void navigateToSchoolActivity() {
Intent intent = new Intent(a0_LoginActivity.this, a1_SchoolActivity.class);
startActivity(intent);
finish();
}
private void sendVerificationCode(String number) {
PhoneAuthOptions options =
PhoneAuthOptions.newBuilder(mAuth)
.setPhoneNumber(number)
.setTimeout(60L, TimeUnit.SECONDS)
.setActivity(this)
.setCallbacks(mCallbacks)
.build();
PhoneAuthProvider.verifyPhoneNumber(options);
}
private final PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallbacks =
new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
@Override
public void onCodeSent(@NonNull String s, @NonNull PhoneAuthProvider.ForceResendingToken token) {
super.onCodeSent(s, token);
verificationId = s;
showToast("OTP sent successfully.");
}
@Override
public void onVerificationCompleted(@NonNull PhoneAuthCredential credential) {
signInWithCredential(credential);
}
@Override
public void onVerificationFailed(@NonNull FirebaseException e) {
Log.e("Verification Failed", "Error: " + e.getMessage());
showToast("Verification failed: " + e.getMessage());
}
};
private void verifyCode(String code) {
if (verificationId != null) {
PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);
signInWithCredential(credential);
} else {
showToast("Verification ID not found. Try again.");
}
}
private void signInWithCredential(PhoneAuthCredential credential) {
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()) {
Log.d(TAG, "signInWithCredential:success");
mUser = task.getResult().getUser();
navigateToSchoolActivity();
} else {
Log.w(TAG, "signInWithCredential:failure", task.getException());
handleAuthFailure(task);
}
}
});
}
private void handleAuthFailure(Task task) {
if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
showToast("Invalid OTP");
} else {
showToast("Authentication Failed");
}
}
}
Я попробовал ввести gpt в чат, чтобы решить эту проблему. На самом деле проблема связана с функцией проверки приложения, sha1, sha256, включение аутентификации телефона в Firebase и зависимостей для аутентификации Firebase, проверки приложений, отправки OTP и т. д. Я попробовал все решения, которые нашел в поиске Google, Gemini,chatgpt и copilot. Все они предложили мне включить аутентификацию телефона, добавить некоторые зависимости , импорт и код проверки приложения и использует разрешения, такие как Интернет и SMS. Я пробовал их не менее 50 раз. Снова и снова отображается одна и та же ошибка: «Это приложение не имеет права использовать токен проверки приложения Firebase, недействителен. или слишком много запросов». или этот номер был заблокирован и т. д. Я уже подписался на план Blaze. Вначале приложение принимало любые номера для входа в систему, и когда я почувствовал удовлетворение, я загрузил его в Play Store. Все три моих приложения реагируют на одну и ту же проблему. Я не знаю. Не знаю, как с этим справиться. Любая помощь с практическими предложениями приветствуется. Я прочитал слишком много теории, поэтому мне не нужны предложения типа лекций.
Подробнее здесь: https://stackoverflow.com/questions/790 ... ndroid-app
Мобильная версия