Wallet 和 Apple Pay 有什么新功能
What's new in Wallet and Apple Pay
2020年6月23日
一句话判断
Apple Pay 在 2020 年新增了「订单追踪」(Order Tracking)功能,用户可以在 Wallet 中查看物流状态,同时对开发者开放了 PassKit 的大量新 API——如果你做电商或餐饮 app,这些功能直接提升复购率。
这场 Session 讲了什么
这场 Session 聚焦于 Wallet 和 Apple Pay 在 iOS 14 中的更新,主要包括三个方向:
Apple Pay Order Tracking(订单追踪)。用户用 Apple Pay 完成支付后,商家可以把订单信息推送到 Wallet 中,用户可以实时查看订单状态、物流信息、预计送达时间。这取代了传统的「邮件确认 -> 打开链接查物流」的流程。
PassKit 增强。新增了 PKPaymentOrder、PKShippingMethod 的扩展、以及更好的优惠券(Coupon)和购物卡(Store Card)管理。PKAddPassesViewController 支持一次性添加多张 Pass。
Apple Pay on the Web 的改进。Safari 14 中 Apple Pay on the Web 支持 Multi Merchant Payments(一笔支付分给多个商户),适合平台型电商。还新增了对 Payment Request API 的更好支持。
值得深挖的点
Order Tracking 的技术实现
订单追踪基于苹果的 Order API。商户在用户支付后,通过服务器向苹果注册一个订单(包含订单号、商品信息、物流状态),苹果会生成一个 Order URL。用户点击这个 URL 后,订单信息自动添加到 Wallet。后续物流更新通过 Webhook 推送到苹果,Wallet 中的订单状态实时刷新。
对电商 app 的价值
订单追踪的真正价值在于把「支付完成」到「收货确认」的整个流程留在苹果生态内。用户不需要打开你的 app 查物流,不需要保存邮件确认码,Wallet 就是唯一的入口。对于复购型业务来说,Wallet 中的「最近订单」本身就是一个持续的品牌触点。
代码片段
import PassKit
// 在支付完成后设置订单追踪
class ApplePayManager: NSObject, PKPaymentAuthorizationViewControllerDelegate {
func startPayment() {
let request = PKPaymentRequest()
request.merchantIdentifier = "merchant.com.example.store"
request.supportedNetworks = [.visa, .masterCard, .amex]
request.merchantCapabilities = .capability3DS
request.countryCode = "CN"
request.currencyCode = "CNY"
// 添加商品
let item = PKPaymentSummaryItem(label: "iPhone 保护壳", amount: NSDecimalNumber(string: "199.00"))
request.paymentSummaryItems = [item]
let controller = PKPaymentAuthorizationViewController(paymentRequest: request)!
controller.delegate = self
present(controller, animated: true)
}
func paymentAuthorizationViewController(_ controller: PKPaymentAuthorizationViewController,
didAuthorizePayment payment: PKPayment,
handler completion: @escaping (PKPaymentAuthorizationResult) -> Void) {
// 发送支付令牌到服务端
let token = payment.token
// 服务端处理后返回 orderTrackingURL(用于 Wallet 订单追踪)
processPayment(token: token) { result in
switch result {
case .success(let orderInfo):
// 设置订单追踪
let orderDetails = PKPaymentOrderDetails(orderTrackingURL: orderInfo.trackingURL,
orderTypeIdentifier: "com.example.order")
let authResult = PKPaymentAuthorizationResult(status: .success)
authResult.orderDetails = orderDetails
completion(authResult)
case .failure:
completion(PKPaymentAuthorizationResult(status: .failure))
}
}
}
}
最佳实践
- 支付完成后一定要提供 orderTrackingURL。这是 iOS 14 的新能力,实现成本不高(服务端生成一个签名 URL 即可),但用户体验提升明显。用户习惯了在 Wallet 中查物流后,对你的 app 的依赖感会更强。
- 多商品订单要在 Payment Summary 中展示清楚。
PKPaymentSummaryItem可以包含多个商品行和一个总计行。展示越清晰,用户对支付的信任度越高,纠纷率越低。 - Web 端 Apple Pay 和原生端保持一致的体验。如果你同时有 Web 和原生 app,订单追踪在两端都应该可用,不要出现 Web 支付后没有追踪的情况。
还有什么值得关注
- Apple Pay 现在支持「延迟结算」(Deferred Payment),适合预订类场景(酒店、租车),用户授权支付但商户在服务完成后才扣款。
- Wallet 的 Pass 更新现在支持通过 APNs 推送,不需要等用户主动刷新。
- 苹果提供了 Order Tracking 的 JSON Schema 文档,你只需要按格式提供订单数据就能接入。