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の担当者は、内部View Controllerログインを導入しましたが、結果の受信者としてAppDelegateを維持しました。ユーザーが自分のデバイスにDropboxアプリをインストールしている場合、ログインはDropboxアプリに転送され、またAppDelegateが戻ってきたときに呼び出されます。

于 2012-09-01T11:39:58.550 に答える
5

アプリデリゲートで追加:

- (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 に答える