Question

I am using quickblox in my app. I did my user signup, user login and chat. Everything works fine when i log in for the first time. if I press home and enter the app again, I come to my viewController page. The user is logged out automatically. And when I try to log in it says, token is required.

I have put the session authentication in 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];

    }

}
Was it helpful?

Solution

token is required means that you are trying to perform request, but you didn't create a session still

You can reproduce this issue just perform 2 requests one by one:

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

After this sequence you will got 'token is required'

To get rid of this you should wait when create session requests will be finished and perform next request:

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

     }
}

It's not a solution for your issue, but it's an explanation hy it happenes and how to resolve it

OTHER TIPS

It seems socket get closed. Try to log out from QBChat instance when app goes to background, and log in to QBChat when app will enter foreground. And if you don't send presence messages to QBChat, socket will be closed in 90 seconds

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top