You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apple Wallet Pass无法自动更新:iOS开发者技术咨询

Apple Wallet Pass自动更新相关疑问解答

我可将服务器下发的Pass添加至Apple Wallet,但无法确定Pass无法自动更新的原因。作为iOS开发者,我的疑问及解答如下:

  • 无需iOS App交互,由后端自动更新Pass时,谁来创建更新后的Pass?
    更新后的Pass由后端服务器负责创建。Apple Wallet的自动更新机制要求后端生成包含更新内容的新版本.pkpass包,之后通过APNs向设备推送更新通知,设备收到通知后会主动从后端配置的地址拉取更新后的Pass文件。

  • 我的iOS App在处理Apple Wallet中Pass的添加与更新时扮演什么角色?
    在Pass添加流程中,App负责下载Pass文件、解析Pass数据,并调用PKPassLibrary接口将Pass添加至系统Wallet;而在自动更新流程中,App完全不需要参与——自动更新由Apple Wallet系统服务与后端直接交互完成,仅当用户通过App手动触发更新操作时,App才需要介入处理。

  • Pass添加至Wallet后,谁负责注册推送通知并获取推送令牌?
    由Apple Wallet系统服务负责注册推送通知并获取推送令牌(device token)。Pass被添加到Wallet后,系统会自动将令牌、设备标识(deviceLibraryIdentifier)、Pass类型标识(passTypeIdentifier)和序列号(serialNumber)发送至Pass文件中指定的后端注册接口,完成更新订阅。

  • 以下API应由后端还是App端调用?https://yourpasshost.example.com/v1/devices/{deviceLibraryIdentifier}/registrations/{passTypeIdentifier}/{serialNumber}
    该API既不由后端调用,也不由App端调用,而是由Apple Wallet系统服务自动调用:当Pass被添加时,系统发送POST请求完成注册;当Pass被移除时,系统发送DELETE请求取消订阅。后端需要实现这个接口来存储设备的订阅信息,后续有更新时通过APNs向对应设备推送通知。

添加Pass至Wallet的代码

let passURL = URL(string: "https://firebasestorage.googleapis.com/v0/b/iospasswallet.appspot.com/o/pass1.pkpass?alt=media&token=397cb8-d939-4241-b8f8-a1f7e4f8d937")!

// Use URLSession to download pass data asynchronously
let session = URLSession.shared
let task = session.dataTask(with: passURL) { (data, response, error) in
    if let error = error {
        print("Error downloading pass data: \(error)")
        return
    }
    
    guard let passData = data else {
        print("Failed to get pass data")
        return
    }

    do {
        let pass = try PKPass(data: passData)
        let passLibrary = PKPassLibrary()
        passLibrary.addPasses([pass]) { (status) in
            DispatchQueue.main.async {
                if status.rawValue == 0 {
                    print("Pass added successfully")
                } else if status.rawValue == 1 {
                    print("Pass review successfully")
                } else {
                    print("Cancelled Status: \(status.rawValue)")
                }
            }
        }
    } catch {
        print("Error creating pass: \(error)")
    }
}

task.resume()

内容的提问来源于stack exchange,提问作者iPhone Programmatically

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 21:40:40