ios login dropbox dropbox-api

ios - dropbox api documentation



Cuenta de Dropbox de inicio de sesión automático en Core Api sin solicitud de inicio de sesión (2)

Soy nuevo en el desarrollo de iOs y estoy creando una aplicación que utiliza mi propia cuenta de Dropbox. Quiero que mi aplicación inicie sesión automáticamente en mi cuenta para poder modificar y agregar archivos en la carpeta de mi aplicación. La documentación dice que debería llamar: [[DBSession sharedSession]linkFromController:viewController]; para poder iniciar sesión. Pero no quiero mostrar la solicitud de inicio de sesión al usuario porque solo quiero que inicie sesión en mi cuenta de Dropbox automáticamente. ¿Hay alguna manera de lograr iniciar sesión en segundo plano sin violar también los estándares de la API de Dropbox? Estoy usando la API Core por cierto. Por favor, ayúdame.


La API de Dropbox fue diseñada con la intención de que cada usuario vincule su propia cuenta de Dropbox para interactuar con sus propios archivos. Sin embargo, es técnicamente posible conectarse a una sola cuenta. Los SDK no ofrecen soporte explícito y no recomendamos hacerlo, por varias razones técnicas y de seguridad.

Sin embargo, si quisiera seguir esta ruta, en lugar de iniciar el flujo de autorización, usaría manualmente un token de acceso existente para su aplicación. (Solo tenga cuidado de no revocarlo, por ejemplo, a través de https://www.dropbox.com/account/security ). En iOS Core SDK, necesitaría usar:

- (void)updateAccessToken:(NSString *)token accessTokenSecret:(NSString *)secret forUserId:(NSString *)userId;

De nuevo, sin embargo, esta no es una buena idea. Dado que esta sería una aplicación del lado del cliente, cualquier usuario malintencionado de su aplicación podría extraer el token de acceso y usarlo para evitar cualquier restricción de acceso que su aplicación intentara imponer. Por ejemplo, podrían acceder a contenido que no deberían o agregar o reemplazar contenido con una carga maliciosa a la que accederían otros usuarios.


Lo sentimos, no pude seguir la respuesta aceptada y Greg parece muy reacio a proporcionar un código de ejemplo, ya que Dropbox no recomienda usar una clave secreta de esta manera. Para cualquiera que necesite una solución rápida para (por ejemplo) cargar archivos zip en una sola cuenta de Dropbox SIN usar lo que considero la API SDK de iOS de Dropbox bastante opaca, lo siguiente funciona (DropboxOAuthKey es la clave secreta que presionas para generar en la consola de la aplicación):

NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration]; sessionConfiguration.HTTPAdditionalHeaders = @{ @"Authorization" : [NSString stringWithFormat:@"Bearer %@", DropboxOAuthKey], @"Content-Type" : @"application/zip" }; NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: sessionConfiguration delegate: self delegateQueue: [NSOperationQueue mainQueue]]; self.request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://api-content.dropbox.com/1/files_put/auto/%@?overwrite=false",fileName]]]; [self.request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData]; NSData *data = [[NSFileManager defaultManager] contentsAtPath:zippedPath]; [self.request setHTTPMethod:@"PUT"]; [self.request setHTTPBody:data]; [self.request setTimeoutInterval:1000]; NSURLSessionDataTask *doDataTask = [defaultSession dataTaskWithRequest:self.request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { if (!error){ NSLog(@"WORKED!!!!"); } else { NSLog(@"ERROR: %@", error); } }]; [doDataTask resume];