Skip to content
Language: EN

Should an NFC app install on phones without NFC?

It depends on whether NFC is the app or one of its features. Declared as required, both stores keep the app away from devices without the radio. Declared as optional, it installs everywhere, and the code has to detect the absence and say something useful.

What Android filters on

The declaration is uses-feature in the manifest, with android.hardware.nfc for the radio and android.hardware.nfc.hce for card emulation hosted on the device. The reference is explicit about what it is for: Google Play uses these elements to filter an app away from devices that do not meet its requirements.

The required attribute is the whole decision. True means the app cannot function without the feature, and the store hides it from phones that lack it; false means the app prefers it and works without, and the store leaves it visible everywhere.

What the App Store filters on

The same idea lives in the Info.plist. UIRequiredDeviceCapabilities lists the device features an app requires, and Apple states the consequence plainly: the App Store prevents customers from installing an app on a device that does not support them. The value for this one is nfc, documented as NFC tags, available from iOS 11 and unavailable in visionOS.

The key takes an array, where a listed value means required, or a dictionary, where a value can be set to false to say the feature must not be present. Omitting it says the app neither requires nor refuses the feature, which is the equivalent of the optional declaration on Android.

Which one to declare

Required, when the app has no purpose without a tag: a tag writer, a reader for your own deployment, a tool whose every screen assumes the radio. Filtering is doing the user a favour there, and a one star review from a phone that never could have worked is the alternative.

Optional, when NFC shortens something the app already does another way: a loyalty card that also scans a code, a ticket that also shows a barcode, a configuration tool with a manual path. Filtering those out of a store costs users who would have been perfectly served.

What optional obliges you to

An optional declaration is a promise that the app works without the radio, and the code has to keep it. Detect the absence, hide what cannot work, and keep the path that does not need a tag, which the off or missing page sets out state by state.

It also means testing on a phone without NFC, which is the one test the test set cannot cover with tags. An emulator or an old handset is enough: what matters is that the app opens, explains nothing it does not need to, and does its other job.

Frequently asked questions

Does required hide my app from some phones?

Yes. Google Play filters on uses-feature, and the App Store prevents installation on devices that lack a required capability.

Which value do I declare?

android.hardware.nfc on Android, plus android.hardware.nfc.hce for card emulation, and the nfc value of UIRequiredDeviceCapabilities on iOS.

Can I declare it optional and still use NFC?

Yes, and that is the point: the app installs everywhere and checks at runtime before offering the feature.

What breaks if I forget the declaration?

Nothing visible at first. The app installs on phones that cannot use it, and the failure lands on users rather than on the store listing.