如何在应用中授权多个Dropbox帐户?

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.

希望这足以构建拼图.祝好运.