我正在尝试将一个使用OAuth 1.0a的Android应用迁移到OAuth 2.0。 (对于我的OAuth 2.0需求,使用Google API客户端库进行Java / Android)。在考虑可用性方面,什么是在Android平台上使用OAuth 2.0访问Google API的最佳/首选解决方案?用户应该能够轻松授权访问,并与我的Android应用程序无缝集成。该应用程序目前正在使用基于Web的OAuth 1.0流程,其中我的应用程序弹出浏览器以让用户授权访问,并使用自定义重定向URI,我的应用程序能够检索访问令牌。它工作得很好,但我不喜欢我需要离开我的应用程序来弹出浏览器显示网页的事实。我想OAuth 2.0可能会解决这个问题,并提供更好的用户体验。
我开始研究Google IO中概述的Adroid AccountManager-OAuth2集成,因为它不涉及Web浏览器,与Android更加紧密地耦合在一起,但它并没有按照应有的方式工作。它没有文档说明,并且不清楚它是否将来仍然是一个可行的选择。
现在,我开始调查标准的OAuth 2.0 Web流程。
这里似乎有两个选项: 将OAuth 2.0客户端配置为已安装的应用程序,并使用urn:ietf:wg:oauth:2.0:oob重定向URI。 这不是一个很干净的解决方案,因为我不会让我的用户将一些代码复制粘贴到我的应用程序中。这完全不用户友好。
我开始研究Google IO中概述的Adroid AccountManager-OAuth2集成,因为它不涉及Web浏览器,与Android更加紧密地耦合在一起,但它并没有按照应有的方式工作。它没有文档说明,并且不清楚它是否将来仍然是一个可行的选择。
现在,我开始调查标准的OAuth 2.0 Web流程。
这里似乎有两个选项: 将OAuth 2.0客户端配置为已安装的应用程序,并使用urn:ietf:wg:oauth:2.0:oob重定向URI。 这不是一个很干净的解决方案,因为我不会让我的用户将一些代码复制粘贴到我的应用程序中。这完全不用户友好。
使用OAuth 2.0访问Google APIs文档提到有一种轮询页面标题来解析URL的方法,但我认为这样会带来很多可用性问题,并且不想编写此类代码。如果存在客户端库可以为我完成此操作,我将很乐意进一步研究,但目前,我已放弃了此选项。
将OAuth 2.0客户端配置为Web应用程序,并使用重定向URI。
在这里,我注意到OAuth 2.0中禁止使用非标准方案。以前,可以使用类似于xoauth://callback的东西,但现在不允许了。 当配置重定向URI时,例如http://mysite.com/oauth2/callback,尽管已经为其设置了正确的意图过滤器,但在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);
但是当Google OAuth 2页面重定向到相同的URL时,它只会在浏览器中显示。
即使这样可以工作,用户仍然会看到一个选择器弹窗(在浏览器中打开或使用我的Android活动打开)。从可用性角度来看,这也是不可接受的。
我正在寻找比此处概述的更好的解决方案。
谢谢, Davy