int*_*_32 12 android google-authentication webview accountpicker
例如,用户在WebView中导航到google.com.
是否可以通过Google帐户选择器(如https://developers.google.com/android/guides/http-auth中所述)在那里授权,以简化授权,而不是通过网络表单手动登录?Android Web浏览器(例如Google Chrome)通过此方法授权用户).
第一部分:使用Google Plus服务API
如果我正确理解您的问题,您可以使用Google Plus服务API实现您的目标.
您创建了自己GoogleSignInOptions,然后GoogleApiClient使用这些登录选项创建.从那里,您使用Auth.GoogleSignInApi.getSignInIntentwith GoogleApiClient作为参数.
此意图应启动一个SignInIntent显示Google帐户选择器的内容(包括之前在设备上访问过的帐户,以及添加其他帐户的功能).
返回后GoogleSignInResult,您可以验证用户是否已通过身份验证,然后创建身份验证流程.
甚至包含在Android SDK中的是Google SignInButton,您可以在布局中使用它,而不必为登录创建自定义按钮.
第二部分:使用WebViewClient
现在,如果您尝试使用a WebView来验证它们,最好的办法是扩展WebViewClient课程.
您需要的东西: clientId,clientSecret和clientScope(当您在Google Developer Console中创建应用程序时,将为您提供所有这些详细信息)
首先,您要授权的URL可能如下所示:( https://accounts.google.com/o/oauth2/auth?response_type=code&clientId={your client id}&state={SOMESTATEINFO}&access_type=offline如果您想要离线访问,请访问类型).这应该是您的初始网址WebView
接下来,您将需要修改扩展的WebViewClient类.你想要做的是覆盖shouldOverrideUrlLoading(WebView webView, String url)听你的方法redirectURL.可能最简单的方法是url.startsWith(<your redirect URL>)用来检测这个.然后,您可以解析响应.如果您的回复包含error,则表示出现了问题.否则,您应该返回URL中的两个字段:code和state.如果你没有得到error回来,然后返回true了shouldOverrideUrlLoading.
获得后code,您可以GoogleAuthorizationCodeFlow使用您的客户端,范围和秘密创建新的.
一旦完成了流程,您将需要一个GoogleTokenResponse,使用code上面获得的授权码可以获得GoogleTokenResponse response = flow.newTokenResponse(<code>).setRedirectUri(<redirectUri>).execute().
一旦你完成了这个,并且你有了你的response,你可以得到你的Credential使用flow.createAndStoreCredential(response, null).
瞧,使用此功能Credential,您可以验证您的通话.
注意事项我无法WebView识别已在其他Web浏览器上登录的帐户,因此帐户选择器可能只显示已在特定于应用程序的WebView上登录的帐户.
TL;博士有可能有这样做WebView和WebViewClient,但它是凌乱和一点点比使用谷歌加服务API的更多迂回.
一旦获得授权代码等,此示例更好地说明了授权流程/凭证内容.
这里有一些关于WebViewClient的文档也可能很有用.
希望这有助于指明您正确的方向!
| 归档时间: |
|
| 查看次数: |
3338 次 |
| 最近记录: |