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_BROWSERbrowser_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
相关产品推荐
相关产品推荐

