我是iOs开发的新手,我正在创建一个使用我自己的Dropbox帐户的应用。
我希望我的应用自动登录到我的帐户,以便能够修改&在我的App的文件夹中添加文件。
文档说我应该致电:[[DBSession sharedSession]linkFromController:viewController];
才能登录。但我不想向用户显示登录提示,因为我只想让它自动登录我的Dropbox帐户。有没有办法我可以在后台登录而不违反Dropbox API标准。我顺便使用Core API。请帮帮我。
答案 0 :(得分:3)
Dropbox API旨在让每个用户链接自己的Dropbox帐户,以便与自己的文件进行交互。但是,技术上可以连接到一个帐户。 SDK不会为其提供明确的支持,出于各种技术和安全原因,我们不建议这样做。
但是,如果您确实想要使用此路线,而不是启动授权流程,则可以手动为您的应用使用现有的访问令牌。 (请注意不要撤消它,例如通过https://www.dropbox.com/account/security。)在iOS Core SDK中,您需要使用:
- (void)updateAccessToken:(NSString *)token accessTokenSecret:(NSString *)secret forUserId:(NSString *)userId;
但是,这不是一个好主意。由于这将是一个客户端应用程序,您的应用程序的任何恶意用户都可以提取访问令牌并使用它来绕过您的应用程序试图强制执行的任何访问限制。例如,他们可以访问他们不应该访问的内容,或者使用其他用户可以访问的恶意负载添加或替换内容。
答案 1 :(得分:3)
抱歉,我无法遵循接受的答案,Greg似乎非常不愿意提供示例代码,因为Dropbox并不建议以这种方式使用密钥。对于需要快速解决方案(例如)将zip文件上传到单个Dropbox帐户而不使用我认为相当不透明的Dropbox iOS SDK API的任何人,以下工作(DropboxOAuthKey是您按下按钮生成的密钥应用控制台):
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];