2015-01-08 1 views
1

저는 iOs 개발에 익숙하지 않으며 내 보관 용 계정을 사용하는 앱을 만들고 있습니다. & 내 App의 폴더에 파일을 수정할 수 있도록 내 앱이 자동으로 내 계정에 로그인하도록하고 싶습니다. 설명서에 로그인하려면 [[DBSession sharedSession]linkFromController:viewController];으로 전화해야한다고 나와 있습니다. 하지만 난 단지 내 Dropbox 계정에 자동으로 로그인하기를 원하기 때문에 사용자에게 로그인 프롬프트를 보여주고 싶지 않습니다. Dropbox API 표준을 위반하지 않고 백그라운드에서 로그인 할 수있는 방법이 있습니까? 그런데 Core API를 사용하고 있습니다. 도와주세요.자동 로그인 로그인 계정없이 코어 API에 보관 용 계정

답변

3

Dropbox API는 각 사용자가 자신의 Dropbox 계정을 연결하여 자신의 파일과 상호 작용할 수 있도록 설계되었습니다. 그러나 기술적으로 하나의 계정에만 연결할 수 있습니다. SDK는 명시적인 지원을 제공하지 않으며 다양한 기술 및 보안상의 이유로 권장하지 않습니다.

그러나이 경로로 이동하려는 경우 인증 절차를 시작하는 대신 앱에 대한 기존 액세스 토큰을 수동으로 사용합니다. (. 그냥 예를 들어 https://www.dropbox.com/account/security을 통해 그것을 취소하지 않도록주의) 아이폰 OS 코어 SDK에서 당신은 사용해야 할 것 :

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

다시하지만, 이것은 좋은 생각이 아니다. 이것은 클라이언트 측 응용 프로그램이므로 앱의 악의적 인 사용자는 액세스 토큰을 추출하여이를 사용하여 응용 프로그램에서 적용하려는 모든 액세스 제한을 우회 할 수 있습니다. 예를 들어, 다른 사용자가 액세스 할 수있는 악의적 인 페이로드로 콘텐츠를 추가하거나 추가 또는 대체 할 수 있습니다.

+0

어떻게이 방법을 구현할 수 있습니까? 임 미안하지만, 정말 iOS에 새로운 메신저 : ( – MetaSnarf

+0

만약 당신이 간단한 단계를 제공 할 수 있습니다 ... 제발 진짜로 그것을해야합니다 : ( – MetaSnarf

+0

)이 편리한 (어떤 것이기 때문에 권장하지 않습니다) 때문에 샘플 코드가 없지만 기본 프로세스 OAuth 1 액세스 토큰 키와 자신의 계정에 대한 비밀을 수동으로 한 번 가져온 다음 DBSession에서이 메서드를 호출하고 해당 액세스 토큰 키, 암호 및 계정 사용자 ID (정수)를 한 번만 제공하면됩니다. . 응용 프로그램 – Greg

3

죄송합니다. 허용 된 답변을 따르지 못하고 Dropbox에서 비밀 키를 사용하지 않는 것이 좋기 때문에 Greg는 예제 코드를 제공하는 것을 매우 꺼립니다. DropboxOAuthKey는 다소 불투명 한 Dropbox iOS SDK API를 사용하지 않고 단일 Dropbox 계정에 Zip 파일을 업로드하는 등의 빠른 솔루션이 필요한 사용자에게 다음 작업을 제공합니다 (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]; 
+1

게시 해 주셔서 감사합니다. 누구나 혼란 스러울 경우를 대비해이 샘플은 OAuth 2를 사용하는 반면, SDK와 이에 대한 대답은 OAuth 1을 사용합니다. – Greg