Проверка Firebase Sms по номеру телефона не работает вручную - PullRequest
1 голос
/ 23 января 2020

Я использую проверку Firebase Sms, которая отправляет OTP на указанный номер. Но проблема в том, что он автоматически определяет номер, если номер находится внутри телефона. Но я хочу ввести любой номер и, когда я введу номер, и я могу получить доступ к следующему действию, вручную введя otp. Но в моем случае otp получен любым числом (я имею в виду вне устройства), но когда я ввожу код вручную в тексте редактирования, приложение вылетает.

Активность, в которой указан номер, и Otp отправляет на номер


package com.example.bohon_final__001;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.os.StrictMode;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Random;

public class LoginActivity extends AppCompatActivity {

    private EditText LoginPhone;
    private Button LoginConfirmButton;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        LoginPhone = (EditText) findViewById(R.id.PhoneNumberLogin);
        LoginConfirmButton = (Button) findViewById(R.id.Loginbutton);
        Button registerbutton=(Button)findViewById(R.id.RegisterButton);


        LoginConfirmButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String number=LoginPhone.getText().toString();
                if(number.isEmpty() || number.length()<11)
                {
                    LoginPhone.setError("Valied Number Required");
                    LoginPhone.requestFocus();
                }

                else {

                    String PhoneNumber = "+88" + number;
                    Intent firstintent = new Intent(LoginActivity.this, CodeConfirm.class);
                    firstintent.putExtra("PhoneNumber", PhoneNumber);
                    startActivity(firstintent);
                }
            }
        });

        registerbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(LoginActivity.this,User_Registration.class));
            }
        });





    }
}


Активность, которая получает OTP


package com.example.bohon_final__001;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.android.gms.tasks.TaskExecutors;
import com.google.firebase.FirebaseException;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.PhoneAuthCredential;
import com.google.firebase.auth.PhoneAuthProvider;

import java.util.concurrent.TimeUnit;

public class CodeConfirm extends AppCompatActivity {


    EditText Otpverify;
    int s;
    private String VerificationCode;
    Button confirmbutton,test;
    private FirebaseAuth mAuth;
    String code,PhoneNumber;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_code_confirm);

        Otpverify = (EditText) findViewById(R.id.ConfirmCode);
        test=(Button)findViewById(R.id.testbutton);
        mAuth= FirebaseAuth.getInstance();
        PhoneNumber = getIntent().getStringExtra("PhoneNumber");


        SendVerificationCode(PhoneNumber);

        confirmbutton=(Button)findViewById(R.id.ConfirmButton);

        test.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent nactivity=new Intent(CodeConfirm.this,Current_Location.class);
                nactivity.putExtra("Phone",PhoneNumber);
                startActivity(nactivity);

            }
        });




        confirmbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                 code=Otpverify.getText().toString().trim();

                if(code.isEmpty() || code.length()<6)
                {
                    Otpverify.setError("Enter the OTP properly");
                    Otpverify.requestFocus();

                }
                Verifycode(code);
            }
        });





    }

    private void Verifycode(String code) {
        PhoneAuthCredential credential=PhoneAuthProvider.getCredential(VerificationCode,code);
        Signin(credential);
    }

    private void Signin(PhoneAuthCredential credential) {

        mAuth.signInWithCredential(credential).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {

                if(task.isSuccessful())
                {
                    Intent WorkingSwitch=new Intent(CodeConfirm.this,Current_Location.class);
                    WorkingSwitch.putExtra("Phone",PhoneNumber);
                    WorkingSwitch.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                    startActivity(WorkingSwitch);
                }

            }
        });

    }

    private void SendVerificationCode(String Number) {

        PhoneAuthProvider.getInstance().verifyPhoneNumber(
                Number,
                60,
                TimeUnit.SECONDS,
                TaskExecutors.MAIN_THREAD,
                mCallBack
        );

    }

    private PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallBack = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

        @Override
        public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {

            String code=phoneAuthCredential.getSmsCode();
            if(code!=null)
            {
                Verifycode(code);
            }

        }

        @Override
        public void onVerificationFailed(FirebaseException e) {

            Toast.makeText(CodeConfirm.this,e.getMessage(),Toast.LENGTH_LONG).show();

        }

        @Override
        public void onCodeSent(String s, PhoneAuthProvider.ForceResendingToken forceResendingToken) {
            super.onCodeSent(s, forceResendingToken);
            VerificationCode=s;
        }
    };

}

Я видел похожий вопрос, но ответ не удовлетворяет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...