我结束了继Q-municate,这是一个应用程序Quickblox乡亲建基本证明自己全包,并提供一个实际的解决方案,无论您聊天的需求就是例子。我还有其他一些自定义的东西,并不需要太多的功能,所以我仍然试图深入了解它们如何实现它的细节。链接到Q-municate:
http://quickblox.com/developers/Q-municate#1._Get_the_source_code。
在他们的登录流程,他们使用Q-municate写的QMApi模块:
[[QMApi instance] loginWithEmail:email
password:password
rememberMe:weakSelf.rememberMeSwitch.on
completion:^(BOOL success)
{
[SVProgressHUD dismiss];
if (success) {
[[QMApi instance] setAutoLogin:weakSelf.rememberMeSwitch.on
withAccountType:QMAccountTypeEmail];
[weakSelf performSegueWithIdentifier:kTabBarSegueIdnetifier
sender:nil];
}
}];
在loginWithEmail,其设定管理缓存此登录:
[weakSelf.settingsManager setLogin:email andPassword:password];
这实际上只是一种方式将密码缓存在SSKeyChain中。
[SSKeychain setPassword:password forService:kQMAuthServiceKey account:login];
后来,当您返回到应用程序,他们称之为自动登录:
if (!self.isAuthorized) {
if (self.settingsManager.accountType == QMAccountTypeEmail && self.settingsManager.password && self.settingsManager.login) {
NSString *email = self.settingsManager.login;
NSString *password = self.settingsManager.password;
[self loginWithEmail:email password:password rememberMe:YES completion:completion];
}
else if (self.settingsManager.accountType == QMAccountTypeFacebook) {
[self loginWithFacebook:completion];
}
else {
if (completion) completion(NO);
}
}
else {
if (completion) completion(YES);
}
其中self.settingsManager.password拉从SSKeychain密码:
NSString *password = [SSKeychain passwordForService:kQMAuthServiceKey account:self.login];
自动登录时调用主聊天标签被加载。这使得我们的经典调用connectToChat:
[[QMApi instance] autoLogin:^(BOOL success) {
if (!success) {
[[QMApi instance] logoutWithCompletion:^(BOOL succeed) {
//
[weakSelf performSegueWithIdentifier:@"SplashSegue" sender:nil];
}];
} else {
// subscribe to push notifications
[[QMApi instance] subscribeToPushNotificationsForceSettings:NO complete:^(BOOL subscribeToPushNotificationsSuccess) {
if (!subscribeToPushNotificationsSuccess) {
[QMApi instance].settingsManager.pushNotificationsEnabled = NO;
}
}];
[weakSelf connectToChat];
}
}];
所以技术上的文档都通过登录聊天每个应用程序打开,聊天不再连接的时间做正确的事。存储密码只是一种更复杂但安全的方式,因此用户不必重新输入密码。
TLDR:它在我的代码的方式(在SWIFT)是:
在登录:
QBRequest.logInWithUserEmail(email, password: password, successBlock: { (response, user) in
SSKeychain.setPassword(password, forService: "kMyAppLoginServiceKey", account: email)
}) { (errorResponse) in
print("Error: \(errorResponse)")
self.simpleAlert("Could not log in", defaultMessage: nil, error: nil)
}
每当聊天视图载荷:
if !QBChat.instance().isConnected() {
QBRTCClient.initializeRTC()
QBRTCClient.instance().addDelegate(self)
let user = QBSession.currentSession().currentUser
let password = SSKeychain.passwordForService("kMyAppLoginServiceKey", account: user?.email!)
user!.password = password
QBChat.instance().addDelegate(self)
QBChat.instance().connectWithUser(user!) { (error) in
if error != nil {
print("error: \(error)")
}
else {
print("login to chat succeeded")
}
}
}
我想现在,我不完全得到登录情况。 SDK中的视频聊天示例仅使用QBChat.instance()。connectWithUser而不是QBRequest.logInWithUserLogin。仍然希望得到一些人的洞察力。 – mitrenegade