2017-05-03 80 views
1

我尝试使用数字进行身份验证(SMS /电话验证),然后在其回调模块成功()上调用Firebase自定义令牌身份验证。所有的好,数字作品 - >火力地堡发送的验证,实际上在包厢的用户,但火力地堡的onComplete回调()没有被调用。如果我叫signInWithCustomToken()的情况下直接通过位数去,它像它应该,的onComplete()它被称为所有。问题是什么? 以下是我在我的的onCreate()Firebase自定义令牌身份验证回调未调用

AuthConfig.Builder builder = new AuthConfig.Builder(); 
    builder.withAuthCallBack(new AuthCallback() { 
     @Override 
     public void success(DigitsSession session, String phoneNumber) { 
      signInWithCustomToken(); 
     } 

     @Override 
     public void failure(DigitsException exception) { 
     } 
    }); 

    authConfigDigits = builder.build(); 

    Button digitsButton = (Button) findViewById(R.id.auth_button); 
    digitsButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Digits.authenticate(authConfigDigits); 
     } 
    }); 

,然后我有自定义的令牌身份验证方法signInWithCustomToken()本身:

private void signInWithCustomToken() { 

    String customToken = "eyJhbGciOiJSUzI1NiJ9.eyJhdWQiOiJodHRwczovL2lkZW50aXR5dG9vbGtpdC5nb29nbGVhcGlzLmNvbS9nb29nbGUuaWRlbnRpdHkuaWRlbnRpdHl0b29sa2l0LnYxLklkZW50aXR5VG9vbGtpdCIsImV4cCI6MTQ5Mzg0MDU5MiwiaWF0IjoxNDkzODM2OTkyLCJpc3MiOiJmaXJlYmFzZS1hZG1pbnNkay0xOXBqY0Btb3ZlY2VudHJhbC0zOGUzYS5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsInN1YiI6ImZpcmViYXNlLWFkbWluc2RrLTE5cGpjQG1vdmVjZW50cmFsLTM4ZTNhLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwidWlkIjoic29tZS11aWQifQ.QdyviQ8vMhpMF7VJP949PdjVBwqM4EbZGxJvhCQtsRloJdIc16FPBG_RrBp2wZivWC-z1TIx1yctdMVGsoDAk5ptp-HlNyp5n31DyfZriGgo8zbhWln4RGG4wGYb7hSxGpyvm4STOM9N7TBBKt4lCZFYdpHVbT2idhr0hipxKCC_Ubjhwbjsfxrj5h59GHSyAdjw_yigNBHEtvsUfdGfzwKn_EW5qm5OAA0icCiqjnvsvW5RkwWKo7kWxqZT87-BoHsf5JguFeLGs0Ow9lgxAS2mSuuvni5qiYdLZdOKhu204Ctsty1pyFYrAWwWdnSrTWJwdkBx9xPgsE5UlipkRQ"; 

    mFirebaseAuth.signInWithCustomToken(customToken) 
      .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
       @Override 
       public void onComplete(@NonNull Task<AuthResult> task) { 
        if (task.isSuccessful()) { 
         Log.e(TAG, "Task is successfull"); 
         openMainActivity(); 
        } else { 
         Log.e(TAG, "Task failed"); 
        } 
       } 
      }); 
} 

回答

0

我解决它现在通过延迟signInWithCustomToken()的通话。 我不知道为什么它不工作,可能是某种形式的比赛,但改变:

@Override 
    public void success(DigitsSession session, String phoneNumber) { 
     signInWithCustomToken(); 
    } 

有:

@Override 
     public void success(DigitsSession session, String phoneNumber) { 
      final Handler handler = new Handler(); 
      handler.postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        //100ms delay 
        signInWithCustomToken(); 
       } 
      }, 100); 

     } 

解决了这一问题。如果有人能解释为什么,我会非常感激。

相关问题