2016-10-27 2 views
0

Я пытаюсь разработать приложение, в котором я использую Google Drive для загрузки и передачи файла в service. Однако проблема заключается в том, что общая ссылка имеет доступ к private. Я хочу изменить этот доступ к anyone with link. Для этого я использую Google Drive REST API, однако ничего не происходит, когда я выполняю код. Вот мой код:Подключиться к 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. Является ли это право использовать как Google Drive API Android и Google Drive REST API вместе ??

  2. Как изменить настройку разрешения файла с private на anyone with link ?? Documentation упоминает, что Authorization happens in response to receiving an error when sending a request. Как это можно достичь в service ??

ответ

0

"Является ли это право использовать как Google Drive API Android и Google Drive REST API вместе ??"

Как указано here, возможно. «Просто посмотрев на этот Lifecycle of a Drive file, вы можете представить свое приложение поверх этого изображения (приложение для Android) и REST API внизу (Drive Service)».

Существует несколько моментов, которые нужно иметь в виду, хотя:

  1. Основной Идентификатор GDAA, тем DriveId живет в GDAA (GooPlaySvcs) только и не существует в REST Апи. Вы должны получить «ResourceId», который является основным идентификатором в REST Api (см. SO 29030110).

  2. ResourceId может быть получен из DriveId только после того, как GDAA совершил (загруженном) файл/папку (см SO 22874657)

  3. Вы столкнетесь с большим количеством временных проблем, вызванных тем, что GDAA «буферы» сетевые запросы в своем собственном расписании (оптимизированы системой), тогда как REST Api позволяет вашему приложению контролировать ожидание ответа. В общем, если вы сканируете эти SO questions, вы найдете много болтовни об этих проблемах (хотя это беспорядок).

Я поддерживать минимальную CR обертки для обоего GDAA и REST API, который может помочь вам, если вы сливаете им (MainActivity в обеих из них почти идентичен и методы CRUD имеет ту же подпись).

«Как изменить настройки разрешения файла от private к anyone with link ?? Documentation упоминает, что Authorization happens in response to receiving an error when sending a request. Как это может быть достигнуто в процессе эксплуатации ??"

Исходя из этого thread, вы должны установить следующие permissions:

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(); 
} 

Вы также можете проверить эту ссылку:. Google Drive SDK - change item sharing permissions

Смежные вопросы