2014-09-17 3 views
4

개발중인 애플리케이션을 통해 Google 드라이브의 일부 파일에 액세스하려고합니다. 불행히도 나는 자격증을 얻는데 어려움을 겪고있다. Google 서비스 계정을 만들고 제공 한 전자 메일 주소 및 개인 키를 확인해야합니다. 아래 방법 getDriveService()를 호출 그러나 때, 나는 Google 드라이브 API 용 OAuth 자격증 명 취득

java.lang.NullPointerException 
    at java.util.Collections$UnmodifiableCollection.<init>(Unknown Source) 
    at java.util.Collections.unmodifiableCollection(Unknown Source) 
    at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.<init>(GoogleCredential.java:321) 
    at com.google.api.client.googleapis.auth.oauth2.GoogleCredential$Builder.build(GoogleCredential.java:515) 

내가 여기서 뭔가 분명히 잘못된 일을하고있는 오류가 발생입니까? 지금까지

내 코드 :

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; 
import com.google.api.client.http.HttpTransport; 
import com.google.api.client.http.javanet.NetHttpTransport; 
import com.google.api.client.json.JsonFactory; 
import com.google.api.client.json.jackson2.JacksonFactory; 
import com.google.api.services.drive.Drive; 
import com.google.api.services.drive.DriveScopes; 

import java.security.GeneralSecurityException; 
import java.io.IOException; 
import java.net.URISyntaxException; 

private static final String SERVICE_ACCOUNT_EMAIL = "[email protected]"; 
private static final String SERVICE_ACCOUNT_PKCS12_FILE_PATH = "/home/user/googledriveKey.p12"; 

public static Drive getDriveService() throws GeneralSecurityException, IOException, URISyntaxException { 
    HttpTransport httpTransport = new NetHttpTransport(); 
    JacksonFactory jsonFactory = new JacksonFactory(); 
    GoogleCredential credential = new GoogleCredential.Builder() 
     .setTransport(httpTransport) 
     .setJsonFactory(jsonFactory) 
     .setServiceAccountId(SERVICE_ACCOUNT_EMAIL) 
     .setServiceAccountPrivateKeyFromP12File(
      new java.io.File(SERVICE_ACCOUNT_PKCS12_FILE_PATH)) 
     .build(); 
    Drive service = new Drive.Builder(httpTransport, jsonFactory, null) 
     .setHttpRequestInitializer(credential).build(); 
    return service; 
} 

답변

3

명확 자격 증명을 취득하는 방법을 보여줍니다 문서 (이 당신이 이미 가지고있는 것입니다) :

GoogleCredential credential = new GoogleCredential.Builder() 
    .setTransport(httpTransport) 
    .setJsonFactory(jsonFactory) 
    .setServiceAccountId(SERVICE_ACCOUNT_EMAIL) 
    .setServiceAccountScopes(DriveScopes.DRIVE) 
    .setServiceAccountPrivateKeyFromP12File(
     new java.io.File(SERVICE_ACCOUNT_PKCS12_FILE_PATH)) 
    .build(); 

출처 : https://developers.google.com/drive/web/service-accounts

당신이 만약 개별 사용자의 Google 드라이브에서 데이터에 액세스하려면

.setServiceAccountUser(userEmail) 

출처 : https://developers.google.com/drive/web/delegation#instantiate_a_drive_service_object

+0

맞아. 그 문서 페이지는 내가보고있는 것과 정확히 같았고 (embarassingly) 처음에는'setServiceAccountScopes' 메서드 호출을 놓친 것 같습니다. 나는 내 대답을 지우고 이것을 받아 들일 것이다. 고맙습니다 – karlson

관련 문제