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

Flutter中如何从Apple/Google Pay获取账单或配送地址?

基于Flutter pay库:获取Apple/Google Pay地址预填及通讯录集成方案

一、能否从系统钱包获取地址做预填?

完全可以,你使用的pay库本身就支持在支付流程中请求并获取Apple/Google Pay中的账单或配送地址,无需额外调用系统钱包的独立接口:

  • Apple Pay:在你的Apple Pay配置(PaymentConfiguration)中,添加requiredBillingContactFields或requiredShippingContactFields字段,指定需要收集的地址信息(比如postalAddress)。用户发起支付时,系统会弹出授权窗口,同意后就能在支付回调中拿到完整的地址数据,直接用于预填你的表单。
  • Google Pay:同样在Google Pay的配置里,开启shippingAddressRequired或billingAddressRequired参数,并设置shippingAddressParameters指定需要的地址字段。用户授权后,支付回调会返回对应的地址信息。

示例配置片段(Apple Pay):

{
  "provider": "apple_pay",
  "data": {
    "merchantIdentifier": "你的商户ID",
    "supportedNetworks": ["visa", "mastercard"],
    "countryCode": "CN",
    "currencyCode": "CNY",
    "requiredBillingContactFields": ["postalAddress"],
    "requiredShippingContactFields": ["postalAddress"]
  }
}

获取地址的回调示例:

void handlePaymentResult(Map<String, dynamic> paymentResult) {
  // 提取配送地址
  final shippingAddr = paymentResult['shippingContact'];
  // 提取账单地址
  final billingAddr = paymentResult['billingContact'];
  
  // 将地址字段映射到你的表单输入框
  // 比如 shippingAddr['postalAddress']['street'] 等字段
}

二、通讯录与Apple/Google Pay地址的集成办法

没有直接的系统级集成方式,但可以通过以下方式实现关联:

  1. 获取通讯录地址:使用Flutter的通讯录插件(比如contacts_service),请求通讯录读取权限后,获取用户通讯录中的地址信息。
  2. 地址匹配整合:将从通讯录拿到的地址,与Apple/Google Pay返回的地址做字段匹配(比如姓名、邮编、街道等),在应用中提供选项让用户选择是否合并或直接使用某一个地址,或者自动标记常用地址供快速选择。
  3. 权限配置:记得在iOS的Info.plist中添加NSContactsUsageDescription,在Android的AndroidManifest.xml中添加READ_CONTACTS权限,确保能正常读取通讯录。

注意事项

  • 无论是获取Pay地址还是通讯录,都必须明确向用户说明用途,符合隐私合规要求。
  • 不同平台的地址字段结构略有差异,处理时要做好兼容,比如Apple Pay的地址字段嵌套层级和Google Pay的可能不同。

内容的提问来源于stack exchange,提问作者Osama Remlawi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 19:17:23