2

我正在製作一個聊天應用並使用firebase電話授權和quickblox聊天API。Firebase訪問令牌在4到5小時內過期

我的代碼是:

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("test", "signInWithCredential:success"); 
         FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser(); 

         mUser.getToken(false).addOnCompleteListener(new OnCompleteListener<GetTokenResult>() { 
          @Override 
          public void onComplete(@NonNull Task<GetTokenResult> task) { 
           if(task.isSuccessful()){ 
            String m=task.getResult().getToken(); 
            signIn(m); 
           } 
          } 
         }); 


public void signIn(String token){ 
     QBUsers.signInUsingFirebase(projectId, token).performAsync(new QBEntityCallback<QBUser>() { 
     @Override 
     public void onSuccess(QBUser user, Bundle args) { 

      messenger.com.nowchat.helper.DataHolder.getInstance().setSignInQbUser(user); 
      Intent intent = new Intent(Registration.this, WelcomeProfile.class); 
      startActivity(intent); 
      finish(); 
     } 
} 

但問題是,我的令牌4〜5小時後過期。當我清除緩存或重新安裝應用程序,然後再運行5個小時。

+0

它可以過期。你有什麼問題呢?你必須更新它每一個啓動應用程序或如此 –

回答

2

可以使用QBSessionListener聽QBSession狀態。因此,在回調onProviderSessionExpired(String provider)中,您可以獲取當前的Firebase標記並續訂QBSession。代碼如下:

@Override 
public void onProviderSessionExpired(String provider) { 
    if (!QBProvider.FIREBASE_PHONE.equals(provider)){ 
     return; 
    } 

    final String projectId = "your.project.id"; 

    FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser(); 
     mUser.getToken(true) 
       .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() { 
        public void onComplete(@NonNull Task<GetTokenResult> task) { 
         if (task.isSuccessful()) { 
          String authToken = task.getResult().getToken(); 
          QBUsers.signInUsingFirebase(projectId, authToken).performAsync(new QBEntityCallback<QBUser>() { 
           @Override 
           public void onSuccess(QBUser qbUser, Bundle bundle) { 
            qbUser.setPassword(QBSessionManager.getInstance().getToken()); 
            QBChatService.getInstance().login(qbUser, new QBEntityCallback() { 
             @Override 
             public void onSuccess(Object o, Bundle bundle) { 
              //your actions after success login to the chat 
             } 

             @Override 
             public void onError(QBResponseException e) { 

             } 
            }); 
           } 

           @Override 
           public void onError(QBResponseException e) { 

           } 
          }); 
         } else { 
          // Handle error -> task.getException(); 
         } 
        } 
       }); 
} 
+0

謝謝....當第一次logitochat正常工作,但幾個小時後,它顯示驗證失敗用戶名或密碼錯誤的錯誤......以及使用qbsession令牌作爲密碼...我知道qbsession令牌也將在幾個小時後過期...所以我的問題將回調它着迷的迷戀令牌過期 –

+0

@premjangir我更新了我的答案,以顯示如何在續訂後登錄聊天QBsession –

+0

我也寫了相同的代碼,但幾個小時後,qbsession令牌失效......並且只有登錄失敗了一個錯誤.....如何處理該錯誤 –