System & Services 进阶 20m
Wallet 和 Apple Pay 的新特性
What's new in Wallet and Apple Pay
2023年6月5日
一句话判断
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 时设置
crossorigin和async属性,确保脚本不阻塞页面加载。 - 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