How do you make a tag open a specific app?
On Android, an application record names the package to launch and offers to install it if missing. On iOS there is no equivalent, and the route is a web address the application has registered to handle, which only works if it is already installed.
The Android route
Android defines an application record that names a package. Tapping a tag carrying it launches that application, and offers to install it from the store when it is absent.
Android provides a helper for building the record, documented alongside the other constructors in its NdefRecord reference. Writing tools expose it as an option to enter a package name.
The install prompt is what makes it powerful. A tag can reach someone who has never installed your application, which no other record type does.
The iOS route
There is no equivalent record. Naming an application and having iOS launch it from a tag is not something the platform offers.
What works instead is a URL that your application has registered to handle. When the application is installed, tapping opens it. When it is not, the address opens in the browser, which is where you put a page inviting them to install.
That fallback is the whole design. A link that degrades to a web page is better than a record that degrades to nothing.
Covering both at once
Write a URL as the primary record, with the address registered by your application on both platforms. Add an Android application record after it if you want the install prompt behaviour on Android specifically. From Android 17, the link opens the application only once the user has acted on an open link notification, as the Android NFC basics guide describes.
Order matters here: put the URL first, since it is the record that works everywhere, and let the Android specific record follow.
Test the four cases rather than two: application installed and not installed, on each platform. The uninstalled cases are the ones that reveal whether your fallback page exists and says something useful.
A reality check
Asking someone to install an application because they tapped a sticker is a high bar. Conversion from a tap to an install is poor, and a deployment that only works after an install will mostly not work.
Where an application launch genuinely belongs is with an audience that already has it: staff, members, existing customers. For the public, a web page that works immediately beats an application that might be installed later.
This is the same conclusion the industry reached about QR codes leading to app stores, and it applies here for the same reasons.
Frequently asked questions
Can a tag install an app by itself?
No. An Android application record can offer to open the store page, and the person chooses to install. Nothing is installed by tapping alone.
Why does my app record do nothing on iPhone?
Because iOS has no equivalent mechanism. Use a URL your application has registered to handle, which opens the application when installed and a web page when not.
What happens if two apps claim the same link?
The platform decides, usually by asking or by preferring the one verified as owning the domain. Verified domain association is the reliable way to make sure yours wins.
Is it worth adding both records?
If Android install prompts matter to you, yes, with the URL first. Otherwise a single URL is simpler, works on both platforms, and is easier to change later.