
FotMob recently experienced its largest single-day increase on Wear OS among its installed audience in 5 years, at 2-3x the daily average. The secret? A simple cross-device installation flow that helps users discover their Wear OS app directly from their phone.
FotMob is one of the world’s most popular football (some call it soccer!) platforms, known for its mobile app that provides real-time scores, statistical analysis, and news.
FotMob is available on mobile and Wear OS
In addition to the mobile app, FotMob is available on Wear OS, allowing users to keep on top of the latest scores and results directly from their wrist.
“Many FotMob users follow matches live, and that often happens when they’re not actively using their phone,” says Roy Solberg, Android Tech Lead at FotMob. “Wear OS gives fans a quick way to glance at scores, match events, and updates directly from their wrist, so we saw it as a natural extension of the FotMob experience.”
By providing a smooth experience across different form factors, FotMob ensures that their users can continue to get the most from their platform, in the most convenient form. This includes ensuring that settings and preferences–such as favorite teams–are synced across devices.
The Discovery Gap
Despite many FotMob users having a Wear OS device, FotMob realized that some users might not be aware of the Wear OS app. This led the team to consider technical options for how to educate users about and ultimately install the Wear OS app directly from within the core phone app.
Fortunately, the Wearable library on Android and Wear OS provides exactly the building blocks that FotMob needed to create an in-app experience that would allow their users to do just that.
Detecting Eligible Wear OS Devices
Within the FotMob phone app, the team used the NodeClient to identify connected Wear OS devices – candidates for the Wear OS app:
val connectedNodes = nodeClient.connectedNodes.await()
Additionally, the team defined a capability within the Wear OS app, indicating that FotMob was installed on the device. This is defined as an XML resource in the Wear OS package, and then queried within the phone app:
val nodesWithApp = capabilityClient
.getCapability(CAPABILITY_WEAR_APP, CapabilityClient.FILTER_REACHABLE)
.await()
.nodes
By looking for only nodes without the capability, the team ensured the FotMob phone app only lists Wear OS devices without the app.
Initiating the install flow
The FotMob team designed an educational half-page prompt that quickly makes the user aware of the opportunity, allowing them either to kick off the install flow, or dismiss it. This featured a prominent screenshot of the Wear OS experience, allowing the user to immediately see how the app might look on their watch.
To start the installation, the app uses the RemoteActivityHelper API, to launch the Play Store on the watch:
val remoteActivityHelper = RemoteActivityHelper(context)
remoteActivityHelper.startRemoteActivity(
Intent(Intent.ACTION_VIEW)
.setData("market://details?id=${context.packageName}".toUri())
.addCategory(Intent.CATEGORY_BROWSABLE),
nodeId
).await()
Results
“The Wearable APIs made the implementation straightforward,” says Roy. “Being able to detect connected devices and query capabilities meant we could quickly determine whether the watch app was already installed. From there it was mostly about designing a prompt that felt helpful to users rather than intrusive.”
The rollout of the cross-device installation feature saw the largest single-day increase in FotMob’s installed audience on Wear OS in 5 years, 2-3x higher than the normal install rate. Within 48 hours of the rollout reaching 100%, the watch app gained over 1,500 new installs¹.
“Within the first 10 days we saw a significant jump in new Wear OS installs,” says Roy. “The watch app has been around for years, but this confirmed that many users with compatible devices simply weren’t aware it existed.”
Evolving cross-device installs
In addition to the solution employed by FotMob, we’ve now launched a library to make it even easier to implement these cross-device installation journeys through the In-App Install Prompts library.
The following is an example of adding an installation prompt at the appropriate point in your app:
val crossDevicePromptManager = CrossDevicePromptManagerFactory.create(activity)
val request = CrossDevicePromptInstallationRequest.create()
try {
val info = crossDevicePromptManager.requestInstallationPromptFlow(request).await()
crossDevicePromptManager.launchPromptFlow(activity, info).await()
} catch (e: CrossDevicePromptException) {
Log.e(TAG, "Cross-device prompt failed with error: ${e.errorCode}", e)
}
Next steps: Start building your own cross-device journey today
Dive into the DataLayer sample to learn more about how to add cross-device functionality to your app, and explore the new In-App Install Prompts library, providing you with options for how you help your users achieve cross-device installation.
[1]. Install data from Play Developer Console


