Unlike iOS apps, Android apps are subject to be run on a multitude of phone types. Generally, developers test on the most common phones and there exist many best practices that make apps more adaptive to various Android versions and devices and become almost device-agnostic. However, when developing NFC apps on Android, incompatibilities are more subtle and the Android SDK does not provide sufficient tools to compensate for device variance. The end result is that the NFC app may not work on devices with the same Android version on which developers tested it.

NFC chipsets are a quite new development when compared with the WiFi, Bluetooth, and GPS modules that have been common since the advent smartphones. Having developed an embedded NFC chipset driver from scratch, I can say that handling all the various error conditions generated by the host interface, firmware and RF interface is not a trivial matter–it took some time to get the driver operating properly. Although the NFC Controller Interface (NCI) specification published by the NFC Forum was intended to harmonize NFC chipset drivers, only some manufacturers have adopted it. Most Android devices use either a Broadcom or an NXP chipset. Broadcom’s products are NCI-compliant while NXP’s still use a proprietary protocol. This surely required low level portions of the NFC stack to be redeveloped when the Nexus 4 and Samsung S4 were released in order to support the new Broadcom chips. Combined with the active development of the higher level NFC libraries in the Android SDK, the change of hardware suppliers resulted in significant growing pains for NFC apps.

Even today, NFC performance varies drastically amongst various Android versions and models. For example, at TapTrack we have observed that the Nexus 7 will sometimes require a complete reset of the NFC feature after a tag is only partially read, which indicates that the NFC system can enter an unrecoverable state. Even something as simple as writing a few bytes to NFC tags requires the Android developer to manually handle hardware inconsistencies between Broadcom and NXP chipsets. These inconsistencies are poorly documented and only diagnosed through trial-and-error.

If more suppliers begin shipping chips for Android devices, additional complexity will likely result which may render older apps extremely error-prone or potentially non-functional. The most extreme incompatibility issue is the case of Mifare Classic tags which cannot be read by Broadcom chips, adding yet another landmine to the field of Android NFC development.

Compounding the matter is the consumer education about NFC and the various locations and sizes of the antenna. NFC is not instantaneous as some marketing materials published by handset manufacturers suggest. One often needs to hold a tag steady for a second or so to smoothly perform an NFC operation, and, with very little consistency in antenna location and no visual cues, it is difficult for users to even figure out where to hold the tag. Quite often, it appears that an app simply does not work when the only issue is not holding the tag in the correct location or not holding it there long enough. In most cases, the app simply gets deleted and never tried again.

This is why at TapTrack we focus on enterprise and B2B applications where users can not only be trained in how to use the app, but a device can also be prescribed that has been pre-screened to play nicely with it. If you search for NFC on the Play Store, the bulk of the most popular apps are actually development tools for working with and debugging NFC tags. None of the popular apps are truly consumer facing, and are instead for those who are looking to play around with NFC for some other project.