ユーザーの Google ドライブ アカウントからいくつかのファイルをダウンロードする必要がある Java ベースのデスクトップ アプリケーションを開発しています。Google ドライブ SDK のドキュメントを調べたところ、次のコードを思いつきました。
public class Main
{
public static void main(String[] args)
{
String clientId = "...";
String clientSecret = "...";
HttpTransport httpTransport = new NetHttpTransport();
JsonFactory jsonFactory = new JacksonFactory();
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
httpTransport,
jsonFactory,
clientId,
clientSecret,
Arrays.asList(DriveScopes.DRIVE)
)
.setAccessType("online")
.setApprovalPrompt("auto").build();
String redirectUri = "urn:ietf:wg:oauth:2.0:oob";
String url =
flow
.newAuthorizationUrl()
.setRedirectUri(redirectUri)
.build();
System.out.println("Please open the following URL in your browser then type the authorization code:");
System.out.println(" " + url);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String code = br.readLine();
GoogleTokenResponse response =
flow
.newTokenRequest(code)
.setRedirectUri(redirectUri)
.execute();
GoogleCredential credential =
new GoogleCredential()
.setFromTokenResponse(response);
Drive service =
new Drive.Builder(httpTransport, jsonFactory, credential)
.build();
...
}
}
これは機能しますが、毎回ユーザーがアプリケーションを承認する (つまり、指定された URL をブラウザーで開き、承認トークンをコピーする) 必要があります。初めてアプリケーションを実行するときのみ、ユーザーがアプリケーションを承認する必要があるような方法でアプリケーションを実装する必要があります。次に、アプリケーションは、次回使用するために、ある種のシークレット トークンをローカルに保存します。
ドキュメントを徹底的に調べましたが、この目標を達成する方法についての十分な説明が見つかりませんでした (特にデスクトップ アプリケーションで)。
それ、どうやったら出来るの?