2013-03-08 2 views
2

Я ищу обновить одно из своих приложений (которое является клиентом Dropbox), чтобы иметь поддержку нескольких учетных записей, но я не могу найти способ сделать это.Как я могу разрешить несколько учетных записей Dropbox в приложении?

Я проанализировал SDK много раз и независимо от того, сколько раз я смотрю, похоже, что учетная запись, использующая официальный SDK, может поддерживать только одну учетную запись за раз. Хотя я уверен, что он может поддерживать больше, поскольку я знаю много приложений, которые позволяют вам связывать более одного.

Любые указатели на это будут высоко оценены. Я даже не могу найти способ получить токены, чтобы хранить их отдельно позже.

ответ

10

Я обнаружил, что это вызов, но, наконец, заставил его работать после многих экспериментов. Вот несколько битов информации, которые должны помочь:

У каждой учетной записи Dropbox (DB) есть идентификатор пользователя (uid), связанный с ней, как только пользователь авторизовался. В своей собственной модели приложения для учетной записи вам нужно отслеживать uid. Первоначально, прежде чем пользователь свяжет свою учетную запись БД, этот uid будет nil.

Когда пользователь хочет получить доступ к своей учетной записи БД, вы получаете связанный с ним uid для учетной записи. Если UID не ноль вы настроите DBRestClient следующим образом:

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

Если UID еще не установлен, вы должны представить экран входа в систему.

[[DBSession sharedSession] linkFromController:someController]; 

Это, конечно, запускает приложение DB, чтобы представить свой логин (или представляет собой веб-интерфейс, если приложение 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 для создания DBRestClient, как я показал ранее.

Если у вас есть идентификатор пользователя, вы можете определить, является ли UID должным образом связан с простой проверкой:

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

Чтобы разорвать связь пользователя на основе их UID вы можете сделать:

[[DBSession sharedSession] unlinkUserId:uid]; 

В этот момент я также очистил бы сохраненный uid от вашей собственной модели счета.

Надеюсь, этого достаточно, чтобы построить головоломку. Удачи.

+0

Спасибо, связка. Я дам это раньше, а затем помечаю ваш ответ так, как это выбрано. Таким образом, у Dropbox SDK есть встроенная поддержка для нескольких пользователей. –

+0

@Leonnears Я понимаю, что у вас это работает - круто. – rmaddy

+0

Я поиграл с ним. Не полная реализация, но достаточно хорошая, чтобы увидеть, что это имеет большие шансы на работу. Мне нужно хранить идентификаторы отдельно, правильно? –

Смежные вопросы