每次打开iOS应用程序时都强制创建一个新的Quickblox会话

时间:2014-12-09 20:28:19

标签: ios objective-c quickblox

我正在使用Quickblox iOS SDK 2.0.12

我一直在遵循Quickblox身份验证和授权here上的说明。

我调用QBRequest createSessionWithSuccessBlock:,然后在其完成块中调用QBRequest signUp:,然后在下一个完成块内调用QBRequest logInWithUserLogin:

根据以上链接,我在完成所有这些操作后现在应该有Quickblox User Session。这一切都很完美,所有的调用都是成功的,我可以看到用户现在在Quickblox Admin Panel

执行此操作后,如果我发出Quickblox个请求,他们就可以正常工作了。唯一奇怪的是,[[QBSession currentSession] currentUser] NSLogs(null)

无论如何,如果我停止在模拟器上运行应用程序,然后在10分钟后再次运行应用程序,我会检查持久的自定义数据,以便我可以查看用户是否已经注册。当用户注册后,我将其带入应用程序,而不是需要注册或再次登录。

现在,如果我尝试向Quickblox发出任何请求,我会收到以下异常:

Terminating app due to uncaught exception 'BaseServiceException', reason: 'You have missed the authorization call.
Please insert following code inside your application 
[QBRequest createSessionWithSuccessBlock:errorBlock:];
Before any other code, that uses our service, but after setup credentials. Thank you.' 

我不明白为什么当我在用户第一次注册时创建一个会话时,我需要创建一个会话。我知道会话每2个小时到期一次,但我很快就会对此进行测试,而且我总是收到此错误。

如果我NSLog [QBSession currentSession]我可以看到当前有一个QBSession个对象,但如果我尝试NSLog任何属性,例如sessionDetailssessionExpirationDatecurrentUser他们都记录为(null)

1 个答案:

答案 0 :(得分:3)

据我所知,只有使用此方法- (void)startSessionForUser:(QBUUser *)user withDetails:(QBASession *)session expirationDate:(NSDate *)sessionDate,才能正确使用此属性。但是我没用过它。

为了重新创建会话,我使用[QBConnection setAutoCreateSessionEnabled:YES]并进行聊天,我将QBUUser保留在我的管理器中,输入前台后,我检查XMPP连接[[QBChat instance] isLoggedIn]。也许它可以帮到你。