我正在开发一个 React Native 应用程序,其中包含许多不同网站的链接。用户应该能够单击链接并被带到正确的位置。但是,目前指向 Google 文档的链接在 Android 上无法正常工作(尚未在 iOS 上进行测试)。当用户单击其中一个链接时,会显示错误。如果他们尝试通过文档应用程序打开它,则会出现错误:“文档查找失败。文档可能已被删除。”。如果他们尝试通过 Chrome 打开它,它会显示“抱歉,您请求的文件不存在”。重要的是,如果您获取链接 URL 并将其粘贴到 Chrome 搜索栏中,它将正确显示文档。
这是我进行链接的方式:
import { Linking } from 'react-native';
const onPress = async () => {
let link = url.toLowerCase();
if (!/^https?:\/\//.test(link) && !/^mailto:/.test(link)) {
link = `https://${link}`;
}
Linking.openURL(link);
};
Android Manifest.xml 包括以下内容:
<manifest ...>
...
<uses-permission android:name="android.permission.INTERNET" />
...
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="https"/>
</intent>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="http"/>
</intent>
</queries>
</manifest>
版本信息:
react-native: 0.66.5 (yes, I know I need to upgrade, but I'm not sure if it will fix this issue)
minSdkVersion = 21
compileSdkVersion = 33
targetSdkVersion = 33
我已检查应用程序尝试打开的链接是否正确。我也尝试过查看 react-native Linking 文档 和 Android 文档 但我已经遵循了 React-native 链接文档中的所有相关说明,在我看来 Android 文档主要关注于传入的深层链接,而不是传出的链接。
好吧,我在发帖后不到24小时就回答了我自己的问题。编码时很容易错过最明显的解决方案。
这里的问题是我在尝试打开 URL 之前将整个 URL 设为小写。我最初添加这部分代码是因为我想让方案小写,但我忘记了某些 URL 会有同时包含小写和大写字母的标识符,因此使整个 URL 小写会更改标识符。
修改此代码以使方案变为小写后,我能够正确打开 Google 文档链接。