[心得] CoreNFC 读西瓜实体卡踩坑纪录(FeliCa)

楼主: ervis (Ervis)   2026-02-09 09:53:03
## 前言
最近在做一个日/韩旅游记帐 App“旅收”,
收到用户许愿说想用 NFC 感应西瓜卡直接记帐,不用手打金额。
觉得这个方向很有趣就开始研究。
查了一轮资料,网络上几乎都写 Suica 的 FeliCa system code 是 88B4,
结果实测完全不是那回事,踩了不少坑,纪录一下。
环境:iPhone 16 Pro / iOS 26 / Xcode 26.1.1 / CoreNFC
## 踩坑纪录
### 坑 1:FFFF 万用码直接被 Apple 拒绝
FeliCa 有个万用 system code FFFF,理论上可以侦测所有卡片。
放进 Info.plist → Apple 直接喷 "Invalid system code entry: FFFF"。
所以必须列举具体的 system codes。
### 坑 2:88B4 超时,拖垮整个 NFC 连线
照网络资料把 88B4 排第一,结果 nfcd daemon 尝试查询时直接超时:
```
nfcd: _getIDMFromTag:systemCode:
nfcd: phNciNfc_RspTimeOutCb: Timer expired!
nfcd: Target Lost!!
```
重点是,这个超时不只是“查询失败”,它会弱化整个 RF 连线。
后面即使换别的 system code 成功连上,App 也只能送 1-2 个指令就断线。
### 坑 3:实测 3 张 Suica,全部没有 88B4
用 requestSystemCode() 查询卡片支援的系统码:
```
3 张不同年份的实体 Suica → ["0003", "FE00", "86A7"]
```
没有一张有 88B4。
目前不确定是所有实体卡都这样,还是跟卡片世代有关。
手边没有 PASMO 可以交叉验证。
如果有板友手上有不同卡片,很好奇 requestSystemCode 会回什么。
### 坑 4:服务藏在 system 0003
既然没有 88B4,那余额 (0x008B) 跟交易历史 (0x090F) 在哪?
用 requestService 逐一探测:
```
System 0003:
0x008B (余额): 存在
0x090F (历史): 存在
System 86A7:
全部 FFFF(无可用服务)
System FE00:
Common Area,没有交通相关服务
```
所以交通卡服务的 service codes 跟网络资料一样(0x008B / 0x090F),
但挂载的 system 不是 88B4 而是 0003。
### 坑 5:Info.plist 顺序决定连线稳定性
nfcd 会按照 Info.plist 的顺序逐一尝试 system code。
排错顺序 → 前面的超时 → 连线不稳 → App 读不到资料。
最终顺序:
```xml
<array>
<string>0003</string> <!
楼主: ervis (Ervis)   2026-02-09 10:51:00
作者: gg90052   2026-02-09 11:12:00
很有潜力的作法,可惜我现在都用apple wallet的suica了
作者: awdrgyjilp22 (Limit)   2026-02-09 11:22:00
用心给推 虽然看不懂
作者: a100820 (~小毓~)   2026-02-09 11:24:00
太神 这真的是免费能用的吗
作者: lovebbqjim   2026-02-09 11:40:00
很棒!不知道你有没有考虑将这些笔记发表在Medium或ITHome,应该能让更多开发者看到
作者: berserkman (to be brave)   2026-02-09 12:05:00
这简直记帐者福音
作者: as209099 (Show小龙)   2026-02-09 12:20:00
推,感觉也可以发到GitHub
作者: kpg0427 (长的不高又不帅)   2026-02-09 12:47:00
看不懂,但推w
楼主: ervis (Ervis)   2026-02-09 15:00:00
感谢 lovebbqjim 建议,我有发表在 iThome, 欢迎来按赞 ^^回 a100820: 免费无误 (app 内有纯赞助支持, 但不影响使用)
作者: ankai (源樱我婆)   2026-02-09 15:23:00
先跪了 太神
作者: lmw (lmw)   2026-02-09 15:51:00
太神了!可惜现在都是用钱包中的西瓜
楼主: ervis (Ervis)   2026-02-09 16:06:00
没错,希望 Apple 能够开放 API 读取,资料就丰富多了
作者: ginlom (牛牛)   2026-02-09 16:48:00
推小结:实测才是真的
作者: ko00385331 (智子)   2026-02-09 17:54:00
作者: cutejojocat (猫猫)   2026-02-10 01:19:00
推一个持续更新新功能
作者: y05192c (育宏)   2026-02-10 03:50:00
实用就给推 介绍给刚好最近要去日本玩的朋友
作者: Syu (海へ)   2026-02-10 05:22:00
认真开发给推
作者: pcmacgyver (小马)   2026-02-10 06:58:00
推作者的用心开发
作者: hymo (我没有胡子也没有3310)   2026-02-10 12:07:00
作者: Donaldren (捏捏)   2026-02-10 12:20:00
推推
作者: sinclaireche (s950449)   2026-02-10 12:57:00
作者: Ethierz (ethierz980109)   2026-02-10 13:15:00
作者: love61106 (葱)   2026-02-10 17:41:00
只能推作者用心 其他就靠板友研究自己摸索了
楼主: ervis (Ervis)   2026-02-10 23:43:00
感谢 sinclaireche 提供资讯,非常完整超棒
作者: sam749 (shinco0327)   2026-02-11 02:04:00

Links booklink

Contact Us: admin [ a t ] ucptt.com