What's new in Wallet and Apple Pay
System & Services 进阶 20m

Wallet 和 Apple Pay 的新特性

What's new in Wallet and Apple Pay

2023年6月5日

在 Apple 官方观看视频

一句话判断

Apple Pay Later 的营销视图 API 和延期付款功能是今年最有商业价值的更新——如果你的 App 涉及电商或预约类场景,这两个功能值得立刻评估接入。

这场 Session 讲了什么

Session 聚焦三个领域:支付(Payments)、订单追踪(Order Tracking)、身份验证(Identity)。

支付部分

  • Apple Pay Later 营销视图:新的 PKPayLaterView(UIKit)和 PayLaterView(SwiftUI)组件,在商品页面或结算流程中展示”分期付款”信息。支持四种显示风格:standard、badge、checkout、price。交互动作可选”Learn More”(概览说明)或”Calculator”(还款计划计算器)。Web 端通过 Apple Pay JavaScript SDK 的 apple-pay-merchandising 元素实现。
  • 延期付款(Deferred Payments):iOS 16 引入的预授权支付今年新增了延期付款类型,可以在未来某个日期扣款(固定或可变金额),还能设置免费取消截止日期。典型场景是酒店预订、商品预购。
  • 预授权支付使用 Apple Pay merchant token,绑定用户 Apple ID 而非设备,换设备后 token 仍然有效。

订单追踪部分

  • 增强了订单追踪的能力,让商家可以更细粒度地更新订单状态。

身份验证部分

  • 对 identity verification 流程进行了增强。

值得深挖的点

Apple Pay Later 的营销视图不只是展示组件,它是一个完整的转化工具。四种显示风格对应不同的 UI 位置——badge 适合商品列表,checkout 适合结算页,price 适合商品详情页。两种交互动作也有明确分工:Learn More 偏教育性质,Calculator 偏决策辅助。这种分层设计说明 Apple 在认真思考分期付款的用户决策路径。

延期付款中的免费取消截止日期是个有意思的约束。当你设置了这个日期,等于向系统声明”在这个日期之前取消不收费”。系统会在 Apple Pay 支付表中展示这个信息给用户。如果你的业务逻辑实际上做不到免费取消,就不要设置这个日期。

Merchant Token 的可靠性提升是个容易被忽略但很重要的改进。传统 Apple Pay token 绑定设备,用户换手机就失效。merchant token 绑定 Apple ID,跨设备有效。对于预授权支付这种”今天授权、未来扣款”的场景,token 的生命周期直接影响收款成功率。

代码片段

SwiftUI 中使用 Apple Pay Later 营销视图:

import PassKit

// 检查用户是否符合 Apple Pay Later 使用条件
let isEligible = PKPayLaterUtilities.validate(
    amount: NSDecimalNumber(value: 99.99),
    locale: Locale(identifier: "en_US")
)

// SwiftUI 营销视图
if isEligible {
    PayLaterView(
        amount: NSDecimalNumber(value: 99.99),
        locale: Locale(identifier: "en_US")
    )
    .payLaterDisplayStyle(.checkout)      // 显示风格
    .payLaterActionStyle(.calculator)     // 交互动作:展示还款计划
}

创建延期付款请求:

// 创建延期付款条目——描述未来某天的扣款
let deferredItem = PKDeferredPaymentSummaryItem(
    label: "酒店预订",
    amount: NSDecimalNumber(value: 299.00)
)
deferredItem.deferredDate = Calendar.current.date(
    byAdding: .day, value: 7, to: Date()
)!  // 7天后扣款

// 创建延期付款请求
let deferredRequest = PKDeferredPaymentRequest(
    summaryItems: [deferredItem]
)
deferredRequest.freeCancellationDate = Calendar.current.date(
    byAdding: .day, value: 3, to: Date()
)  // 3天内可免费取消
deferredRequest.billingAgreement = "预订条款内容..."

// 将延期付款附加到支付请求
let paymentRequest = PKPaymentRequest()
paymentRequest.deferredPaymentRequest = deferredRequest
// ... 继续配置支付请求并展示

最佳实践

  • Apple Pay Later 营销视图需要 entitlement,在 Apple Developer Portal 申请。
  • Web 端使用营销 SDK 时设置 crossoriginasync 属性,确保脚本不阻塞页面加载。
  • Web 端需要在 Apple Developer Portal 注册域名并获取 JWT 用于 API 认证。
  • 延期付款的金额和日期必须在创建时就确定,不支持后续修改。如果金额可能变化,使用 variable amount 类型。
  • 不要在没有免费取消政策的情况下设置 freeCancellationDate,这会误导用户并可能导致纠纷。
  • 营销视图的尺寸遵循最小尺寸要求,不要过度压缩以免信息不可读。

还有什么值得关注

  • Apple Pay Later 目前仅限美国用户,但 API 设计上是全球化的——通过 locale 参数控制展示语言。
  • Web 端的 Apple Pay JavaScript SDK 是独立的,需要和主页面脚本分开加载,注意 Content Security Policy 的配置。
  • 预授权支付的三种类型(recurring、automatic reload、deferred)可以在同一个 App 中混合使用。
  • Merchant Token 在支持的银行会自动使用,不支持的情况下回退到设备绑定 token,无需开发者额外处理。
  • 如果你的 App 已经接入了 Apple Pay,升级到支持预授权支付的改动量不大——核心区别在于 PKPaymentRequest 上附加了不同的 payment request 类型。
WWDC 2023