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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 09:35:32