我在我的应用中使用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];
}
}
答案 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秒内关闭