You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 19:24:20