And*_*nez 2 cocoa-touch ios dropbox-api ios6
我想更新我的一个应用程序(这是一个Dropbox客户端)以支持多个帐户,但我似乎找不到办法.
我已多次分析SDK,无论我看多少次,看起来使用官方SDK的帐户一次只能支持一个帐户.虽然我确信它可以支持更多,因为我知道许多应用程序允许您链接多个.
关于这样做的任何指示将受到高度赞赏.我甚至找不到一种方法来获取令牌以便稍后单独存储它们.
rma*_*ddy 10
我发现这是一个挑战,但最终在经过大量实验后才开始工作.以下是一些应该有用的信息:
一旦用户获得授权,每个Dropbox(DB)帐户都有一个与之关联的用户标识(uid).在您自己的应用程序的帐户模型中,您需要跟踪uid.最初,在用户链接其数据库帐户之前,此uid将是nil.
当用户想要访问其数据库帐户时,您将获得该帐户的关联uid.如果uid不是nil,则设置DBRestClient如下:
_client = [[DBRestClient alloc] initWithSession:[DBSession sharedSession] userId:uid];
Run Code Online (Sandbox Code Playgroud)
如果尚未设置uid,则需要显示登录屏幕.
[[DBSession sharedSession] linkFromController:someController];
Run Code Online (Sandbox Code Playgroud)
当然,这会启动数据库应用程序以显示登录(如果未安装数据库应用程序,则显示Web界面).无论哪种方式,当用户完成授权过程时,您的应用程序将由DB再次启动.
在您的app delegate application:openURL:sourceApplication:annotation:方法中,您可以执行以下操作:
if ([[DBSession sharedSession] handleOpenURL:url]) {
NSString *query = url.query;
if ([[url absoluteString] rangeOfString:@"cancel"].location == NSNotFound) {
NSDictionary *urlData = [DBSession parseURLParams:query];
NSString *uid = [urlData objectForKey:@"uid"];
if ([[[DBSession sharedSession] userIds] containsObject:uid]) {
// At this point we know the login succeeded and we have the newly linked userid
// make a call to process the uid
}
} else {
// user cancelled the login
}
}
Run Code Online (Sandbox Code Playgroud)
在处理新链接的uid的代码中,您可以将uid存储在您自己的帐户数据模型中.然后你使用uid创建DBRestClient我之前展示的那样.
如果你有一个uid,你可以通过一个简单的检查确定uid是否正确链接:
if ([[[DBSession sharedSession] userIds] containsObject:uid]) {
// the uid is linked
}
Run Code Online (Sandbox Code Playgroud)
要根据用户的uid取消链接,您可以执行以下操作:
[[DBSession sharedSession] unlinkUserId:uid];
Run Code Online (Sandbox Code Playgroud)
此时我还会从您自己的帐户模型中清除已保存的uid.
希望这足以构建拼图.祝好运.
| 归档时间: |
|
| 查看次数: |
1812 次 |
| 最近记录: |