通过短信发送UPI intent字符串无法识别为可点击链接唤起UPI应用如何解决
短信UPI Intent可点击识别实现方案
问题根因
- 安卓原生及各品牌自带短信应用的自动链接识别规则,默认仅覆盖
http/https/tel/mailto/ftp这类公开通用协议,upi://属于应用自定义私有协议,不在默认识别范围内,所以会显示为纯文本。 - Slack、微信这类第三方应用自行实现了自定义协议的链接匹配逻辑,所以可以正常识别
upi://串为可点击链接。
可行解决方案
方案1:HTTP跳转封装(行业通用首选)
这是目前所有UPI支付服务商普遍采用的方案,无机型适配问题:
- 后端生成对应支付单的HTTP跳转链接,示例:
https://你的业务域名.com/pay/upi?order_no=EZV2021111610485300031599 - 短信中发送该HTTP链接,所有机型的短信应用都可以识别为可点击链接
- 用户点击链接唤起系统浏览器后,后端根据订单号拼接完整UPI Intent串,返回302跳转响应,响应头
Location值为完整的UPI串:upi://pay?pa=testuat@icici&pn=test&tr=EZV2021111610485300031599&am=1.00&cu=INR&mc=5411 - 浏览器接收到跳转请求后,会自动触发系统Intent匹配,唤起所有支持UPI的应用列表供用户选择
该方案不需要用户做任何额外操作,兼容100%支持UPI支付的安卓机型。
方案2:RCS富媒体消息实现
如果你的业务支持发送RCS富媒体消息,可直接在RCS消息内容中发送upi://开头的完整Intent串,RCS协议默认支持私有协议链接识别,接收方设备如果支持RCS就可以直接点击唤起UPI应用。
方案3:用户手动开启短信识别(不推荐)
仅部分机型支持手动打开自定义协议识别,操作路径大致为:短信应用设置→高级设置→开启「识别所有链接/非标准网址」选项,该方案用户操作成本高、机型覆盖率极低,仅可作为补充提示。
内容的提问来源于stack exchange,提问作者Akash Manoj
相关产品推荐
相关产品推荐

