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

Expo React Native如何转换Android intent链接通过Linking唤起已安装应用

Expo Android 唤起TWINT支付实现方案

问题根因

Linking.openURL() 无法直接解析intent://格式的串,Expo Go内部的路由处理逻辑和系统浏览器不同,不会自动将intent链接转换成原生Intent对象,所以才会报错。

实现方案

你可以直接将intent链接里的参数拆解后传入Linking.sendIntent(),不需要修改原生代码,完全符合Expo托管工作流的要求。

原intent参数拆解

你提供的intent串里的核心参数提取如下:

  • action值:ch.twint.action.TWINT_PAYMENT
  • 字符串类型Extra参数:
    • code:值为你的业务生成的{token}
    • startingOrigin:固定值EXTERNAL_WEB_BROWSER
    • browser_fallback_url:空值

完整代码示例

import { Linking, Platform } from 'react-native';

// 唤起TWINT支付
const triggerTwintPayment = async (paymentToken) => {
  // 仅安卓平台使用sendIntent方案
  if (Platform.OS !== 'android') {
    // 非安卓场景可自行对接TWINT的iOS唤起逻辑
    return;
  }

  // 预检查是否安装TWINT应用
  const hasTwintInstalled = await Linking.canOpenURL('twint://');
  if (!hasTwintInstalled) {
    alert('请先安装TWINT应用后再尝试支付');
    return;
  }

  try {
    await Linking.sendIntent(
      'ch.twint.action.TWINT_PAYMENT',
      [
        { key: 'code', value: paymentToken },
        { key: 'startingOrigin', value: 'EXTERNAL_WEB_BROWSER' },
        { key: 'browser_fallback_url', value: '' }
      ]
    );
  } catch (err) {
    console.error('唤起TWINT支付失败:', err);
    alert('支付唤起失败,请重试');
  }
}

注意事项

  • 该方案在Expo Go开发环境和编译后的正式安卓包都可以正常运行,不需要添加任何原生定制代码
  • 不需要额外处理原intent里的scheme=twint参数,系统会通过action自动匹配到TWINT应用的intent filter

内容的提问来源于stack exchange,提问作者Esteban Chornet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:15:05