Ответ 1
SDK Dropbox использует ваш AppDelegate в качестве приемника обратного вызова. Поэтому, когда вы вызвали [[DBSession sharedSession] linkFromController:self];
, Dropbox SDK будет в любом случае звонить
ваш метод AppDelegate – application:openURL:sourceApplication:annotation:
.
Итак, в AppDelegate вы можете проверить [[DBSession sharedSession] isLinked]
, если логин был успешным или нет. К сожалению, для вашего диспетчера viewController нет обратного вызова, поэтому вам необходимо уведомить его другими способами (прямая ссылка или отправить уведомление).
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
if ([[DBSession sharedSession] handleOpenURL:url]) {
if ([[DBSession sharedSession] isLinked]) {
// At this point you can start making API Calls. Login was successful
[self doSomething];
} else {
// Login was canceled/failed.
}
return YES;
}
// Add whatever other url handling code your app requires here
return NO;
}
Этот довольно странный способ вызвать приложение назад был представлен Dropbox из-за проблемы с политиками Apple. В старых версиях SDK для входа в систему была открыта внешняя страница Safari. Apple не будет принимать такие приложения в определенный момент времени. Итак, ребята Dropbox представили логин контроллера внутреннего вида, но сохранили AppDelegate в качестве получателя результатов. Если у пользователя есть приложение Dropbox, установленное на его устройстве, логин будет направлен в приложение Dropbox, а AppDelegate будет вызван при возврате.