2017-08-26 140 views

回答

0
  1. 在Firebase身份驗證登錄方法中啓用電話身份驗證。

  2. 在onCreate方法中過去這段代碼。

    mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() { 
    
        @Override 
        public void onVerificationCompleted(PhoneAuthCredential credential) { 
         // This callback will be invoked in two situations: 
         // 1 - Instant verification. In some cases the phone number can be instantly 
         //  verified without needing to send or enter a verification code. 
         // 2 - Auto-retrieval. On some devices Google Play services can automatically 
         //  detect the incoming verification SMS and perform verificaiton without 
         //  user action. 
         Log.d(TAG, "onVerificationCompleted:" + credential); 
    
         //signInWithPhoneAuthCredential(credential); 
        } 
    
        @Override 
        public void onVerificationFailed(FirebaseException e) { 
         // This callback is invoked in an invalid request for verification is made, 
         // for instance if the the phone number format is not valid. 
         Log.w(TAG, "onVerificationFailed", e); 
    
         Toast.makeText(SignUp.this, e.getMessage(), Toast.LENGTH_LONG).show(); 
    
         if (e instanceof FirebaseAuthInvalidCredentialsException) { 
          // Invalid request 
          // ... 
         } else if (e instanceof FirebaseTooManyRequestsException) { 
          // The SMS quota for the project has been exceeded 
          // ... 
         } 
    
         // Show a message and update the UI 
         // ... 
        } 
    
        @Override 
        public void onCodeSent(String verificationId, 
              PhoneAuthProvider.ForceResendingToken token) { 
         // The SMS verification code has been sent to the provided phone number, we 
         // now need to ask the user to enter the code and then construct a credential 
         // by combining the code with a verification ID. 
         Log.d(TAG, "onCodeSent:" + verificationId); 
    
         // Save verification ID and resending token so we can use them later 
         mVerificationId = verificationId; 
         mResendToken = token; 
    
         // ... 
        } 
    }; 
    

我關掉自動驗證。用戶始終必須輸入代碼。

從用戶
  • 發送碼到用戶

    String phoneNumber = phoneNumberET.getText().toString(); 
    PhoneAuthProvider.getInstance().verifyPhoneNumber(
         phoneNumber,  // Phone number to verify 
         60,     // Timeout duration 
         TimeUnit.SECONDS, // Unit of timeout 
         this,    // Activity (for callback binding) 
         mCallbacks);  // OnVerificationStateChangedCallbacks 
    
  • 取代碼,並將其發送到驗證

    String code = mCodeEt.getText().toString(); 
    PhoneAuthCredential credential = PhoneAuthProvider.getCredential(mVerificationId, 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()) { 
            // Sign in success, update UI with the signed-in user's information 
            Log.d(TAG, "signInWithCredential:success"); 
    
            FirebaseUser user = task.getResult().getUser(); 
            //Sucess do what u want to do 
            // [START_EXCLUDE] 
            //updateUI(STATE_SIGNIN_SUCCESS, user); 
            // [END_EXCLUDE] 
           } else { 
            // 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 
             // [START_EXCLUDE silent] 
             mCodeEt.setError("Invalid code."); 
             // [END_EXCLUDE] 
            } 
            // [START_EXCLUDE silent] 
            // Update UI 
            //updateUI(STATE_SIGNIN_FAILED); 
            // [END_EXCLUDE] 
           } 
          } 
         }); 
         } 
    
  • 所有代碼取自firebase doc ....

    +0

    這已經完成,但仍然無法使其工作 –

    +0

    我昨天做到了,工作正常。你有什麼錯誤嗎? –