5

OAuth 1.0a を使用する Android アプリケーションを OAuth 2.0 に移行しようとしています。(私の OAuth 2.0 のニーズには、Java/Android 用の Google API クライアント ライブラリを使用します)。

使いやすさの側面も考慮した、Android プラットフォームで OAuth 2.0 を使用して Google API にアクセスするための最適な/推奨されるソリューションは何ですか。ユーザーは、Android アプリとシームレスに統合して、簡単な方法でアクセスを自動化できる必要があります。

アプリケーションは現在、OAuth 1.0 Web ベースのフローを使用しています。このフローでは、アプリケーションがブラウザーをポップしてユーザーがアクセスを承認できるようにし、カスタム リダイレクト URI を使用して、アプリケーションでアクセス トークンを取得できます。これはかなりうまく機能しますが、Web ページを表示するためにブラウザーをポップするためにアプリを終了する必要があるという事実が気に入りませんでした。私は、OAuth 2.0 がこれを回避し、ユーザー エクスペリエンスを向上させるのではないかと考えていました。

Google IO で概説されているように、Adroid AccountManager-OAuth2 統合を調べ始めました。これは、Web ブラウザーを使用せず、Android とより緊密に結合されているためですが、本来の方法で機能していません。それは文書化されておらず、将来の実行可能なオプションであり続けるかどうかは不明です.

標準の OAuth 2.0 Web フローの調査を開始しました。

ここでは、2 つのオプションがあるようです。

OAuth 2.0 クライアントをインストール済みアプリとして構成し、urn:ietf:wg:oauth:2.0:oob リダイレクト URI を使用します。

ユーザーにコードをコピーしてアプリに貼り付けてもらうつもりはないので、あまりクリーンなソリューションではありません。これはまったくユーザーフレンドリーではありません。

Using OAuth 2.0 to Access Google APIs ドキュメントには、ページのタイトルをポーリングして URL を解析する方法があると記載されていますが、それには多くのユーザビリティの問題も見られます。配管コードの。これを実行してくれるクライアント ライブラリがあれば、喜んでこれをさらに調査しますが、現時点では、このオプションを削除しました。

OAuth 2.0 クライアントを webapp として構成し、リダイレクト URI を使用します。

ここで、OAuth 2.0 では非標準のスキームが禁止されていることに気付きました。以前は xoauth://callback のようなものを使用できましたが、現在は許可されていません。http://mysite.com/oauth2/callbackのようなリダイレクト URI を構成すると、Google OAuth 2.0 ページがリダイレクトされたときに、適切なインテント フィルターを設定しているにもかかわらず、Android でアクティビティを開くことができません。http://mysite.com/oauth2/callbackはブラウザに表示されるだけです。

以下は機能します

Intent i = new Intent(Intent.ACTION_VIEW,Uri.parse("http://mysite.com/oauth2/callback"));
startActivity(i);

ただし、Google OAuth 2 ページが同じ URL にリダイレクトされると、ブラウザに表示されるだけです。

これが機能したとしても、ユーザーにはセレクター ポップアップが表示されます (ブラウザーで開くか、Android アクティビティを使用して開きます)。ユーザビリティの観点から、これも受け入れられません。

ここで概説したものよりも優れた解決策を探しています。

よろしく、デイビー

4

2 に答える 2

13

最終的に、WebView コンポーネントを使用して Google Authorization URL をロードしました。WebviewClient を使用して、Webview に読み込まれるページをインターセプトすることができました。そのため、ユーザーが承認要求を受け入れるか拒否したときに、フローを続行することができました。

ユーザーが受け入れると、Google がリダイレクトする URL には「コード」リクエスト パラメータが含まれ、アプリケーションはそれを OAuth 2.0 トークンと交換できます。ユーザーが同意しない場合、Google がリダイレクトする URL には「エラー」リクエスト パラメータが含まれており、アプリケーションは不満足なシナリオを処理できます。

私はブログ投稿にすべてを書き留めました:AndroidのOauth 2.0フロー

この投稿には、Latitude API で OAuth 2.0 フローを使用するサンプル Android アプリも含まれています。サンプル コードは GitGub で入手できます

于 2011-08-07T08:27:01.377 に答える
2

Play Services は Google I/O 2013 で導入され、現在Android で OAuth2 を使用する公式の方法です。WebView は必要ありません。

于 2013-10-08T14:49:24.267 に答える