我在应用内浏览器中重定向时在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
上也试过
触发此问题的步骤
- 在您的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-browser
和react-native-inappbrowser-reborn
)均存在此问题。
不知何故,这个用于确认身份的Google身份验证覆盖会使用深度链接的URL重定向到React-Native应用程序。当使用设备的两步验证已响应为“是”或根本未配置且应用程序无缝登录时,不会出现该问题。
任何帮助或解决方案的指针将不胜感激。如果需要更多细节,请在评论中告诉我。
1条答案
按热度按时间f0ofjuux1#
我注意到这个问题已经在较新版本的Android系统Webview和相应版本的基于Chrome的浏览器中得到修复。
要确保用户使用的是最新版本的webview,请执行以下操作:以编程方式检查Android中安装的默认webview应用程序的包名称,然后检查其版本。如果版本早于105.x(一个相当新的版本,问题似乎已经解决),显示一个对话框,通知用户更新webview应用程序沿着显示一个按钮,重定向到该webview包的Google Play商店页面。这需要你为Android编写一个小的本地模块代码。
但我相信在2023年可能不需要这样做,因为现在几乎所有用户都已经升级到了最新版本,但尽管如此,上述检查还是很好的,以防将来出现类似的问题。