需要Quicklox令牌

时间:2014-03-28 08:45:32

标签: ios quickblox

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

我已将会话身份验证放在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 =@"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];

    }

}

2 个答案:

答案 0 :(得分:1)

令牌是必需的表示您正在尝试执行请求,但您还没有创建会话

您可以重现此问题,只需逐个执行2个请求:

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

在此序列之后,您将需要“令牌”

要摆脱这种情况,您应该等待创建会话请求完成并执行下一个请求:

[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];

     }
}

它不是您问题的解决方案,但它是一个解释,它发生了什么以及如何解决它

答案 1 :(得分:0)

似乎套接字已关闭。当应用程序进入后台时,尝试从QBChat实例注销,并在应用程序进入前台时登录QBChat。如果您不向QBChat发送在线状态消息,套接字将在90秒内关闭