2012-08-31 28 views
10

Tôi đang thêm Dropbox vào ứng dụng của mình bằng SDK có sẵn trên trang web của họ. Có cách nào gọi một số phương thức một lần [[DBSession sharedSession] linkFromController:self]; liên kết với một tài khoản không?Dropbox SDK - linkFromController: ủy quyền hoặc gọi lại?

Về cơ bản tôi muốn gọi [self.tableView reloadData] khi ứng dụng đã cố gắng đăng nhập vào Dropbox. Nó thậm chí không cần phải phân biệt giữa một đăng nhập thành công hoặc không thành công.

Trả lời

16

SDK Dropbox sử dụng AppDelegate của bạn làm người gọi lại. Vì vậy, khi bạn đã gọi [[DBSession sharedSession] linkFromController:self]; SDK Dropbox sẽ trong bất kỳ trường hợp nào, hãy gọi phương thức – application:openURL:sourceApplication:annotation: của AppDelegate của bạn.

Vì vậy, trong AppDelegate bạn có thể kiểm tra bằng [[DBSession sharedSession] isLinked] nếu đăng nhập thành công hay không. Thật không may là không có gọi lại cho viewController của bạn, vì vậy bạn phải thông báo cho nó bằng các phương tiện khác (tham chiếu trực tiếp hoặc đăng thông báo).

- (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; 
} 

Cách khá lạ khi gọi lại ứng dụng này được Dropbox giới thiệu do có vấn đề với chính sách của Apple. Trong các phiên bản cũ hơn của SDK, một trang Safari bên ngoài sẽ được mở để thực hiện đăng nhập. Apple sẽ không chấp nhận các ứng dụng như vậy tại một thời điểm nào đó. Vì vậy, các Dropbox guys giới thiệu đăng nhập bộ điều khiển xem nội bộ, nhưng giữ AppDelegate là người nhận kết quả. Nếu người dùng đã cài đặt ứng dụng Dropbox trên thiết bị của mình, thông tin đăng nhập sẽ được chuyển đến Ứng dụng Dropbox cũng như AppDelegate sẽ được gọi trở lại.

5

trong App đại biểu add:

- (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; 
} 

và bạn tùy chỉnh lớp:

- (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 
    } 
} 
+0

nó làm việc độc đáo ... cảm ơn! – orafaelreis

+0

cảm ơn bạn, tôi đã mất hàng giờ để tìm kiếm thứ như thế này! –

+0

Cảm ơn bạn, nó hoạt động cho tôi! –

Các vấn đề liên quan