Flutter iOS端指定打开GooglePay实现UPI支付方案咨询
Flutter iOS端指定打开Google Pay完成UPI支付解决方案
核心问题原因
直接使用通用upi:// scheme在iOS上会触发系统的UPI应用选择器,无法指定唤起Google Pay。要实现精准唤起,需要使用Google Pay专属的URL Scheme,并完成iOS端的配置。
解决方案步骤
1. 使用Google Pay专属URL Scheme
Google Pay在iOS上的专属Scheme为gpay://upi/pay,替换通用的upi://即可直接唤起Google Pay应用,不会触发系统选择器。
2. iOS端配置(Info.plist)
必须在项目的Info.plist中添加允许查询的Scheme,否则url_launcher会无法检测到Google Pay应用:
- 打开
ios/Runner/Info.plist - 添加
LSApplicationQueriesSchemes数组键,在数组中添加字符串gpay
配置后的片段示例:
<key>LSApplicationQueriesSchemes</key> <array> <string>gpay</string> </array>
3. 修改Flutter代码
更新URL构造逻辑,使用Google Pay专属Scheme,并对特殊字符进行URL编码(比如支付备注里的空格),避免解析错误:
import 'package:url_launcher/url_launcher.dart'; import 'package:flutter/foundation.dart'; void _launchGooglePay() async { // 对含特殊字符的参数进行URL编码 String paymentNote = Uri.encodeComponent("Test Payment"); String upiUrl = 'gpay://upi/pay?pa=xxx@okicici&pn=Test&am=1&tn=$paymentNote&cu=INR'; // 先检查是否可唤起Google Pay bool canLaunchGPay = await canLaunchUrl(Uri.parse(upiUrl)); if (canLaunchGPay) { bool result = await launchUrl(Uri.parse(upiUrl)); debugPrint("Google Pay 唤起结果: $result"); print(result ? "唤起成功" : "唤起失败"); } else { print("未安装Google Pay应用"); // 可选:降级唤起通用UPI选择器 String universalUpiUrl = 'upi://pay?pa=xxx@okicici&pn=Test&am=1&tn=$paymentNote&cu=INR'; bool canLaunchUniversal = await canLaunchUrl(Uri.parse(universalUpiUrl)); if (canLaunchUniversal) { await launchUrl(Uri.parse(universalUpiUrl)); } else { print("未安装任何UPI支付应用"); } } }
关键注意事项
- 确保测试设备已安装Google Pay应用,模拟器无法测试该功能
- UPI参数需严格遵守规范:
pa为有效的UPI收款ID,am为数字格式的金额字符串,cu必须为INR(印度卢比) - 依赖的
url_launcher需使用最新版本,避免兼容性问题 - 若用户未安装Google Pay,可添加降级逻辑唤起通用UPI选择器,提升用户体验
内容的提问来源于stack exchange,提问作者Taniksha Sharma
相关产品推荐
相关产品推荐

