通过对话框在WebView上的Google网站上授权用户

int*_*_32 12 android google-authentication webview accountpicker

例如,用户在WebView中导航到google.com.

是否可以通过Google帐户选择器(如https://developers.google.com/android/guides/http-auth中所述)在那里授权,以简化授权,而不是通过网络表单手动登录?Android Web浏览器(例如Google Chrome)通过此方法授权用户).

Lee*_*idt 5

第一部分:使用Google Plus服务API

如果我正确理解您的问题,您可以使用Google Plus服务API实现您的目标.

您创建了自己GoogleSignInOptions,然后GoogleApiClient使用这些登录选项创建.从那里,您使用Auth.GoogleSignInApi.getSignInIntentwith GoogleApiClient作为参数.

此意图应启动一个SignInIntent显示Google帐户选择器的内容(包括之前在设备上访问过的帐户,以及添加其他帐户的功能).

返回后GoogleSignInResult,您可以验证用户是否已通过身份验证,然后创建身份验证流程.

甚至包含在Android SDK中的是Google SignInButton,您可以在布局中使用它,而不必为登录创建自定义按钮.

第二部分:使用WebViewClient

现在,如果您尝试使用a WebView来验证它们,最好的办法是扩展WebViewClient课程.

您需要的东西: clientId,clientSecretclientScope(当您在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中的两个字段:codestate.如果你没有得到error回来,然后返回trueshouldOverrideUrlLoading.

获得后code,您可以GoogleAuthorizationCodeFlow使用您的客户端,范围和秘密创建新的.

一旦完成了流程,您将需要一个GoogleTokenResponse,使用code上面获得的授权码可以获得GoogleTokenResponse response = flow.newTokenResponse(<code>).setRedirectUri(<redirectUri>).execute().

一旦你完成了这个,并且你有了你的response,你可以得到你的Credential使用flow.createAndStoreCredential(response, null).

瞧,使用此功能Credential,您可以验证您的通话.

注意事项我无法WebView识别已在其他Web浏览器上登录的帐户,因此帐户选择器可能只显示已在特定于应用程序的WebView上登录的帐户.

TL;博士有可能有这样做WebViewWebViewClient,但它是凌乱和一点点比使用谷歌加服务API的更多迂回.

一旦获得授权代码等,此示例更好地说明了授权流程/凭证内容.

这里有一些关于WebViewClient的文档也可能很有用.

希望这有助于指明您正确的方向!