如何在不使用Web视图的情况下将用户重定向回我的应用程序,以完成Google OAuth?

5
谷歌禁止通过Webview进行OAuth授权的决定给我带来了巨大的麻烦。迁移到替代方案(我目前正在使用建议的AppAuth库)是一个漫长而艰难的过程,用户也反映无法将账户链接到Chrome/设备上(据我所知,现在不可能在没有强制私人浏览会话的情况下完成)。我的最新问题涉及使用Google OAuth登录另一个服务。以下是场景:
用户想要将第三方服务链接到我的应用程序中。他们在第三方服务上的账户已与Google账户关联。为了使用这个第三方服务进行身份验证,他们必须登录其Google账户。问题在于,该第三方服务仅允许http://协议的重定向URI进行OAuth,因此流程看起来像这样:
1. 用户在其Android设备上使用我的应用程序。 2. 用户点击按钮将其第三方账户与我的应用程序链接。 3. 使用appauth库,我启动了一个浏览器或自定义选项卡,其中包含第三方oauth URL,我们称之为http://thirdparty.com/oauth。 4. 从该页面,用户单击“登录Google”按钮,这会触发Google OAuth流程,然后他们按照提示提供其Google账户令牌给thirdparty。 5. 用户批准使用thirdparty验证其Google账户后访问我的应用程序。 6. thirdparty重定向到已注册的redirect_uri,然后在浏览器选项卡中打开,而不是重定向回我的应用程序。
问题在于步骤6。因为我需要注册一个http://协议的重定向URI,所以浏览器选项卡尝试直接加载网页,即使我已经注册了我的应用程序来处理特定的URL。如果用户不需要使用Google登录,我可以轻松地在Webview中完成整个流程并手动捕获重定向,获取令牌,但由于thirdparty允许用户链接其Google账户,我无法使用Webview,因为Google会阻止用户在Webview中进行Google身份验证,因此我被迫将其传递给我无法控制且依赖其正常运行的应用程序或浏览器选项卡(通常情况下无法正常运行)。
我进行了大量搜索,似乎App Links可以通过将我的应用程序注册为链接的主要处理程序来解决我的问题,但它仅适用于Android 6.0+,高于我的设备最低版本,因此我不知道该怎么办。
我的限制条件是:
  1. oauth重定向必须是HTTP方案(thirdparty要求)
  2. 我无法在Webview中进行身份验证(Google要求)
  3. 我需要我的身份验证重定向启动我的应用程序,以便收集令牌
  4. 我需要解决方案适用于Android 5.0+上的所有设备

我在搜索了几个小时后没有找到解决这个问题的方法,并且我找不到与Google oauth团队联系以了解他们的建议的方式。

有人找到了一种方法,可以通过http://链接启动应用程序,而不提示用户并且不需要Android 6.0吗?


你好,你找到解决方法了吗?我正在尝试登录Fitbit。当用户点击“继续使用Google”并输入电子邮件和密码进行身份验证后,会出现一个空白页面。如果你已经解决了这个问题,请告诉我。我已经被这个问题困扰了几个小时。 - Vipin NU
1个回答

2
如果您可以控制重定向URI,那么您可以使用自定义Intent Handler设置您的应用程序以便监听它。这本质上是一种Deep Linking形式,适用于Android 5+(在6中,甚至可以将您的应用程序设置为默认值!)。
对于数据,您很可能需要使用URI本身。但是,假设您控制重定向,那就不会太难。

是的,这就是我正在做的事情,但这并不是最干净的解决方案。有些情况下,用户可能会被提示使用哪个应用程序来处理链接(因为它只是一个HTTP链接),如果他们选择了错误的东西,我就无能为力了。我不喜欢我对流程没有100%的控制。 - user1601456
如果用户正在运行Android 6.0及更高版本,则您的应用将成为默认应用程序。对于5,您无能为力,但如果使用自定义意图方案,则系统应选择您的应用程序。我不知道是否有更好的解决方案,但这至少可以让您开始。 - RestingRobot
1
是的,我是指它“可以工作”,但它的用户体验比我们以前能够做到的要差。谷歌没有添加替代品,提供相同的用户体验,却禁用了webview支持,这真的很烦人。 - user1601456
我们遇到了相同的问题--但在iOS上。 对于Android来说,这些天这个功能很好--使用AppLinks,它会在重定向时打开应用程序。 不幸的是据我所知,iOS不允许通用链接在重定向时打开,这意味着我们无法使用外部浏览器解决iOS上的外部登录问题。 不确定您是否需要在iOS上执行相同操作-如果能提供任何见解将非常好,因为我们陷入了僵局! - Kyle Whittington

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接