Я обнаружил, что это вызов, но, наконец, заставил его работать после многих экспериментов. Вот несколько битов информации, которые должны помочь:
У каждой учетной записи 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 от вашей собственной модели счета.
Надеюсь, этого достаточно, чтобы построить головоломку. Удачи.
Спасибо, связка. Я дам это раньше, а затем помечаю ваш ответ так, как это выбрано. Таким образом, у Dropbox SDK есть встроенная поддержка для нескольких пользователей. –
@Leonnears Я понимаю, что у вас это работает - круто. – rmaddy
Я поиграл с ним. Не полная реализация, но достаточно хорошая, чтобы увидеть, что это имеет большие шансы на работу. Мне нужно хранить идентификаторы отдельно, правильно? –