React Native点击Pressable无法唤起已安装bKash App跳转应用商店
问题原因
你当前代码直接传入的是Google Play商店的bKash详情页链接,并非bKash应用注册的可被系统识别的唤起协议地址,系统不会主动匹配本地已安装的bKash客户端,因此会直接打开链接指向的Play商店页面,无法唤起本地App。
解决方案
1. 补充应用查询权限配置
Android 11及以上版本存在包可见性限制,未声明查询权限的App无法检测其他应用是否安装,需要先在android/app/src/main/AndroidManifest.xml的<manifest>标签下添加以下配置:
<queries> <!-- 声明要查询的bKash包名 --> <package android:name="com.bKash.customerapp" /> <!-- 声明要识别的bKash自定义URL Scheme --> <intent> <action android:name="android.intent.action.VIEW" /> <data android:scheme="bkash" /> </intent> </queries>
如果需要适配iOS平台,需要在ios/项目名/Info.plist中添加白名单配置:
<key>LSApplicationQueriesSchemes</key> <array> <string>bkash</string> </array>
2. 修改唤起逻辑
不要直接打开Play商店链接,优先通过Linking.canOpenURL检测本地是否安装bKash客户端,已安装则通过bKash注册的自定义Schemebkash://唤起本地应用,未安装时再兜底跳转Play商店。
完整实现代码如下:
import { Linking, Pressable } from 'react-native'; const handleOpenBKash = async () => { const BKASH_APP_SCHEME = 'bkash://'; const BKASH_PLAY_STORE_URL = 'https://play.google.com/store/apps/details?id=com.bKash.customerapp'; try { const isInstalled = await Linking.canOpenURL(BKASH_APP_SCHEME); if (isInstalled) { // 本地已安装,直接唤起bKash客户端 await Linking.openURL(BKASH_APP_SCHEME); return; } // 未安装则跳转应用商店 await Linking.openURL(BKASH_PLAY_STORE_URL); } catch (error) { console.error('bKash唤起异常', error); // 异常场景兜底跳转应用商店 await Linking.openURL(BKASH_PLAY_STORE_URL); } }; // 替换原有的Pressable逻辑 <Pressable onPress={handleOpenBKash} />
注意事项
- 如果需要唤起bKash后直接进入指定页面(比如支付、转账页),需要在
bkash://后拼接bKash官方开放平台规定的路径和参数,仅使用根scheme只能唤起App首页。 - 自定义Scheme唤起时部分安卓机型会弹出“是否打开应用”的确认弹窗,如果需要无弹窗唤起,可以对接bKash官方的App Links(安卓)/Universal Links(iOS)能力,需要bKash侧配置对应的域名关联规则。
内容的提问来源于stack exchange,提问作者kawsar ahmad
相关产品推荐
相关产品推荐

