React Native使用react-native-version-check做更新提示点击后闪退无法跳转商店
问题根因
- 核心错误是更新按钮的
onPress回调逻辑顺序错误:你先执行了BackHandler.exitApp()直接终止了应用进程,后续的Linking.openURL跳转应用商店的代码完全没有执行机会,进程销毁时残留的待执行JS逻辑还会触发安卓系统层面的崩溃,就是你遇到的闪退和「应用停止运行」报错。 - 次要隐患:
- 安卓11及以上版本要求申请包可见性权限,未配置的情况下即使执行跳转逻辑,也无法正常唤起谷歌Play商店
- 空的
catch块会吞掉所有异常,无法定位其他潜在报错
修复方案
1. 调整按钮点击逻辑顺序
将Linking.openURL放在BackHandler.exitApp()之前执行,且由于Linking.openURL是异步方法,需要给onPress加上async/await保证跳转逻辑执行完成后再退出应用。
2. 补充安卓包可见性配置
在项目的android/app/src/main/AndroidManifest.xml中添加如下配置:
<queries> <intent> <action android:name="android.intent.action.VIEW" /> <data android:scheme="market" /> </intent> <intent> <action android:name="android.intent.action.VIEW" /> <data android:scheme="https" /> </intent> </queries>
3. 补充异常日志输出
给空的catch块加日志打印,方便后续排查问题。
修复后的核心代码
const checkVersion = async () => { try { let updateNeeded = await VersionCheck.needUpdate(); if(updateNeeded && updateNeeded.isNeeded) { Alert.alert ( '请更新应用', '您需要更新到最新版本才能继续使用应用', [ { text: '更新', onPress: async () => { console.log("-I-: Doing the Update App functions"); // 先执行跳转逻辑 await Linking.openURL(updateNeeded.storeURL); // 跳转完成后再退出应用 BackHandler.exitApp(); }, }, ], {cancelable: false}, ); } } catch (error) { console.log("版本检查出错:", error) }; };
内容的提问来源于stack exchange,提问作者user2829196
相关产品推荐
相关产品推荐

