2012-08-31 28 views
10

Estoy agregando Dropbox a mi aplicación usando el SDK disponible en su sitio. ¿Hay alguna manera de llamar a algún método una vez [[DBSession sharedSession] linkFromController:self]; enlaces con una cuenta?SDK de Dropbox - linkFromController: ¿delegado o devolución de llamada?

Básicamente me gustaría llamar al [self.tableView reloadData] una vez que la aplicación ha intentado iniciar sesión en Dropbox. Ni siquiera necesita discriminar entre un inicio de sesión exitoso o fallido.

Respuesta

16

El Dropbox SDK usa su AppDelegate como receptor de devolución de llamada. Por lo tanto, cuando haya llamado al [[DBSession sharedSession] linkFromController:self];, el SDK de Dropbox en cualquier caso llamará al el método – application:openURL:sourceApplication:annotation: de su AppDelegate.

Por lo tanto, dentro de AppDelegate puede verificar por [[DBSession sharedSession] isLinked] si el inicio de sesión fue exitoso o no. Lamentablemente, no hay devolución de llamada para su viewController, por lo que debe notificarlo por otros medios (referencia directa o publicar una notificación).

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

Esta forma bastante extraña de llamar a la aplicación fue presentada por Dropbox debido a un problema con las políticas de Apple. En versiones anteriores del SDK, se habría abierto una página externa de Safari para iniciar sesión. Apple no aceptaría tales aplicaciones en algún momento. Entonces, los chicos de Dropbox introdujeron el inicio de sesión del controlador de vista interno, pero mantuvieron a AppDelegate como el receptor de los resultados. Si el usuario tiene la aplicación de Dropbox instalada en su dispositivo, el inicio de sesión se dirigirá a la aplicación de Dropbox y también se llamará a AppDelegate en el momento de la devolución.

5

en la App delegado complemento:

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

y en que clase personalizada:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

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

} 

y

- (void)isDropboxLinkedHandle:(id)sender 
{ 
    if ([[sender object] intValue]) { 
     //is linked. 
    } 
    else { 
     //is not linked 
    } 
} 
+0

funcionó muy bien ... gracias! – orafaelreis

+0

gracias señor, ¡perdí horas buscando algo como esto! –

+0

Gracias señor, ¡me funciona! –

Cuestiones relacionadas