3

アプリケーションの Google サービスへのアクセスをユーザーに承認させる必要がある Java アプリケーションがあります。必要な承認を表示して取得するために、次のコードを用意しました。

GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(httpTransport, JsonFactory, clientSecrets, scopes).build();
Credential cred = null; 
try
  {
    LocalServerReceiver localSrv = new LocalServerReceiver();

    AuthorizationCodeInstalledApp app = new AuthorizationCodeInstalledApp(flow, localSrv);

    cred = app.authorize(userName);
  }
  catch(Exception ex)
  {
    ex.printStackTrace();
  }
    refreshToken = cred.getRefreshToken();

ユーザーが「承認」または「キャンセル」ボタンをクリックすると、すべて問題ありません。ただし、ブラウザ ウィンドウを閉じると、アプリケーション全体がフリーズします。フリーズを防止したり、タイムアウトを導入したりするために、このケースを処理する方法はありますか?

4

1 に答える 1

1

また、Google ドライブをアプリケーションに統合していますが、これは私の懸念事項です。メソッドを呼び出すとauthorize()、呼び出しが行われているスレッドがブロックされます。認証ウィンドウが開いている間は、アプリケーションも応答しないことに気付くでしょう。

ユーザーが認証ウィンドウを閉じたかどうかを検出する方法があることを望んでいましたが、これは、LocalServerReceiver決して到着しないトークンを無限に待つだけのようです.

この時点で最善の策は、非同期に呼び出しauthorize()て応答を待つことです。

LocalServerReceiver編集:プレーン テキストを表示するのではなく、受信者に別の URL にリダイレクトしてもらいたかったので、ソース コードをのぞき見しました。VerificationCodeReceiverこれは、ブロッキングwaitForCode()メソッドを持つインターフェイスを実装します。AuthorizationCodeInstalledApp.authorize()の実装を自作しても待機中はブロックする必要がありそうですVerificationCodeReceiver

于 2016-07-20T08:12:00.190 に答える