在Android上使用OAuth 2.0使用Google API的最佳方式

在Android上使用OAuth 2.0使用Google API的最佳方式,android,oauth-2.0,google-api-java-client,Android,Oauth 2.0,Google Api Java Client,我正在尝试使用OAuth 1.0a将Android应用程序迁移到OAuth 2.0。(使用用于Java/Android的Google API客户端库满足我的OAuth 2.0需求) 在Android平台上使用OAuth 2.0访问Google API的最佳/首选解决方案是什么?同时考虑到可用性方面。用户应该能够以一种简单的方式自动调整访问权限,与我的Android应用程序无缝集成 应用程序当前使用的是OAuth 1.0基于web的流,其中我的应用程序弹出一个浏览器,让用户授权访问,并且使用自定义

我正在尝试使用OAuth 1.0a将Android应用程序迁移到OAuth 2.0。(使用用于Java/Android的Google API客户端库满足我的OAuth 2.0需求)

在Android平台上使用OAuth 2.0访问Google API的最佳/首选解决方案是什么?同时考虑到可用性方面。用户应该能够以一种简单的方式自动调整访问权限,与我的Android应用程序无缝集成

应用程序当前使用的是OAuth 1.0基于web的流,其中我的应用程序弹出一个浏览器,让用户授权访问,并且使用自定义重定向URI,我的应用程序能够检索访问令牌。它工作得很好,但我不喜欢这样的事实,我需要离开我的应用程序,以便弹出浏览器来显示网页。我在想OAuth2.0可能会解决这个问题,并提供更好的用户体验

我开始研究,因为它不涉及网络浏览器,而且与Android的结合更紧密,但它根本没有按应有的方式工作。它还没有被记录在案,也不清楚它在未来是否仍然是一个可行的选择

我现在开始研究标准OAuth2.0Web流

在这里,我似乎有两个选择:

将OAuth 2.0客户端配置为已安装的应用程序,并使用urn:ietf:wg:OAuth:2.0:oob重定向URI。

不是很干净的解决方案,因为我不会让我的用户复制粘贴一些代码到我的应用程序中。这一点都不方便用户

提到有一些方法可以轮询页面标题来解析URL,但我也看到了很多可用性问题,我真的不想编写这种管道代码。如果有一个客户端库可以为我这样做,我很乐意进一步研究,但现在,我放弃了这个选项

将OAuth 2.0客户端配置为webapp,并使用重定向URI。

在这里,我注意到OAuth2.0中禁止使用非标准方案。以前,有可能使用类似xoauth://callback,但这是不允许的。 配置重定向URI时,我无法让Android在Google OAuth 2.0页面重定向时打开我的活动,尽管已经为其设置了适当的意图过滤器。在我的浏览器中只会显示

以下方法确实有效

Intent i = new Intent(Intent.ACTION_VIEW,Uri.parse("http://mysite.com/oauth2/callback"));
startActivity(i);
但是当GoogleOAuth2页面重定向到同一个URL时,它只会显示在浏览器中

即使这样做可行,用户仍然会看到一个选择器弹出窗口(在浏览器中打开或使用我的Android活动打开)。从可用性的角度来看,这也是不可接受的

我正在寻找一个比这里概述的更好的解决方案

问候,,
Davy

我最终使用WebView组件加载Google授权URL。 使用WebviewClient,我能够截获加载到Webview中的页面,因此,当用户接受或拒绝授权请求时,我能够继续流

如果用户接受,Google重定向到的URL包含一个“code”请求参数,应用程序可以将其交换为OAuth 2.0令牌。 如果用户不接受,Google重定向到的URL包含一个“错误”请求参数,应用程序可以处理不愉快的情况

我在一篇博文中写下了一切:


这篇文章还包含一个使用OAuth 2.0流和Latitude API的Android应用程序示例

Play服务是在2013年谷歌I/O大会上推出的,现在已经上市。它们不需要网络视图。

我刚刚用进行了测试。你提到的视频(谷歌I/O 2011)似乎是一个很好的起点。皮卡萨的例子对我很好。目前我还没有使用OAuth 2/AccountManager。但从Picasa的资料来看,我认为它并没有那么模糊。您试过了吗?它应该可以工作,但在预ICS中,授权屏幕并不是真正的用户友好。它列出了原始Oauth2作用域。在ICS中,它有人类可读的名称。但是,你无法获得基于web的方法所获得的品牌(应用程序图标)。如果你的应用程序在市场上有售,你能给我指一下它的链接吗?对不起,如果这是一个私人问题,你可以说不,我会理解的。。。