我正在寻找更新我的一个应用程序(它是一个 Dropbox 客户端)以支持多个帐户,但我似乎无法找到一种方法来做到这一点。
SDK我分析过很多次,看多少次,好像一个使用官方SDK的账号一次只能支持一个账号。尽管我确信它可以支持更多,因为我知道许多允许您链接多个应用程序的应用程序。
任何有关这样做的指示都将受到高度赞赏。我什至找不到获取令牌以稍后单独存储它们的方法。
我正在寻找更新我的一个应用程序(它是一个 Dropbox 客户端)以支持多个帐户,但我似乎无法找到一种方法来做到这一点。
SDK我分析过很多次,看多少次,好像一个使用官方SDK的账号一次只能支持一个账号。尽管我确信它可以支持更多,因为我知道许多允许您链接多个应用程序的应用程序。
任何有关这样做的指示都将受到高度赞赏。我什至找不到获取令牌以稍后单独存储它们的方法。
我发现这是一个挑战,但经过大量实验后终于成功了。以下是一些应该有所帮助的信息:
一旦用户获得授权,每个 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。
希望这足以构成拼图。祝你好运。