10

我正在使用他们网站上提供的 SDK 将 Dropbox 添加到我的应用程序中。[[DBSession sharedSession] linkFromController:self];与帐户链接后,有什么方法可以调用某些方法吗?

基本上我想[self.tableView reloadData]在应用程序尝试登录 Dropbox 后打电话。它甚至不需要区分登录是否成功。

4

2 回答 2

16

Dropbox SDK 使用您的 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;
}

由于 Apple 的政策存在问题,Dropbox 引入了这种相当奇怪的回调应用程序的方式。在旧版本的 SDK 中,会打开一个外部 Safari 页面来进行登录。Apple 在某个时间点不会接受此类应用程序。所以 Dropbox 的人引入了内部视图控制器登录,但保留 AppDelegate 作为结果的接收者。如果用户在他的设备上安装了 Dropbox 应用程序,登录将被定向到 Dropbox 应用程序,并且 AppDelegate 将在返回时被调用。

于 2012-09-01T11:39:58.550 回答
5

在 App 委托中添加:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
    if ([[DBSession sharedSession] handleOpenURL:url]) {

        [[NSNotificationCenter defaultCenter]
         postNotificationName:@"isDropboxLinked"
         object:[NSNumber numberWithBool:[[DBSession sharedSession] isLinked]]];

        return YES;
    }

    return NO;
}

在你的自定义类中:

- (void)viewDidLoad {
    [super viewDidLoad];

    //Add observer to see the changes
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(isDropboxLinkedHandle:) name:@"isDropboxLinked" object:nil];

}

  - (void)isDropboxLinkedHandle:(id)sender
{
    if ([[sender object] intValue]) {
       //is linked.
    }
    else {
       //is not linked
    }
}
于 2014-03-17T09:27:55.683 回答