2011-08-06 65 views
6

我试图将使用OAuth 1.0a的Android应用程序迁移到OAuth 2.0。 (使用适用于我的OAuth 2.0需求的Java/Android版Google API客户端库)。在Android上使用OAuth 2.0使用Google API的最佳方式

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

该应用程序当前正在使用基于OAuth 1.0的基于Web的流程,其中我的应用程序弹出浏览器以允许用户授权访问,并使用自定义重定向URI,我的应用程序能够检索访问令牌。它工作得很好,但我不喜欢这样的事实,即我需要离开我的应用程序才能弹出浏览器以显示网页。我在想,OAuth 2.0可能会解决这个问题,并允许更好的用户体验。

我开始考虑Adroid AccountManager-OAuth2 integration as outlined at Google IO,因为它不涉及web浏览器,并且与Android更加紧密地耦合,但它不会按照它应该的方式工作。它没有记录,也不清楚它是否仍然是未来可行的选择。

我现在已经开始研究标准的OAuth 2.0 web流程。

在这里,我似乎有2种选择:

配置OAuth 2.0用户端作为安装的应用程序,并使用瓮:IETF:WG:OAuth的:2.0:OOB重定向URI。

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

Using OAuth 2.0 to Access Google APIs docs提到有一些轮询页面标题的方法来解析出URL,但是我也看到了很多可用性问题,并且不想写这种管道代码。如果客户端库存在这样做,我会很乐意进一步调查,但现在,我放弃了这个选项。

将OAuth 2.0客户端配置为web应用程序,并使用重定向URI。

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

下不工作

Intent i = new Intent(Intent.ACTION_VIEW,Uri.parse("http://mysite.com/oauth2/callback")); 
startActivity(i); 

但是当谷歌的OAuth 2页重定向到相同的URL,它只是显示在浏览器。

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

我正在寻找比这里列出的更好的解决方案。

问候, 戴维

回答

13

我结束了使用的WebView组件来加载了谷歌授权的URL。 使用WebviewClient,我可以拦截正在加载到Web视图中的页面,因此,当用户接受或拒绝授权请求时,我能够继续流动。

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

我写下来的一切在一篇博客文章:Oauth 2.0 flow in Android

的文章也使用的Latitude API的OAuth 2.0流样本Android应用程序。 Sample code is available in GitGub

+0

我刚刚使用[Picasa示例]测试了[AccountManager](http://developer.android.com/reference/android/accounts/AccountManager.html)(http://samples.google-api-java- client.googlecode.com/hg/picasa-android-sample/instructions.html?r=default)。您提到的视频(Google I/O 2011)似乎是一个很好的起点。 Picasa的例子对我很好。目前我还没有使用OAuth 2/AccountManager。但看看Picasa源代码,我认为它不是那么混乱。你试过了吗? – 2012-03-22 08:12:55

+0

它应该可以工作,但是在ICS之前,授权屏幕并不真正用户友好。它列出了原始的Oauth2范围。在ICS中它具有人类可读的名称。但是,您没有获得通过基于Web的方法获得的品牌(应用程序图标)。 https://plus.google.com/u/0/112215288642007559493/posts/Zme5LNLwCDP – ddewaele

+0

如果您的应用程序在市场上可用,请指出我的链接?对不起,如果这是一个私人问题,你可以说不,我会理解它... – 2012-03-27 08:57:50

相关问题