Идентификатор пользователя Firebase получает нулевую ссылку в определенное время в той же активности - PullRequest
0 голосов
/ 11 апреля 2019

Я в своей деятельности, где пользователь может войти в OTP из firebase.Если автоматическая проверка (из службы воспроизведения) не сработала, тогда пользователь должен ввести OTP, тогда мой код работает без получения идентификатора UID, но когда происходит автоматическая проверка (onVerificationCompleted,), пользовательский идентификатор получаетNULL или я не знаю, является ли это правильным местом для проверки того, существует ли пользователь или нет. Пожалуйста, помогите мне, потому что этот проект важен для меня

   PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
    @Override
    public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {

        Toast.makeText(getApplicationContext(), "verification completed",
                Toast.LENGTH_LONG).show();

        check();


        SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
        editor.putString("text", "signed in");
        editor.apply();



       // Intent myIntent = new Intent(VerifyPhoneActivity.this, 
    MainActivity.class);
       // startActivity(myIntent);




    }

Это то, что мой полный код проверки деятельности

    package com.example.EduMangalore;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
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.firebase.FirebaseException;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseAuthInvalidCredentialsException;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.PhoneAuthCredential;
import com.google.firebase.auth.PhoneAuthProvider;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.util.concurrent.TimeUnit;

public class VerifyPhoneActivity extends AppCompatActivity {

//These are the objects needed
//It is the verification id that will be sent to the user
private String mVerificationId;
DatabaseReference mDatabase;

//The edittext to input the code
private EditText editTextCode;
final String MY_PREFS_NAME = "MyPrefsFile";

private FirebaseAuth mAuth;
String code;
String mobile;
String codesent;
public FirebaseAuth.AuthStateListener authListener;

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

    mAuth = FirebaseAuth.getInstance();
    mDatabase = FirebaseDatabase.getInstance().getReference();
    sendVerificationCode();


    findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View v) {


            verifySignInCode();


        }
    });


  }


private void verifySignInCode() {

    final EditText fd = (EditText) findViewById(R.id.et1);
    String value = fd.getText().toString();


    final EditText sd = (EditText) findViewById(R.id.et2);
    String value1 = sd.getText().toString();
    // int finalValue1=Integer.parseInt(value1);


    EditText td = (EditText) findViewById(R.id.et3);
    String value2 = td.getText().toString();


    EditText fod = (EditText) findViewById(R.id.et4);
    String value3 = fod.getText().toString();


    EditText fid = (EditText) findViewById(R.id.et5);
    String value4 = fid.getText().toString();


    EditText sid = (EditText) findViewById(R.id.et6);
    String value5 = sid.getText().toString();


    code = value + value1 + value2 + value3 + value4 + value5;


    PhoneAuthCredential credential = PhoneAuthProvider.getCredential(codesent, code);

    signInWithPhoneAuthCredential(credential);


   }


 private void check()
 {



    DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
    FirebaseUser userid = FirebaseAuth.getInstance().getCurrentUser();

    final String uid = userid.getUid();
    ref.child("Users");
    ref.child(mobile).child(uid);


    Log.d("myTag", mobile);
    Log.d("myTag", uid);


      DatabaseReference userRef = FirebaseDatabase.getInstance().getReference("Users");

       userRef.orderByChild("mobile").equalTo(mobile).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {


            if (dataSnapshot.getValue() != null) {



                Toast.makeText(getApplicationContext(), "Welcome Back",
                        Toast.LENGTH_LONG).show();

                SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
                editor.putString("text", "signed in");
                editor.apply();

                Intent myIntent = new Intent(VerifyPhoneActivity.this, MainActivity.class);
                startActivity(myIntent);




            } else {


                Intent intent = new Intent(VerifyPhoneActivity.this, Signup.class);

                intent.putExtra("mobile", mobile);

                startActivity(intent);


            }


        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });


  }



    private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @RequiresApi(api = Build.VERSION_CODES.KITKAT)
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {


                    if (task.isSuccessful()) {



                       check();


                    } else {

                        Toast.makeText(getApplicationContext(), "login faild",
                                Toast.LENGTH_LONG).show();


                        // Sign in failed, display a message and update the UI
                        // Log.w(TAG, "signInWithCredential:failure", task.getException());
                        if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
                            // The verification code entered was invalid

                            Toast.makeText(getApplicationContext(), "Please enter the correct OTP",
                                    Toast.LENGTH_LONG).show();

                        }
                    }
                }
            });
}





    PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
    @Override
    public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {

        Toast.makeText(getApplicationContext(), "verification completed",
                Toast.LENGTH_LONG).show();

        check();


        SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
        editor.putString("text", "signed in");
        editor.apply();



       // Intent myIntent = new Intent(VerifyPhoneActivity.this, MainActivity.class);
       // startActivity(myIntent);




    }





    @Override
    public void onVerificationFailed(FirebaseException e) {

        Toast.makeText(getApplicationContext(), "sending faild" + e,
                Toast.LENGTH_LONG).show();
    }

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


        Toast.makeText(getApplicationContext(), "sent",
                Toast.LENGTH_LONG).show();
        codesent = s;

    }
};

private void sendVerificationCode() {


    Intent intent = getIntent();
    mobile = intent.getStringExtra("mobile");


    Toast.makeText(getApplicationContext(), mobile,
            Toast.LENGTH_LONG).show();
    String phonenumber = "+91" + mobile;


    PhoneAuthProvider.getInstance().verifyPhoneNumber(
            phonenumber,        // Phone number to verify
            60,                 // Timeout duration
            TimeUnit.SECONDS,   // Unit of timeout
            this,               // Activity (for callback binding)
            mCallbacks);        // OnVerificationStateChangedCallbacks

 }


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