Highlight
Apple 在 Wallet 和 Apple Pay 中引入了多项更新,包括 Apple Pay Later 分期付款、预授权支付、资金转账、订单追踪改进以及 Tap to Present ID 功能,为开发者提供了更丰富的支付和身份验证 API。
核心内容
Apple Pay Later
Apple Pay Later 允许用户将购买金额分成四期付款。开发者可以在应用或网站中集成 Apple Pay Later 营销视图,向用户展示分期付款选项。
import PassKit
// 检查用户是否符合 Apple Pay Later 条件
let isEligible = PKPayLaterUtilities.validate(amount: 100.0, currency: "USD")
// 创建 Apple Pay Later 视图
let payLaterView = PKPayLaterView(amount: 100.0, currency: "USD")
payLaterView.displayStyle = .standard
payLaterView.action = .learnMore
关键点:
PKPayLaterUtilities.validate用于验证用户是否符合分期条件PKPayLaterView提供四种显示样式:standard、badge、checkout、priceaction属性可选 learnMore 或 calculator
预授权支付
预授权支付允许商家在特定条件下从用户账户扣款。支持三种类型:
- Recurring Payments:定期付款
- Automatic Reload:自动充值
- Deferred Payments:延期付款
import PassKit
// 创建延期付款请求
let deferredItem = PKDeferredPaymentSummaryItem(label: "Hotel Booking", amount: 200.0)
deferredItem.deferredDate = Date(timeIntervalSinceNow: 86400 * 7) // 7天后扣款
let request = PKDeferredPaymentRequest(deferredPaymentSummaryItem: deferredItem)
request.freeCancellationDate = Date(timeIntervalSinceNow: 86400 * 3) // 3天内免费取消
let paymentRequest = PKPaymentRequest()
paymentRequest.deferredPaymentRequest = request
关键点:
PKDeferredPaymentSummaryItem定义延期付款的金额和日期freeCancellationDate设置免费取消期限- 预授权支付使用 merchant token,绑定 Apple ID 而非设备
资金转账
Transfer Funds with Apple Pay 允许用户将资金从账户转账到 Wallet 中的卡片。
import PassKit
// 检查是否支持资金转账
let supportsDisbursements = PKPaymentAuthorizationController.supportsDisbursements(
networks: [.visa, .masterCard],
capabilities: .debit
)
// 创建转账请求
let summaryItem = PKPaymentSummaryItem(label: "Withdrawal", amount: 100.0)
let disbursementItem = PKDisbursementSummaryItem(label: "Amount Received", amount: 95.0)
let request = PKDisbursementRequest(
merchantIdentifier: "merchant.com.example",
currencyCode: "USD",
region: "US",
summaryItems: [summaryItem, disbursementItem]
)
let controller = PKPaymentAuthorizationController(disbursementRequest: request)
controller.delegate = self
controller.present()
关键点:
PKDisbursementRequest用于创建资金转账请求- 第一个 summary item 表示从用户账户扣款的金额
- 最后一个 summary item 必须表示用户实际收到的金额
订单追踪
Wallet 订单追踪功能得到增强,支持更多订单详情和系统集成。
import FinanceKit
// 检查订单是否存在
let financeStore = FinanceStore.shared
let exists = try await financeStore.containsOrder(withIdentifier: "order-123")
// 保存订单到 Wallet
let orderData = try JSONEncoder().encode(signedOrderPackage)
let result = try await financeStore.saveOrder(orderData)
switch result {
case .added:
print("Order added to Wallet")
case .cancelled:
print("User cancelled")
case .newerExists:
print("Newer order already exists")
}
关键点:
FinanceStore.shared提供订单追踪的中央资源containsOrder检查订单是否已存在saveOrder保存订单并返回用户操作结果
Tap to Present ID
Tap to Present ID 允许 iPhone 应用通过 NFC 和蓝牙验证 Wallet 中的身份证件。
import ProximityReader
// 检查设备是否支持
guard MobileDocumentReader.isSupported else { return }
// 创建读取器
let reader = MobileDocumentReader()
let session = try await reader.prepare()
// 创建年龄验证请求
let request = MobileDriversLicenseDisplayRequest(elements: [.ageAtLeast(21)])
try await session.requestDocument(request)
关键点:
MobileDocumentReader用于读取移动驾照MobileDriversLicenseDisplayRequest创建显示请求- 支持年龄验证和身份验证
详细内容
Apple Pay Later 营销视图
在 SwiftUI 中使用 PayLaterView:
import PassKit
struct ContentView: View {
var body: some View {
PayLaterView(amount: 299.99, currency: "USD")
.payLaterViewStyle(.standard)
.payLaterViewAction(.calculator)
}
}
数据请求
let session: MobileDocumentReaderSession = /* ... */
var request = MobileDriversLicenseDataRequest()
request.retainedElements = [.givenName, .familyName, .dateOfBirth, .portrait]
request.nonRetainedElements = [.address, .documentExpirationDate, .drivingPrivileges]
let response = try await session.requestDocument(request)
self.processResponse(response.documentElements)
核心启发
-
做什么:在电商应用中集成 Apple Pay Later 营销视图
- 为什么值得做:提高转化率,让用户了解分期付款选项
- 怎么开始:使用
PKPayLaterView或PayLaterView,设置金额和货币
-
做什么:实现预授权支付功能
- 为什么值得做:适用于订阅、预订等场景
- 怎么开始:创建
PKDeferredPaymentRequest,设置付款日期和取消政策
-
做什么:添加订单追踪功能
- 为什么值得做:提升用户体验,让用户在 Wallet 中追踪订单
- 怎么开始:使用 FinanceKit 的
FinanceStoreAPI 保存订单
关联 Session
- What’s new in SwiftUI — SwiftUI 的新特性
- Meet SwiftUI for spatial computing — SwiftUI 在空间计算中的应用
- What’s new in UIKit — UIKit 的新特性
评论
GitHub Issues · utterances