如何为iPhone应用添加Apple Wallet的NFC/RFID卡片支持?
实现Apple Wallet NFC虚拟门禁卡功能的技术方案
一、核心前提与权限准备
- 必须基于Apple官方的PassKit框架开发,这是唯一能将自定义凭证添加到Wallet的合法途径,iOS不允许第三方直接模拟普通RFID标签。
- 开发者账号需开启两项关键权限:
- 在Apple开发者后台创建Pass类型ID,并在Xcode项目
Entitlements文件中配置com.apple.developer.passkit.pass-type-identifiers - 开启
NFC Tag Reading权限,配置com.apple.developer.nfc.readersession.formats,包含NDEF和ISO 14443A(对应主流门禁读卡器标准)
- 在Apple开发者后台创建Pass类型ID,并在Xcode项目
- 需与门禁系统运营商深度对接:对方的读卡器必须支持ISO 14443-4协议(Apple Wallet Pass的NFC交互标准),且要共享加密密钥、数据格式规则,否则读卡器无法识别你的Pass。
二、创建可被Wallet识别的NFC Pass
- 制作Pass模板包
生成一个.pass格式的文件夹,包含核心配置文件和资源:pass.json:定义Pass的基本信息与NFC交互规则,关键配置示例:{ "passTypeIdentifier": "pass.com.yourdomain.gymaccess", "teamIdentifier": "YOUR_APPLE_TEAM_ID", "nfc": { "message": "ENCRYPTED_ACCESS_DATA", // 门禁系统识别的加密凭证数据,由运营商提供格式 "encryptionPublicKey": "YOUR_SHARED_PUBLIC_KEY", // 与门禁系统私钥配对的公钥,用于加密消息 "requiresAuthentication": false // 是否需要Touch ID/Face ID验证后才能使用 }, "organizationName": "你的健身房名称", "description": "门禁通行卡", // 其他UI配置、logo路径等字段 }- 资源文件:符合Apple规范的logo、背景图等素材。
- 签名Pass包
使用Apple开发者后台下载的Pass签名证书,对.pass包进行签名,生成.pkpass文件——只有签名后的Pass才能被iOS信任并添加到Wallet。
三、App内集成Pass添加功能
- 导入PassKit框架,实现
PKAddPassesViewControllerDelegate协议:import PassKit class AccessPassManager: NSObject, PKAddPassesViewControllerDelegate { func addPassToWallet(from passData: Data) { do { let pass = try PKPass(data: passData) let addVC = PKAddPassesViewController(pass: pass) addVC.delegate = self // 从当前ViewController弹出添加界面 UIApplication.shared.keyWindow?.rootViewController?.present(addVC, animated: true) } catch { print("Pass解析失败: \(error.localizedDescription)") // 提示用户错误信息 } } func addPassesViewControllerDidFinish(_ controller: PKAddPassesViewController) { controller.dismiss(animated: true) // 处理添加完成后的逻辑,比如提示用户已添加 } } - 获取PKPass文件:
推荐从你的后端服务器下载签名好的.pkpass文件(便于后续动态更新凭证),用户登录并验证身份后,请求服务器生成对应权限的Pass并返回。
四、门禁系统对接关键细节
- 加密规则:NFC消息必须用双方约定的密钥加密,防止凭证被伪造,通常采用AES或RSA加密算法,具体规则由门禁运营商提供。
- 读卡器兼容性:确认门禁读卡器已升级到支持Apple Wallet Pass的固件,部分旧设备可能无法识别。
- 凭证更新:如果用户权限变更(比如会员到期),可通过PassKit的Web Service推送更新,Wallet会自动同步最新的Pass数据。
五、测试与发布注意事项
- 必须用真实iOS设备测试(模拟器不支持NFC和Wallet功能),系统版本需在iOS 11及以上。
- 提交App Store审核时,需在审核说明中明确NFC功能的用途(比如健身房门禁),避免因权限说明模糊被拒。
内容的提问来源于stack exchange,提问作者Anton Ozeryanskyy
相关产品推荐
相关产品推荐

