2016-10-27 9 views
0

私はGoogleドライブを使用して、serviceにファイルをアップロードして共有するアプリを開発しようとしています。しかし、問題は共有リンクが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(); 
    } 

私はここで2つの質問があります

  1. はそれが正しい一緒にGoogleドライブのAndroid APIとGoogleドライブのREST APIの両方を使用することです??

  2. ファイルの許可設定を変更するにはprivateからanyone with linkにファイルを変更するにはどうすればいいですか? Documentationにはそのことが記載されていますAuthorization happens in response to receiving an error when sending a request.serviceでどのように達成できますか?

答えて

0

「GoogleドライブAndroid APIとGoogleドライブREST APIを併用するのは正しいですか?」

hereと同様に可能です。 「このLifecycle of a Drive fileを見るだけで、あなたのアプリはその写真の上に(Android App)、下部にはREST API(ドライブサービス)と想像することができます。

心に留めておくべきいくつかのポイントは、しかし、があります。

  1. GDAAの主な識別子は、DriveIdはのみ(GooPlaySvcs)GDAAに住んでいるし、REST APIで存在していません。 REST APIのメイン識別子である 'ResourceId'を取得する必要があります(SO 29030110を参照)。

  2. RESOURCEIDは(アップロード)GDAAがコミットした後にのみDriveIdからファイル/フォルダを取得することができる(SO 22874657を参照)

  3. あなたはそのGDAA「バッファ」という事実に起因するタイミングの問題の多くに実行されますネットワーク要求は独自のスケジュール(システム最適化)であるのに対して、REST APIはアプリケーションが応答待ちを制御できるようにします。一般に、これらのファイルをスキャンすると、これらの問題について多くのチャットが行われます(しかし、それは混乱です)。

私は(それらの両方でMainActivityはほぼ同一であり、CRUDメソッドは同じシグネチャを持つ)GDAAとあなたがそれらをマージする場合は、あなたを助けることができるREST APIの両方のための最小限のCRUDラッパーを維持します。 Authorization happens in response to receiving an error when sending a request.は、どのようにそれがサービスで達成することができることに言及Documentation ?? anyone with linkprivateからファイルのアクセス許可の設定を変更する方法

」??この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

を。
関連する問題