WWDC Quick Look 💓 By SwiftGGTeam
What's new in Wallet and Apple Pay

What's new in Wallet and Apple Pay

观看原视频

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、price
  • action 属性可选 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 营销视图

    • 为什么值得做:提高转化率,让用户了解分期付款选项
    • 怎么开始:使用 PKPayLaterViewPayLaterView,设置金额和货币
  • 做什么:实现预授权支付功能

    • 为什么值得做:适用于订阅、预订等场景
    • 怎么开始:创建 PKDeferredPaymentRequest,设置付款日期和取消政策
  • 做什么:添加订单追踪功能

    • 为什么值得做:提升用户体验,让用户在 Wallet 中追踪订单
    • 怎么开始:使用 FinanceKit 的 FinanceStore API 保存订单

关联 Session

评论

GitHub Issues · utterances