2017-08-04 49 views
0

这是我的活动,显示验证码和电话号码的编辑文本字段。点击开始按钮我没有得到任何回应。 在此先感谢。如何为使用电话号码的Android进行Firebase身份验证?

EditText mPhoneNumberField,mVerificationField; 按钮mStartButton,mVerifyButton,mResendButton;

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

private static final String TAG = "PhoneAuthActivity"; 

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

    mPhoneNumberField = (EditText) findViewById(R.id.field_phone_number); 
    mVerificationField = (EditText) findViewById(R.id.field_verification_code); 

    mStartButton = (Button) findViewById(R.id.button_start_verification); 
    mVerifyButton = (Button) findViewById(R.id.button_verify_phone); 
    mResendButton = (Button) findViewById(R.id.button_resend); 

    mStartButton.setOnClickListener(this); 
    mVerifyButton.setOnClickListener(this); 
    mResendButton.setOnClickListener(this); 

    mAuth = FirebaseAuth.getInstance(); 
    mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() { 
     @Override 
     public void onVerificationCompleted(PhoneAuthCredential credential) { 
      Log.d(TAG, "onVerificationCompleted:" + credential); 
      signInWithPhoneAuthCredential(credential); 
     } 

     @Override 
     public void onVerificationFailed(FirebaseException e) { 
      Log.w(TAG, "onVerificationFailed", e); 
      if (e instanceof FirebaseAuthInvalidCredentialsException) { 
       mPhoneNumberField.setError("Invalid phone number."); 
      } else if (e instanceof FirebaseTooManyRequestsException) { 
       Snackbar.make(findViewById(android.R.id.content), "Quota exceeded.", 
         Snackbar.LENGTH_SHORT).show(); 
      } 
     } 

     @Override 
     public void onCodeSent(String verificationId, PhoneAuthProvider.ForceResendingToken token) { 
      Log.d(TAG, "onCodeSent:" + verificationId); 
      mVerificationId = verificationId; 
      mResendToken = token; 
     } 
    }; 
} 

private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) { 
    mAuth.signInWithCredential(credential) 
      .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
       @Override 
       public void onComplete(@NonNull Task<AuthResult> task) { 
        if (task.isSuccessful()) { 
         Log.d(TAG, "signInWithCredential:success"); 
         FirebaseUser user = task.getResult().getUser(); 
         startActivity(new Intent(PhoneNumberActivity.this, MainActivity.class)); 
         finish(); 
        } else { 
         Log.w(TAG, "signInWithCredential:failure", task.getException()); 
         if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) { 
          mVerificationField.setError("Invalid code."); 
         } 
        } 
       } 
      }); 
} 

private void startPhoneNumberVerification(String phoneNumber) { 
    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 resendVerificationCode(String phoneNumber, 
            PhoneAuthProvider.ForceResendingToken token) { 
    PhoneAuthProvider.getInstance().verifyPhoneNumber(
      phoneNumber,  // Phone number to verify 
      60,     // Timeout duration 
      TimeUnit.SECONDS, // Unit of timeout 
      this,    // Activity (for callback binding) 
      mCallbacks,   // OnVerificationStateChangedCallbacks 
      token);    // ForceResendingToken from callbacks 
} 

private boolean validatePhoneNumber() { 
    String phoneNumber = mPhoneNumberField.getText().toString(); 
    if (TextUtils.isEmpty(phoneNumber)) { 
     mPhoneNumberField.setError("Invalid phone number."); 
     return false; 
    } 
    return true; 
} 
@Override 
public void onStart() { 
    super.onStart(); 
    FirebaseUser currentUser = mAuth.getCurrentUser(); 
    if (currentUser != null) { 
     startActivity(new Intent(PhoneNumberActivity.this, MainActivity.class)); 
     finish(); 
    } 
} 

@Override 
public void onClick(View view) { 
    switch (view.getId()) { 
     case R.id.button_start_verification: 
      if (!validatePhoneNumber()) { 
       return; 
      } 
      startPhoneNumberVerification(mPhoneNumberField.getText().toString()); 
      break; 
     case R.id.button_verify_phone: 
      String code = mVerificationField.getText().toString(); 
      if (TextUtils.isEmpty(code)) { 
       mVerificationField.setError("Cannot be empty."); 
       return; 
      } 

      verifyPhoneNumberWithCode(mVerificationId, code); 
      break; 
     case R.id.button_resend: 
      resendVerificationCode(mPhoneNumberField.getText().toString(), mResendToken); 
      break; 
    } 

} 

这是我的代码。但它给出以下例外: com.google.firebase.FirebaseNetworkException:发生网络错误(例如超时,连接中断或无法访问的主机)。

回答

0

尝试 FirebaseUser currentUser = FirebaseAuth.getInstance()getCurrentUser()

代替 FirebaseUser currentUser = mAuth.getCurrentUser的();

相关问题