仅当在任何 React Native 应用内浏览器中启用两步验证时,才会出现针对 Google 的 ERR_UNKNOWN_URL_SCHEME

问题描述 投票:0回答:1

我在应用内浏览器中重定向时在 Chrome 中收到

ERR_UNKNOWN_URL_SCHEME
错误,以便在 React Native 中使用回调 URL 的深度链接进行联合身份验证。仅当在 Google 帐户中启用两步验证时才会出现此问题。以下是问题的详细信息以及重现该问题的步骤。

平台详情

平台: Android 10, 11, 12

设备类型:物理设备

以下 Chrome 浏览器版本中出现问题:

  • 稳定:101.0.4951.61
  • 测试版:102.0.5005.58
  • 金丝雀:104.0.5072.0

此问题不会出现在 Chrome 浏览器版本中: 87.0.4280.141

套装版本:

react-native-inappbrowser-reborn version: ^3.6.3
也试过
expo-web-browser version: 9.2.0


触发此问题所需的步骤

  1. 在您的 Google 帐户中启用两步验证,并使用与您将使用 React Native 应用程序的设备相同的设备来获取确认屏幕。
    • 请参阅输入密码后出现的两步验证确认页面的屏幕截图以重现此问题:

  • 然后出现此屏幕,似乎应用程序已导航离开:

  1. 始终清除浏览器 cookie,以强制清除浏览器会话并注销 Chrome 中的所有 Google 帐户。为此:Chrome > 设置 > 隐私和安全 > 清除浏览数据 > 高级 > 将时间范围设置为所有时间 > 选择所有复选框 > 清除数据
  2. 使用
    inAppbrowser.openAuth(...)
    /
    openAuthSessionAsync(...)
    使用 Google 作为身份提供商进行登录
  3. 由于该帐户尚未登录 Chrome 浏览器,因此会要求提供电子邮件 ID 和密码,请输入凭据
  4. 然后将出现两步验证页面,如上面的屏幕截图所示。
  5. 此后不久,“您要登录吗?”屏幕显示如上面的屏幕截图所示。按“是的,是我”按钮。然后这个屏幕就消失了。
  6. 在应用内浏览器中显示此错误:
    <your_scheme>: links are blocked
    ,错误代码 =
    ERR_UNKNOWN_URL_SCHEME
    。看这个截图:

在 AndroidManifest.xml 中,这就是我的深度链接 URL(假设为“my_scheme”)的配置方式:

<intent-filter android:label="filter_react_native">
   <action android:name="android.intent.action.VIEW"/>
   <category android:name="android.intent.category.DEFAULT"/>
   <category android:name="android.intent.category.BROWSABLE"/>
   <data android:scheme="my_scheme"/>
</intent-filter>

这就是我从

openAuth
 调用 
react-native-inappbrowser-reborn

函数的方式
const { type, url: newUrl } = await InAppBrowser.openAuth(
  url,
  redirectUrl,
  {
    showInRecents: true, // browser dismisses when set to false
    forceCloseOnRedirection: false, // same issue when set to true 
    showTitle: false,
    enableUrlBarHiding: true,
    enableDefaultShare: false,
    ephemeralWebSession: false,
  }
);

对于

expo-web-browser
模块,这是我如何调用
openAuthSessionAsync
:

const { type, url: newUrl } = await WebBrowser.openAuthSessionAsync(
  url,
  redirectUrl,
  {
    showInRecents: true,
    toolbarColor: Colors.primaryVariant,
    createTask: false,
  },
);

我尝试使用其他两步验证方式,例如短信/身份验证器应用程序代码。在这两种情况下,即使我将应用程序放在后台打开短信应用程序或身份验证器应用程序(Google Authenticator),然后再次切换回 React Native 应用程序,应用程序内浏览器也会重定向到 React-Native 应用程序,并且我不明白这个

ERR_UNKNOWN_URL_SCEME
问题。

应用内浏览器模块(

expo-web-browser
以及
react-native-inappbrowser-reborn
)中都存在此问题。

不知何故,用于确认身份的 Google 身份验证覆盖会破坏使用深度链接 URL 重定向到 React-Native 应用程序。当使用设备的两步验证已使用“是”进行响应或根本未配置且应用程序无缝登录时,不会出现此问题。

任何帮助或解决方案的指示将不胜感激。如果需要更多详细信息,请在评论中告诉我。

android react-native google-chrome single-sign-on deep-linking
1个回答
0
投票

我注意到这个问题已在较新版本的 Android System Webview 和相应版本的基于 Chrome 的浏览器中得到修复。

为了确保用户使用的是最新版本的webview:我检查了Android中安装的默认webview应用程序的包名称,然后检查了版本。如果版本早于 105.x(一个相当新的版本,问题似乎已得到解决),则显示一个对话框,通知用户更新 webview 应用程序以及一个重定向到该应用程序的 Google Play 商店页面的按钮webview 包。

但我相信到 2023 年可能不需要这样做,因为现在几乎所有用户都会升级到最新版本,但是,上述检查仍然很好,以防万一出现源自 webview 弹出窗口的类似问题未来。

© www.soinside.com 2019 - 2024. All rights reserved.