2014-03-28 71 views
2

我在我的应用程序中使用quickblox。我做了我的用户注册,用户登录和聊天。当我第一次登录时,一切正常。如果我按回家并再次进入该应用程序,我来到我的viewController页面。用户自动注销。当我尝试登录时说,令牌是必需的。Quicklox令牌需要

我已经把会话验证在appdelegate

[QBAuth createSessionWithDelegate:self] 
    -(void)viewDidAppear:(BOOL)animated 
    { 

    if([LocalStorageService shared].currentUser == nil)// check if user is logged in 
    { 
     NSCharacterSet *nonalphanumericSet = [[ NSCharacterSet alphanumericCharacterSet] invertedSet]; 

     [QBUsers logInWithUserLogin:[[[PFUser currentUser].username componentsSeparatedByCharactersInSet:nonalphanumericSet ] componentsJoinedByString:@"1"] password:@"password" delegate:self]; 
    } 
    } 

    - (void)completedWithResult:(Result *)result 
    { 
    if(result.success && [result isKindOfClass:QBUUserLogInResult.class]) 
    { 
     // Success, do something 
     QBUUserLogInResult *userResult = (QBUUserLogInResult *)result; 
     NSLog(@"Logged In user=%@", userResult.user); 


      userResult.user.password [email protected]"password"; 

     // Save current user 
     // 
     [[LocalStorageService shared] setCurrentUser: userResult.user]; 


     // Login to QuickBlox Chat 
     // 
     [[ChatService instance] loginWithUser:[LocalStorageService shared].currentUser completionBlock:^{ 

      NSLog(@"chat logged successfully"); 


     }]; 

     // Errors 
    } 
    else 
    { 
     NSString *errorMessage = [[result.errors description] stringByReplacingOccurrencesOfString:@"(" withString:@""]; 
     errorMessage = [errorMessage stringByReplacingOccurrencesOfString:@")" withString:@""]; 

     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Errors" 
                 message:errorMessage 
                 delegate:nil 
               cancelButtonTitle:@"Ok" 
               otherButtonTitles: nil]; 
     [alert show]; 

    } 

} 

回答

1

令牌需要意味着你试图执行的请求,但是你没有还创建一个会话

您可以重现此问题只是执行2个请求一个接一个:

[QBAuth createSessionWithDelegate:self]; 
[QBUsers logInWithUserLogin:... delegate:self]; 

这个序列,你会得到“令牌需要”

为了摆脱这个你应该等待时创建会话REQ后uests将完成并进行下一个请求:

[QBAuth createSessionWithDelegate:self]; 

...

- (void)completedWithResult:(Result *)result{ 
    if(result.success && [result isKindOfClass:QBAAuthSessionCreationResult.class]){ 

     // you got token here - perform any other requests after this 

     [QBUsers logInWithUserLogin:... delegate:self]; 

    } 
} 

这不是你的问题的解决方案,但它是一个解释HY这一切发生的时候,以及如何解决它

+0

感谢名单伊戈尔。我已经整理出来了。就是这样。 –

0

看来插座关闭掉。当应用程序转到后台时尝试从QBChat实例注销,并在应用程序进入前台时登录到QBChat。如果你不发送存在消息QBChat,插座将在90秒内关闭

相关问题