Chrome ERR_UNKNOWN_URL_SCHEME仅当在任何React Native应用内浏览器中启用两步验证时适用于Google

h6my8fg2  于 2023-09-28  发布在  Go
关注(0)|答案(1)|浏览(130)

我在应用内浏览器中重定向时在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.3expo-web-browser version: 9.2.0上也试过

触发此问题的步骤

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

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

1.始终清除浏览器Cookie,以强制清除浏览器会话并注销Chrome中的所有Google帐户。要执行此操作,请执行以下操作:Chrome >设置>隐私和安全>清除浏览数据>高级>将时间范围设置为所有时间>选中所有复选框>清除数据
1.使用inAppbrowser.openAuth(...)/openAuthSessionAsync(...)以Google作为身份提供商登录
1.由于该帐户尚未登录到Chrome浏览器,它将要求电子邮件ID和密码,输入凭据
1.然后出现两步验证页面,如上面的屏幕截图。
1.不久之后,“你想登录吗?“屏幕显示与上面的屏幕截图相似。按下“是我”按钮然后这个屏幕消失了。
1.在应用内浏览器中显示此错误:<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>

这就是我如何从react-native-inappbrowser-reborn调用openAuth函数

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,
  },
);

我尝试使用其他两步验证方法,如SMS/身份验证器应用程序代码。在这两种情况下,即使我将应用程序置于后台,打开我的SMS应用程序或身份验证器应用程序(Google Authenticator),然后再次切换回React Native应用程序,应用程序内浏览器也会重新定向到React-Native应用程序,并且我不会遇到这个ERR_UNKNOWN_URL_SCEME问题。
应用内浏览器模块(expo-web-browserreact-native-inappbrowser-reborn)均存在此问题。
不知何故,这个用于确认身份的Google身份验证覆盖会使用深度链接的URL重定向到React-Native应用程序。当使用设备的两步验证已响应为“是”或根本未配置且应用程序无缝登录时,不会出现该问题。
任何帮助或解决方案的指针将不胜感激。如果需要更多细节,请在评论中告诉我。

f0ofjuux

f0ofjuux1#

我注意到这个问题已经在较新版本的Android系统Webview和相应版本的基于Chrome的浏览器中得到修复。
要确保用户使用的是最新版本的webview,请执行以下操作:以编程方式检查Android中安装的默认webview应用程序的包名称,然后检查其版本。如果版本早于105.x(一个相当新的版本,问题似乎已经解决),显示一个对话框,通知用户更新webview应用程序沿着显示一个按钮,重定向到该webview包的Google Play商店页面。这需要你为Android编写一个小的本地模块代码。
但我相信在2023年可能不需要这样做,因为现在几乎所有用户都已经升级到了最新版本,但尽管如此,上述检查还是很好的,以防将来出现类似的问题。

相关问题