#436: Get Installed Related Apps
Discussions
Comment by @lknik Nov 5, 2019 (See Github)
Hi
One question about
The user agent MUST NOT return installed applications when running in a privacy preserving mode, for example Incognito in Chrome or Private Browsing in Firefox.
What if, say, a very popular app has a pre-populated manifest file specifying avery popular website? We can also assume that the app with manifest is shipped by default, let's say in a very popular operating system.
It seems that this Very Popular app would be able to see that the user is browsing in private browsing mode because the website would expect navigator.getInstalledRelatedApps() return nothing when in private browsing mode (but it would know that this particular OS/browser in fact most likely has the app with a pre-populated).
Case in point could be Apple Maps or Google Maps or other X Y.
Comment by @rayankans Nov 6, 2019 (See Github)
Hello,
That's a very interesting point which I hadn't considered. Let me start by giving some context around why the incognito restriction was added initially. We were worried that a website might force users to use the native application when users are actually trying to use the website in a privacy preserving mode.
I think this is a useful privacy improvement that will benefit all origins. On the other hand, the situation described by @lknik might give a select few websites another signal for fingerprinting privacy preserving mode, although it will still have false positives (when users uninstall the pre-installed apps).
At this point, I believe the benefits of keeping the privacy preserving mode restrictions outweigh those of the alternative.
Discussed
Nov 19, 2019 (See Github)
Lukasz: its basically a functionality for web apps to see if there is a equivalent native app installed, so to not prompt to install native app etc.
Very simple features based on manifest file, and I am OK with all of that
My only concern is around incognito that is should not return that the app is installed. But then maybe the app can check whether we are in incognito or not.
Dan: Or that you don't have the app installed.
Lukasz: Yes.
Dan: What is the deal with manifest
Ken: They are linked together. This is mostly for not showing double notifications etc.
Dan: Couldn't any app install a manifest and then probe to see if you have certain applications installed?
Ken: you need Digital Assets Links on your website that needs to match your app.
Dan: (Regarding prior comment of seeming anti-Web.) If the intent is that you have web app and native app installed, and this makes all the traffic go to the native app rather than the web app -- could confuse users. What if I made the explicit choice to use the web app... suddenly find that all my links have been going to the native app.
Kenneth: Already does that given that apps register for URL patterns. If it's doing this test every time, if it figures out native app is uninstalled, could send notifictaions to web app.
Dan: Maybe be more explicit about what happens when both native app and web app are installed. We don't want to put functionality in people's hands that favors the native experience over the web experience.
Comment by @lknik Nov 19, 2019 (See Github)
Hi @rayankans
We discussed it during 2019-11-19-telecon.
Thanks for the clarification and explaining the rationale for incognito restriction. Would it be possible to clarify it in the explainer/specs (we feel it is important ot make the users/developers aware of this design consideration).
Additionally, are you sure there is no way particular approach you could devise to avoid the ability of private mode detection?
Regardless, it would be useful to have the potential attack scenario documented in as well.
Comment by @torgo Nov 19, 2019 (See Github)
I'm a little concerned about the intended operation / user flow for this when the user has both web apps and native apps "installed." For example, if they have google maps PWA installed (e.g. as a WebAPK) and also the native app, but they prefer to use the PWA, will this API mean that the PWA always gets passed over for the Native version? What happens if they have a PWA installed but no native version? Will they constantly get prompted to install the native app? I'm concerned about functionality that favors the use of native apps over equivalent webapps. Can you please elaborate in the explainer about these cases and how you're going to mitigate against these risks?
Comment by @rayankans Nov 29, 2019 (See Github)
Hi folks, thanks for the feedback. I've added an Abuse Considerations
section to the explainer.
Additionally, are you sure there is no way particular approach you could devise to avoid the ability of private mode detection?
We could drop the privacy mode restriction to not return any related applications. I don't think that's the right way to go though, it's a privacy improvement for 100% of origins at the expense of having an imperfect privacy mode detector for a very very small percentage of origins. I recommended keeping track of how the API is being used, if at all, by the origins that control pre-installed native applications on certain platforms.
I'm a little concerned about the intended operation / user flow for this when the user has both web apps and native apps "installed."
Unfortunately this is a practice that we already see a lot of in the wild. Certain websites try to redirect you to their native application, and if not installed it would just take you to a place to install it. I don't think this API will affect that practice, but that's why we added the privacy mode restriction. I've expanded on this in the explainer.
Comment by @kenchris Dec 2, 2019 (See Github)
As Microsoft could probably use this for PWA installation via the Microsoft Store on Windows, I wonder if you have been in talk with them. It would be great to get their review as well
Comment by @travisleithead Dec 2, 2019 (See Github)
@aarongustafson for Microsoft PWA things ;)
Comment by @rayankans Jan 3, 2020 (See Github)
As an update, Microsoft is supporting this API for Windows (implementation doc).
Comment by @thejohnjansen Jan 7, 2020 (See Github)
My apologies for being late to this thread. Yes, Microsoft does support this API for our PWA work and that Implementation Document was written by a member of the Edge dev team. Thanks for calling that out @kenchris and @rayankans .
Comment by @hadleybeeman Mar 2, 2020 (See Github)
Hi all. We are looking at this at our W3CTAG face-to-face in Wellington.
The main concern at this point is an architectural one: given that we've had W3C standards for manifests, as well as cross-browser support for installing web applications on a device – we'd like to see this API make more use of the web, rather than only driving users to native apps.
Would it be possible to build in some accommodation for web apps?
Comment by @rayankans Mar 2, 2020 (See Github)
Hi @hadleybeeman,
The specification uses the concept of installed apps, and doesn't distinguish between the types whether native or web powered. The syntax and the method of verification is OS/platform specific.
To give a specific example, on Android, you can query for both native apps (by using the app's ID), and web apps (WebAPKs, by using the app's manifest URL).
That being said, although the spec uses the concept of installed apps, the explainer focuses on native apps. I'll update the explainer accordingly.
Comment by @hadleybeeman Mar 2, 2020 (See Github)
That's good news, @rayankans! Thanks for the explanation. Great to hear we're already on the same page.
In addition to the explainer, the spec also has a lot of references to native apps. It might be good to clarify those too.
Comment by @rayankans Mar 6, 2020 (See Github)
I clarified a bunch of references in this commit
Comment by @kenchris May 26, 2020 (See Github)
Talking to @marcoscaceres about related apps fields in the Web App Manifest spec yesterday, he mentioned that Mozilla (Martin Thomson, I believe) is working on a slightly changed proposal that will be more privacy preserving. Are you aware of this work?
Comment by @thejohnjansen May 26, 2020 (See Github)
Yeah, the plan is that Martin is going to send his proposal to Microsoft soon for us to take a look.
Comment by @rayankans May 26, 2020 (See Github)
@kenchris This is the first I hear of it. I look forward to seeing it.
Comment by @martinthomson May 27, 2020 (See Github)
Since the cat is out of the bag.
Comment by @kenchris Sep 1, 2020 (See Github)
Did anyone (@rayankans ?) look at Martin's proposal? Feedback?
Comment by @kenchris Sep 22, 2020 (See Github)
Friendly ping @rayankans @beverloo @slightlyoff - it would really be great with your feedback on the "counter" proposal.
Comment by @kenchris Sep 22, 2020 (See Github)
@atanassov do you know who from MSFT has been working on the Windows side of this, maybe they have feedback as well. The counter proposal seems quite interesting
Comment by @thejohnjansen Sep 22, 2020 (See Github)
@kenchris, I'm a good contact from MSFT for this one. When we tried commenting the paper previously, it was locked for comments. We'll take a look again today.
Discussed
Jan 1, 2021 (See Github)
Ken: left a comment asking for info on implementation status...
Dan: left a comment on lack of multi-stakeholder support...
Comment by @kenchris Jan 26, 2021 (See Github)
What is the status of the implemention? chromestatus.com says it is shipping on Android since Chrome M80, but https://web.dev/get-installed-related-apps/ seems to mention that it also works on Windows (Edge only?)
Also as Android apps (and TWAs) can be installed on Chrome OS, does this work there? @mgiuca
[Update] above article says this works on Windows: Chrome 85 or later, Edge 85 or later
Maybe someone should update chromestatus.com :-)
Comment by @torgo Jan 26, 2021 (See Github)
Is this still a chrome-only thing? Has there been any discussion regarding the Mozilla alternative proposal? In line with the TAG Ethical Principles, we'd really like to see multi-stakeholder support.
Comment by @rayankans Jan 26, 2021 (See Github)
chromestatus.com has been updated. As @kenchris mentioned the API works on Chrome and Edge for Windows and Android.
As for the alternative proposal, I'm not aware of any updates besides the doc from Martin that was shared on this issue.
Discussed
Mar 8, 2021 (See Github)
Comment by @kenchris Mar 8, 2021 (See Github)
Hi there,
The Mozilla position is that this feature increases the fingerprinting surface of browsers without sufficient safeguards, and they have spent time on making an alternative proposal. Unfortunately, it doesn't seem that this proposal has been seriously considered, which the TAG finds disappointing.
Discussed
Mar 15, 2021 (See Github)
Dan: maybe didn't close because Ken wasn't there. Proposal from Mozilla hasn't bee considered, concerning, means what? They haven't listened to our feedback? API design itself seems fine but fingerprinting issue hasn't been looked at so we're not happy, or ambivalent..
Ken: they shipped it
Dan: we can say we're ambivalent then
Ken: close now?
Dan: I think it should be resolution: ambivalent. Unsatisfied would connote this is really deeply harmful, or the design is really bad.
Ken: will figure out what to write
Dan: look forward to hearing more once it goes through incuation (the I in WICG is incubation, we should always say that)
closed
Dan: boom
Comment by @kenchris Mar 16, 2021 (See Github)
Thank you for taking our feedback on board, we still think you need to consider the fingerprinting issue and we look forward to hearing more about your experience of this through incubation in the WICG
Comment by @rayankans Mar 16, 2021 (See Github)
Sorry for the delayed response.
We reviewed the proposal when the alternative proposal was shared. My main concern is that it addresses different use-cases that do not match the demand we see for gIRA.
I'm also not convinced about the impact of the drawbacks highlighted in the proposal. It seems to suggest that a coalition can divide users into ~1024 buckets assuming its website has 10 well-adopted related applications.
For one thing, the spec recommends having a UA-defined number of related apps to take into consideration. The number of related apps per manifest in current implementations is limited to 3, which would still make the API useful and severely reduce the tracking issue (8 buckets). I'll work on clarifying this in the spec further.
For another, I'm not sure how a coalition like that would work, is there data or examples around it? I'd assume the scale of users for coalitions in the proposed drawback is in the millions, making tracking is severely reduced.
That being said, the proposal does raise an interesting alternative, and we would be open to integrating parts of it. I'd like to see some more implementer interest, as well as different use cases and how they would address existing demand.
Comment by @slightlyoff Mar 24, 2021 (See Github)
This thread was brought back to my attention today; thanks for pinging us @kenchris.
We did look at the proposal by Martin, but it required the ability to change all OSes that this feature is provided on. If another browser thinks they can get OS vendors to make changes that we don't have confidence that we can convince them to, I think we'd welcome them developing such an API. Usage of gIRA
isn't super high right now, but is growing quickly, so the onus would appear to be on folks who have counter proposals to test them out soon:
https://chromestatus.com/metrics/feature/timeline/popularity/1870
On the fingerprinting question, gIRA
is designed in the ususal asynchronous style that gives UAs full control over when and what to return, potentially allowing interposition of a user confirmation moment. To @rayankans's point about the restriction to 3 related items, it's reasonable for UAs to filter further, potentially in ways to prevent overlap, to preserve user privacy.
OpenedOct 29, 2019
Hello TAG!
I'm requesting a TAG review of:
Further details:
We recommend the explainer to be in Markdown. On top of the usual information expected in the explainer, it is strongly recommended to add:
You should also know that...
[please tell us anything you think is relevant to this review]
We'd prefer the TAG provide feedback as (please select one):
Please preview the issue and check that the links work before submitting. In particular, if anything links to a URL which requires authentication (e.g. Google document), please make sure anyone with the link can access the document.
¹ For background, see our explanation of how to write a good explainer.