パートI:私が正しくあなたの質問を理解していれば
グーグルプラスサービスのAPIを使用すると、あなたはGoogle Plus Services APIを使用してやろうとしているものを達成することができるかもしれません。
GoogleSignInOptions
を作成し、これらのサインインオプションを使用してGoogleApiClient
を作成します。そこから、あなたのGoogleApiClient
をパラメータとしてAuth.GoogleSignInApi.getSignInIntent
を使用します。
このインテントは、Googleアカウントのピッカー(以前に端末でアクセスしたアカウントと別のアカウントを追加する機能を含む)を表示するSignInIntent
を起動する必要があります。
GoogleSignInResult
が戻ったら、ユーザーが認証されたことを確認してから、そうでない場合と同様に認証フローを作成できます。
Android SDKにもGoogle SignInButton
が含まれています。これは、サインイン用のカスタムボタンを作成する代わりにレイアウトで使用できます。
パートII:あなたがそれらを認証するためにWebView
を使用しようとしている場合は、今すぐ
WebViewClientを使用するには、あなたの最善の策はWebViewClient
クラスを拡張することです。あなたが必要となります
物事:clientId
、clientSecret
、および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つのフィールド、つまりcode
とstate
が返されます。 error
が返ってこない場合は、shouldOverrideUrlLoading
の場合はtrue
を返します。
を取得したら、クライアント、スコープ、および秘密を使用してGoogleAuthorizationCodeFlow
を新しく作成できます。
フローが完成したらGoogleTokenResponse
が必要です。これはを使用して、上記で得られたcode
を認証コードとして取得することができます。
response
があれば、Credential
はflow.createAndStoreCredential(response, null)
になります。
これを使用して、Credential
を使用すると、通話を認証できます。
警告私は他のWebブラウザ上に署名されたアカウントを認識するWebView
を取得することができていないので、アカウントピッカーが唯一のアプリケーション固有のWebView上に署名されたアカウントが表示されることがあります。
TL; DRWebView
とWebViewClient
でこれを行うことが可能であるが、それは厄介だとGoogleプラスサービスAPIを使用するよりも少し遠回り。
This exampleは、認証コードなどを取得すると、承認フロー/資格情報をよりよく示します。
And here's some documentation on the WebViewClientも有用である。
これは正しい方向に向けるのに役立ちます。
返信いただきありがとうございます。つまり、自分のアプリではなく、Googleのウェブサイトでのユーザー認証を意味します。たとえば、ユーザーがWebViewでGoogle Playにログインするようにしたいが、電子メール/パスワードを手動で入力するのではなく、GoogleApiClientスタイルの承認を使用したい(ユーザーがダイアログを使用して既存のアカウントを選択する)。私はいくつかの例を見つけましたが(Android Browserのソースコードなど)、動作しません。 – arts777
@RankoR私は、WebViewでそれを行う方法についてのいくつかの詳細を答えを更新しました(これは、Xamarinで正しく動作させるために行う必要があるため、これに関するいくつかの経験があります)。 WebViewのルートはもう少しラウンドアバウトですが、可能です。うまくいけば、これは役立ちます! –
ありがとう!私はそれを試してみます:) – arts777