Later, the user navigates to Store B and sees the same app available there.
Forgetting that they already installed the app, the user tries to install the app again from Store B.
What does the user see? What does the Store see as the return value of navigator.install()?
Proposals:
[Preferred] Browser prompts user to open app: This is the best user experience since it still directs them to launch the app which they were presumably installing with the intent of using.
[Preferred] Promise resolves: This indicates to the store that the app was installed.
Pros: This allows the store to update their UI to show an "open" button instead of an "install" button.
Cons: Combined with the Acquisition Info API, this would lead to a mismatch of perceived installs to actual attribution. It's also unclear how this would combine with getInstalledApps(), which is supposed to return the list of apps installed from this install source (from this Store)
Promise rejects: Indicates that the app was not installed.
Pros: No confusion with Acquisition Info API or getInstalledApps()
Cons: Confusing user experience since the store may still indicate that the app is installable (and thus, not installed)
Browser does not prompt user: This is not only a bad user experience since they are unaware of why the "Install" button they clicked had no effect, but immediately rejecting the promise may also indicate to the store that the app is already installed, which increases the fingerprinting risk.
Scenario:
navigator.install()
?Proposals:
getInstalledApps()
, which is supposed to return the list of apps installed from this install source (from this Store)getInstalledApps()