2015-11-03 12 views
11

たとえば、ユーザーはWebViewでgoogle.comに移動しています。ダイアログでWebViewのGoogleウェブサイトでユーザーを認証

手動でウェブフォームにログインするのではなく、認証を簡略化するためにGoogleアカウントピッカー(ここではhttps://developers.google.com/android/guides/http-authのようなもの)を使用して認証することはできますか? Androidウェブブラウザ(たとえば、Google Chrome)がこの方法でユーザーを認証しています)。

答えて

5

パートI:私が正しくあなたの質問を理解していれば

グーグルプラスサービスのAPIを使用すると、あなたはGoogle Plus Services APIを使用してやろうとしているものを達成することができるかもしれません。

GoogleSignInOptionsを作成し、これらのサインインオプションを使用してGoogleApiClientを作成します。そこから、あなたのGoogleApiClientをパラメータとしてAuth.GoogleSignInApi.getSignInIntentを使用します。

このインテントは、Googleアカウントのピッカー(以前に端末でアクセスしたアカウントと別のアカウントを追加する機能を含む)を表示するSignInIntentを起動する必要があります。

GoogleSignInResultが戻ったら、ユーザーが認証されたことを確認してから、そうでない場合と同様に認証フローを作成できます。

Android SDKにもGoogle SignInButtonが含まれています。これは、サインイン用のカスタムボタンを作成する代わりにレイアウトで使用できます。

パートII:あなたがそれらを認証するためにWebViewを使用しようとしている場合は、今すぐ

WebViewClientを使用するには、あなたの最善の策はWebViewClientクラスを拡張することです。あなたが必要となります

物事:clientIdclientSecret、およびclientScope(あなたがGoogleのデベロッパーコンソールでアプリケーションを作成するときにこれらの詳細のすべてがあなたのために与えられます)最初

まず、物事、認可するためにあなたのURLおそらく次のようになります:https://accounts.google.com/o/oauth2/auth?response_type=code&clientId={your client id}&state={SOMESTATEINFO}&access_type=offline(オフラインアクセスを希望する場合はアクセスタイプ)。これは、あなたの最初のURLである必要がありますWebView

次に、拡張WebViewClientクラスを変更する必要があります。あなたがしたいことはshouldOverrideUrlLoading(WebView webView, String url)メソッドをオーバーライドしてredirectURLを聞くことです。おそらく最も簡単なことは、これを検出するためにurl.startsWith(<your redirect URL>)を使用することです。その後、レスポンスを解析できます。応答にerrorが含まれている場合は、何か問題が生じたことを意味します。そうでない場合は、URLの2つのフィールド、つまりcodestateが返されます。 errorが返ってこない場合は、shouldOverrideUrlLoadingの場合はtrueを返します。

を取得したら、クライアント、スコープ、および秘密を使用してGoogleAuthorizationCodeFlowを新しく作成できます。

フローが完成したらGoogleTokenResponseが必要です。これはを使用して、上記で得られたcodeを認証コードとして取得することができます。

responseがあれば、Credentialflow.createAndStoreCredential(response, null)になります。

これを使用して、Credentialを使用すると、通話を認証できます。

警告私は他のWebブラウザ上に署名されたアカウントを認識するWebViewを取得することができていないので、アカウントピッカーが唯一のアプリケーション固有のWebView上に署名されたアカウントが表示されることがあります。

TL; DRWebViewWebViewClientでこれを行うことが可能であるが、それは厄介だとGoogleプラスサービスAPIを使用するよりも少し遠回り。

This exampleは、認証コードなどを取得すると、承認フロー/資格情報をよりよく示します。

And here's some documentation on the WebViewClientも有用である。

これは正しい方向に向けるのに役立ちます。

+0

返信いただきありがとうございます。つまり、自分のアプリではなく、Googleのウェブサイトでのユーザー認証を意味します。たとえば、ユーザーがWebViewでGoogle Playにログインするようにしたいが、電子メール/パスワードを手動で入力するのではなく、GoogleApiClientスタイルの承認を使用したい(ユーザーがダイアログを使用して既存のアカウントを選択する)。私はいくつかの例を見つけましたが(Android Browserのソースコードなど)、動作しません。 – arts777

+0

@RankoR私は、WebViewでそれを行う方法についてのいくつかの詳細を答えを更新しました(これは、Xamarinで正しく動作させるために行う必要があるため、これに関するいくつかの経験があります)。 WebViewのルートはもう少しラウンドアバウトですが、可能です。うまくいけば、これは役立ちます! –

+0

ありがとう!私はそれを試してみます:) – arts777

関連する問題