【问题标题】:How can I authorize more than one Dropbox account in an app?如何在一个应用中授权多个 Dropbox 帐户?
【发布时间】:2013-03-08 22:59:33
【问题描述】:

我希望更新我的一个应用程序(它是一个 Dropbox 客户端)以支持多个帐户,但我似乎找不到方法。

SDK我分析了很多遍,看多少遍,好像一个使用官方SDK的账号一次只能支持一个账号。虽然我确信它可以支持更多,因为我知道许多允许您链接多个应用的​​应用程序。

任何有关这样做的指针都将受到高度赞赏。我什至找不到获取令牌以便以后单独存储它们的方法。

【问题讨论】:

    标签: ios cocoa-touch ios6 dropbox-api


    【解决方案1】:

    我发现这是一个挑战,但经过大量实验后终于成功了。以下是一些应该有所帮助的信息:

    一旦用户获得授权,每个 Dropbox (DB) 帐户都有一个与之关联的用户 ID (uid)。在您自己的帐户模型中,您需要跟踪 uid。最初,在用户链接他们的数据库帐户之前,此 uid 将为nil

    当用户想要访问他们的数据库帐户时,您会获得该帐户的关联 uid。如果 uid 不是 nil,您可以按如下方式设置 DBRestClient

    _client = [[DBRestClient alloc] initWithSession:[DBSession sharedSession] userId:uid];
    

    如果尚未设置 uid,则需要显示登录屏幕。

    [[DBSession sharedSession] linkFromController:someController];
    

    当然,这会启动 DB 应用程序以显示登录信息(如果未安装 DB 应用程序,则显示 Web 界面)。无论哪种方式,当用户完成授权过程时,DB 都会再次启动您的应用。

    在您的应用委托的 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
        }
    }
    

    在处理新链接的 uid 的代码中,您可以将 uid 存储在您自己的帐户数据模型中。然后你使用 uid 创建DBRestClient,就像我之前展示的那样。

    如果你有一个uid,你可以通过一个简单的检查来确定uid是否正确链接:

    if ([[[DBSession sharedSession] userIds] containsObject:uid]) {
        // the uid is linked
    }
    

    要根据用户的 uid 取消链接用户,您可以执行以下操作:

    [[DBSession sharedSession] unlinkUserId:uid];
    

    那时我还会从您自己的帐户模型中清除保存的 uid。

    希望这足以构成拼图。祝你好运。

    【讨论】:

    • 非常感谢。我会在此之前给出,然后将您的答案标记为相应地选择。所以 Dropbox SDK 毕竟对多用户有原生支持。
    • 我已经摆弄过了。不是一个完整的实现,但足以看到它有很高的工作机会。我需要单独存储 ID,对吗?
    • 是的,用户授权你的应用时得到的uid必须由你的应用存储,并与你在应用中拥有的对应“账号”相关联。
    • 好吧酷,这是我唯一的疑问。非常感谢您抽出时间@rmaddy。非常感谢!
    • @rmaddy 是否遇到过在成功关联帐户并重新启动应用程序后,Dropbox 会话似乎没有加载之前关联的用户 ID 的问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 2018-07-14
    • 1970-01-01
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    相关资源
    最近更新 更多