为Zenfone 2开启NFC SIM卡刷公交支持

我在 4 月份买的华硕 Zenfone 2 ZE551ML 手机已经上手使用一段时间了,当初也看中这款 Zenfone 2 ZE551ML 手机是支持 NFC 功能的,测试使用 NFC 标签配合 Trigger+Tasker 触发任务或者 Smart Lock 智能解锁都是比较好用的。同样我还试过开启招商银行的「掌上生活」App 中的「一闪通」功能(其实就是银联云闪付)进行 NFC 刷手机支付。

不过在使用中国联通的 NFC SIM 卡进行刷公交或者地铁时发现存在问题,根本无法使用,鉴于网上也有不少别的用户碰到这种问题(比较坑的是有人已经给 NFC SIM 卡充完值才发现刷公交或地铁没反应),这里我把解决的方法写出来供大家参考。

NFC 问题说明

首先说下开启联通 NFC SIM 卡刷公交功能的流程:

  1. 首先确认所在城市以及你使用的移动运营商支持 NFC SIM 卡刷公交,这个到网上都可以找到相应的介绍,我所用的南京联通是和智汇市民卡合作支持手机 SIM 卡刷公交的;
  2. 在中国联通沃支付网站上确认你所使用的手机是否在其「手机钱包」业务的兼容机型列表中:
    https://epay.10010.com/wop/wallet
  3. 去营业厅将手机 SIM 卡更换为 NFC SWP SIM 卡,联通的话必须去其自有营业厅办理,社会营业厅无法办理,换 NFC SWP SIM 卡一般是免费的;
  4. 接着需要在自有营业厅开通手机钱包业务;
  5. 下载中国联通沃钱包 App,可以在「沃钱包」App 中注册联通沃支付账户;
  6. 在「沃钱包」App 中安装「手机钱包」卡包功能插件;
  7. 确认「卡包」中能找到手机公交卡就可以在公交地铁充值网点进行充值及手机刷公交和地铁了。

刚好我使用的 Zenfone 2 手机是在联通手机钱包业务兼容机型列表中,Android 系统版本是 5.0.2,打开「沃钱包」App(版本:3.5.0)也能正常安装「手机钱包」卡包功能插件(版本:1.4.0):

沃钱包 App

沃钱包 App

进入「卡包」功能还能认到手机 NFC SIM 卡的公交卡:

NFC SIM 公交卡

NFC SIM 公交卡

不过悲剧的就是拿着手机到任何一个公交或者地铁充值点都不能识别到卡信息,充值机或者公交刷卡机、地铁闸机都没有任何反应,当然也没有办法充值或者刷卡了。

问题分析

Android 手机上的 NFC 支付功能是使用 NFC 的卡模拟工作方式,出于对 NFC 通信安全的考虑,如果需要使用 NFC 卡模拟,除了手机自带的 NFC 控制器外,还需要 SE(Secure Element)元件即安全元件,它的作用是用来存储用户的敏感信息,例如银行卡卡号、密码之类的,其一般采用硬件加密方式。

目前 Android 上常见的 NFC 卡模拟 SE 方案有:

  • SE 元件内置在手机中;
  • SE 元件内置在 SIM 卡中;
  • SE 元件内置在专用 SD 卡中;
  • Google 推出的 HCE 技术,即 Host-based card emulation。

前 3 种由于需要特定手机或者 SIM 卡、SD 卡等硬件支持,因此 Google 搞了基于主机的卡模拟模式,如果使用这种方案系统可以将一个 App 或者一个云端作为一个虚拟 SE 来实现 NFC 支付,这样可以摆脱对硬件的依赖。Android 5.0 或者 6.0 之后 Google 也默认使用 HCE 方式的主机卡模拟方案。

像本文开头说的招商银行一闪通就是使用的第一种手机内置 SE 方案,而今天我们所要使用的 NFC SIM 卡当然就是用的第二种 SIM SWP 方案,也是广大移动运营商们主推的方案,经过搜索我发现华硕 Zenfone 2 采用的 Broadcom BCM20795 NFC 芯片是支持 SIM SWP 方案的,联通手机钱包业务也说明 Zenfone 2 已经通过 NFC 支付测试。

另外我还发现一个有趣的现象就是虽然 Zenfone 2 手机开机点亮屏幕的状态下刷公交或者地铁没有任何反应,但如果我重启手机并在刚刚显示启动 Logo 的时候刷公交却是有反应的(只是没有充值提示余额不足),这就说明手机刚开机的时候 NFC SIM SWP 是能正常工作的,启动完成进入系统之后反而不行了。

后来我还看到有网友在华硕官方论坛上反映了这个问题,并建议华硕在手机设置中增加类似于一加手机中的 NFC 支付使用手机内置 SE 还是 SIM 卡 SE 的选项,不过华硕并没有对此进行更新处理,因此我认为 Zenfone 2 硬件是支持 NFC SIM SWP 支付的,只是由于系统 ROM 原因不能正常使用,应该可以通过其它方法开启。

修改配置支持刷 SIM 卡

经过一番搜索之后我发现网上有 Nexus 6 用户也碰到类似的问题:

*NEXUS 6 ANDROID MARSHMALLOW NFC SWP-SIM 支援

可以通过修改 Android 系统的 Broadcom NFC 配置文件来开启手机的 SIM SWP 支持,我的 Zenfone 2 手机 NFC 配置和上面的 Nexus 6 配置有一些差别,经过多次修改测试发现现在也可以使 NFC SIM SWP 功能正常工作了。

NFC 配置文件的修改都需要先开启手机的 root 权限哦,首先修改 /system/etc/libnfc-brcm.conf 配置文件增加以下内容:

+NFA_MAX_EE_SUPPORTED=3
+ACTIVE_SE=0xF3
+DEFAULT_ISODEP_ROUTE=0xF3
+NFA_HCI_STATIC_PIPE_ID_F3=0x70
+NFA_HCI_STATIC_PIPE_ID_F4=0x71
+UICC_LISTEN_TECH_MASK=0x0

注意

注意上面显示的是 patch 文件格式,- 号开头的为需要删除的内容,+ 号开头的为需要增加的内容,实际修改时请删除开头的 - 号或 + 号。

上面的 NFA_MAX_EE_SUPPORTED 值为 3 表示开启多种 NFC SE 元件支持,ACTIVE_SEDEFAULT_ISODEP_ROUTE 都设为 0xF3 表示默认使用 SIM SWP SE 元件,剩下的 3 个参数不一定需要设置。

接着修改 /system/etc/libnfc-brcm-20795a20.conf 配置文件:

 ###############################################################################
 # Pre-Discovery Startup Configuration (256 bytes maximum)
-NFA_DM_PRE_DISCOVERY_CFG={0A:C2:08:02:00:C3:04:40:4B:4C:00}
+NFA_DM_PRE_DISCOVERY_CFG={0A:C2:08:01:00:C3:04:40:4B:4C:00}

上面的这两个配置文件修改完成之后重启手机,到公交或者地铁充值点去充值刷卡应该就有反应了哦,不过需要注意默认还是只有手机点亮的情况刷卡才有反应。

后记

NFC SIM 卡的公交卡余额充值功能在各地似乎不太一样,上海之类城市是支持直接在联通的「沃钱包」App 中进行充值的,而我这边「沃钱包」的卡包列表中虽然能看到南京 NFC SIM 卡的智汇卡,但并不能正确显示卡中的余额,也没法直接通过手机 App 进行充值。

总体来说联通的「沃钱包」App 的使用体验还是挺符合其企业形象的,一贯的很难用而且不稳定,像下面这种 App 中找不到 NFC SIM 卡包的报错还是经常会碰到:

沃钱包找不到 NFC SIM 卡包

沃钱包找不到 NFC SIM 卡包

当然最后还是要说一下本文只是在南京公交地铁以及联通 NFC SIM 卡环境下使用测试的,如果你使用的环境不同并不能保证就一定能把 NFC SIM 支付用起来哦,祝玩的开心~~~。

为Zenfone 2开启NFC SIM卡刷公交支持》上的评论

    1. 我记得之前关注一加3时官方还说要加NFC安全模块位置选项的,没有兑现?
      不知道一加3的NFC芯片是什么,你可以看看 /system/etc 目录下 nfc 相关的配置文件内容确认一下。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*