2016-12-08 30 views
0

Google Gmail APIを使用してメールを転送するアプリケーションを実装しました。しかしそうするためには、私はOAuth 2.0を承認しなければなりません。 特定のデバイスの認証が完了したかどうかを確認するにはどうすればよいですか?OAuth 2.0が既に承認されているかどうかを確認してください

たとえば、アプリをダウンロードしてアカウントを選択し、必須アクションであるため、最初にメールを送信する許可を与えたいと考えています。 私の方法は電子メールを送信しようとすることです。失敗した場合、AsyncTaskでonCancelled()を取得し、GoogleAuthExceptionを処理してエラー(mLastError)を取得します。これは悪い考えです。許可されているかどうかを確認するほうがはるかに簡単です。

私はの偽のメールを送信してUserRecoverableAuthIOExceptionを取得し、それを処理して承認します。その後、すべて正常に動作します。

activity.startActivityForResult((UserRecoverableAuthIOException) mLastError).getIntent(), MainActivity.REQUEST_AUTHORIZATION); 

私はALLOWを選択し、APIはうまく機能します。

共有設定でアプリが許可されているフラグを保存できますが、アプリを再インストールすると、端末はまだ認証されており、その情報はありません。

だから私は、トークン削除するhttps://accounts.google.com/o/oauth2/revoke?token=XXX カール を使用する必要があります。

なぜ私のアプリはまだ承認されていますか? なぜトークンを手動で取り消す必要があるのですか? 有効期限はありますが、確認する方法はありますか? 有効期限が切れていない場合は、もう一度認証せずに引き続きアプリを使用できます。 アイデア

おかげ

答えて

0

あなたがUserRecoverableAuthExceptionをキャッチしなければならないし、catchブロックで、あなたはUserRecoverableAuthException#getIntent()を呼び出して例外からテントを回復します。ユーザーをアプリのOAuth2権限ページに招待する意図を開始します。

これらの種類のサーバー間の対話では、個別のエンドユーザーではなくアプリケーションに属するアカウントであるサービスアカウントが必要です。アプリケーションはサービスアカウントに代わってGoogle APIを呼び出し、ユーザーの同意は必要ありません。

Google APIコンソールから取得するサービスアカウントの資格情報には、固有の電子メールアドレス、クライアントID、少なくとも1つの公開鍵/秘密鍵のペアが含まれます。クライアントIDと秘密鍵を使用して、署名付きJWTを作成し、適切な形式でアクセストークン要求を作成します。アプリケーションはトークンリクエストをGoogle OAuth 2.0認証サーバーに送信し、アクセストークンを返します。アプリケーションはトークンを使用してGoogle APIにアクセスします。トークンが期限切れになると、アプリケーションはプロセスを繰り返します。

ここでのOAuthマニュアルを参照してください:https://developers.google.com/identity/protocols/OAuth2#expiration

+0

を、私はこれらの情報の全てを理解し、私は、アプリケーションの最初の起動時に及びませ送信する第一のメッセージに許可を要求する方法を疑問に思います。 1回目の送信を待つ場合、メッセージは自動転送できません。ユーザーの操作を待つためです。その後、すべてのメッセージを自動転送することができます.. – vanste25

関連する問題