【问题标题】:Best way to use Google APIs using OAuth 2.0 on Android在 Android 上使用 OAuth 2.0 使用 Google API 的最佳方式
【发布时间】:2011-10-21 11:18:49
【问题描述】:

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

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

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

我开始查看Adroid AccountManager-OAuth2 integration as outlined at Google IO,因为它不涉及网络浏览器,并且与 Android 的耦合更紧密,但它根本没有按应有的方式工作。它没有记录在案,也不清楚它是否在未来仍然是一个可行的选择。

我现在开始研究标准 OAuth 2.0 网络流程。

这里我似乎有 2 个选项:

将 OAuth 2.0 客户端配置为已安装的应用,并使用 urn: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);

但是当 Google OAuth 2 页面重定向到同一个 URL 时,它只是显示在浏览器中。

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

我正在寻找比此处概述的解决方案更好的解决方案。

问候, 戴维

【问题讨论】:

    标签: android oauth-2.0 google-api-java-client


    【解决方案1】:

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

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

    我已经在一篇博文中写下了所有内容:Oauth 2.0 flow in Android

    这篇博文还包含一个使用 OAuth 2.0 流程和 Latitude API 的示例 Android 应用。 Sample code is available in GitGub.

    【讨论】:

    • 我刚刚用Picasa sample 测试了AccountManager。您提到的视频(Google I/O 2011)似乎是一个很好的起点。 Picasa 示例对我有好处。目前我还没有使用过 OAuth 2/AccountManager。但是看看 Picasa 的源代码,我认为它并没有那么令人困惑。你试过了吗?
    • 它应该可以工作,但是在 ICS 之前,授权屏幕并不是真正的用户友好。它列出了原始 Oauth2 范围。在 ICS 中,它具有人类可读的名称。但是您不会获得通过基于 Web 的方法获得的品牌(应用程序图标)。 plus.google.com/u/0/112215288642007559493/posts/Zme5LNLwCDP
    • 如果您的应用在市场上有售,能否请您指出它的链接?对不起,如果这是一个私人问题,你可以说不,我会理解的......
    【解决方案2】:

    Play 服务是在 2013 年 Google I/O 上推出的,现在是 the official way to use OAuth2 in Android。它们不需要 WebView。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-18
      • 2011-08-30
      • 2015-01-30
      • 2016-09-14
      • 2014-05-02
      • 2015-11-11
      • 2012-09-19
      • 2020-12-24
      相关资源
      最近更新 更多