3

是否可以使用 Android App Links,https://例如:https://my-app.com/callback在 OAuth2 流程结束时从 Android WebView 重定向回我的应用程序?我知道正常的深层链接是如何工作的,例如com.my-app://my-app://可用于重定向回我的应用程序。据我了解,WebView 不知道如何处理此类协议,将请求传递给操作系统,如果在AndroidManifest.xml.

这可以通过https://方案来完成,还是重定向将始终被 WebView 捕获,并且无法重定向回我的应用程序?

要指定我想通过步骤实现的目标:

  1. 提供了一个 IntentFilterAndroidManifest.xml来处理应用程序链接,例如:
<intent-filter android:autoVerify="true">
 <action android:name="android.intent.action.VIEW" />
 <category android:name="android.intent.category.DEFAULT" />
 <category android:name="android.intent.category.BROWSABLE" />
 <data android:scheme="http" android:host="my-app.com/callback" />
 <data android:scheme="https" />
</intent-filter>
  1. 提供了一个有效assetlinks.jsonhttps://my-app.com/.well-known/assetlinks.json(此时,IntentFilterIntent日志显示 JSON 的验证成功,我可以使用类似的命令从终端打开应用程序npx uri-scheme open https://my-app.com/callback
  2. 我的应用程序通过使用以下网址启动 OAuth2 流程CustomTabsIntent.launchUrl
https://accounts.google.com/o/oauth2/v2/auth?
 scope=email%20profile&
 response_type=code&
 state=state&
 redirect_uri=https://my-app.com/callback&
 client_id=client_id

在这些步骤之后,我希望我的应用程序在成功登录后打开,因为它是 url 的有效处理程序并且不希望卡在浏览器中。这是否可能,或者请求永远不会从浏览器转发到操作系统,因为浏览器是该https://方案的有效处理程序?

如果以上是不可能的,有没有办法从 WebView 导航回应用程序,提供auth_code或唯一的方法是使用自定义方案?

4

2 回答 2

1

事实证明<data android:scheme="http" android:host="my-app.com/callback" />是错误的,而不是这个,<data android:scheme="http" android:host="my-app.com" android:path="/callback" />应该使用。android:host永远不应包含path. 我确认它在没有任何额外用户手势的情况下运行良好,就像它是一个普通的深层链接一样。浏览器实际上识别出这个 url 是一个声明的 url 并将响应转发给应用程序。

于 2021-04-28T12:20:37.913 回答
0

绝对可以(并且推荐)使用这样的声明 HTTPS 方案,尽管我没有使用 WebView 这样做。

棘手的部分是,如果没有用户手势(用户单击),重定向回应用程序将无法可靠地工作。用户体验和可靠性都有些棘手,您可能需要一个“插页式”互联网网页。

在移动 OAuth 中,建议使用AppAuth 模式,其中系统浏览器用于处理重定向,因此应用程序永远无法访问凭据。

有关更多详细信息,请参阅下面的代码示例,您可以在模拟器上运行。示例链接到一些博客文章,其中讨论了优缺点,以便您查看此类解决方案是否符合您的喜好:

于 2021-04-27T18:12:37.610 回答