2016-10-27 5 views
0

service에 Google 드라이브를 사용하여 파일을 업로드하고 공유하는 앱을 개발하려고합니다. 그러나 문제는 공유 링크에 private 액세스 권한이 있다는 것입니다. 해당 액세스를 anyone with link (으)로 변경하고 싶습니다. 달성하기 위해 나는 Google Drive REST API을 사용하고 있지만 코드를 실행할 때 아무 일도 일어나지 않는 것 같습니다.Google API에 연결 백그라운드 서비스의 Java 클라이언트

public void changePermissionSettings(String resourceId) throws GeneralSecurityException, IOException, URISyntaxException { 

     com.google.api.services.drive.Drive driveService = getDriveService(); 

     JsonBatchCallback<Permission> callback = new JsonBatchCallback<com.google.api.services.drive.model.Permission>() { 
      @Override 
      public void onFailure(GoogleJsonError e, HttpHeaders responseHeaders) throws IOException { 
       Log.e("upload", "Permission Setting failed"); 
      } 

      @Override 
      public void onSuccess(com.google.api.services.drive.model.Permission permission, HttpHeaders responseHeaders) throws IOException { 
       Log.e("upload", "Permission Setting success"); 
      } 
     }; 

     final BatchRequest batchRequest = driveService.batch(); 

     com.google.api.services.drive.model.Permission contactPermission = new com.google.api.services.drive.model.Permission() 
       .setType("anyone") 
       .setRole("reader"); 
     driveService.permissions().create(resourceId, contactPermission) 
       .setFields("id") 
       .queue(batchRequest, callback); 

     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        batchRequest.execute(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     }).start(); 
    } 


    private com.google.api.services.drive.Drive getDriveService() throws GeneralSecurityException, 
      IOException, URISyntaxException { 

     Collection<String> elenco = new ArrayList<>(); 
     elenco.add("https://www.googleapis.com/auth/drive"); 

     GoogleAccountCredential credential = GoogleAccountCredential.usingOAuth2(this, elenco) 
       .setSelectedAccountName(getAccountName()); 

     return new com.google.api.services.drive.Drive.Builder(
       AndroidHttp.newCompatibleTransport(), new JacksonFactory(), credential).build(); 
    } 

내가 여기에 두 가지 질문이 있습니다 : 여기 내 코드는

  1. 가 잘 함께 모두 구글 드라이브 안드로이드 API와 Google 드라이브 REST API를 사용할 수 있나요?

  2. 파일의 사용 권한 설정을 변경하는 방법 private에서 anyone with link ?? Documentation에 언급 된 내용은 Authorization happens in response to receiving an error when sending a request.입니다. 어떻게 실현할 수 있습니까? service ??

답변

0

"그것은 바로 함께 모두 구글 드라이브 안드로이드 API와 Google 드라이브 REST API를 사용할 수 있나요?"

here과 같이 가능합니다. "이 사진을 보면 (사진) (Android App)과 하단의 REST API (드라이브 서비스)을 상상할 수 있습니다."

가하지만, 명심해야 할 몇 가지 사항입니다 :

  1. GDAA의 주요 식별자의 DriveId가 살고 GDAA에서 (GooPlaySvcs) 만 해당하고, REST API의 존재하지 않습니다. REST API의 기본 식별자 인 'ResourceId'를 검색해야합니다 (SO 29030110 참조).

  2. 에 ResourceId는 GDAA 최선을 다하고 (업로드) 파일/폴더 후 DriveId에서 얻을 수 있습니다

  3. 당신은 사실에 의해 발생하는 타이밍 문제가 많이 발생하게됩니다 (SO 22874657 참조) 그 GDAA '버퍼' 네트워크 요청은 자체 일정 (시스템 최적화)이지만 REST API를 사용하면 앱이 응답 대기를 제어 할 수 있습니다. 일반적으로 이러한 SO questions을 검사하면 이러한 문제에 대한 많은 잡담을 발견하게됩니다.

나는 모두 GDAA에 대한 최소한의 CRUD 래퍼 당신이 (거의 동일하며 CRUD 방법이 동일한 서명이 둘의 MainActivity) 병합 경우에 당신을 도울 수있는 REST API를 유지합니다.

"어떻게 anyone with link ?? Documentationprivate에서 파일의 권한 설정을 변경할 수는 Authorization happens in response to receiving an error when sending a request. 방법이이 서비스에 달성 될 수 있음을 언급?당신은이 링크를 확인하실 수 있습니다

private Permission insertPermission(Drive service, String fileId) throws Exception{ 
    Permission newPermission = new Permission(); 
    newPermission.setType("anyone"); 
    newPermission.setRole("reader"); 
    newPermission.setValue(""); 
    newPermission.setWithLink(true); 
    return service.permissions().insert(fileId, newPermission).execute(); 
} 

: "이 thread에서 기반

, 당신은 permissions 다음 설정해야합니다. Google Drive SDK - change item sharing permissions