Add To Home Screen (A2HS)
A stand alone Angular application for testing A2HS (a work in progress). For trying to figure out how different browsers handle A2HS.
A2HS for PWAs Is Big
Getting users to add a home screen shortcut to your PWA will greatly increase it’s use. Since PWAs are relatively new, there is no constancy with how different browsers handle A2HS. It is a moving target.
Chrome and Edge have implemented prompts to ask the user if they would like to A2HS. These are great, but they may not display at a good time for the user. As with many random prompts, I would guess they are quickly dismissed. You can add logic to add a button to your app to let the user control the A2HS prompt.
FireFox adds a A2HS icon/button to the browser address bar for qualifying PWAs. Currently this icon shows even if it has already been used.
Source Code (still in progress)
https://github.com/ng-chicago/AddToHomeScreen
Working Example
Running on Glitch (https://a2hs.glitch.me/)
If you type manually, make sure to include https://
Functionality (Chrome & Edge)
- – Prevents browser from displaying A2HS dialog when all criteria are met.
- – Displays user controlled button to open browser A2HS dialog.
- – Displays debug section if A2HS prompt was intercepted & saved. This makes mobile device testing easier.
Will My PWA Generate an A2HS Prompt?
You can use the one of the Chrome Lighthouse audit tools 1 to tell you if the prompt will be shown for your PWA.
-
Run the Progressive Web App audit
-
Under Passed Audits, you should see User can be prompted to Install the Web App
-
If you see the above message AND you have cleared out previous installs AND browser cache for your website, you will get the prompt in browsers that support it.
-
Note: Some browsers may have an engagement heuristic that requires you visit the site for a period of time before the prompt shows.
-
Here are the Chrome criteria
Create Your Own A2HS Button (Chrome & Edge)
In these two browsers, if your PWA meets the, users will be prompted to add a home screen shortcut. The prompt may not show at the best time.
You can:
- Listen for the prompt and stop it before it shows
- Save it and show a button to let the user control the timing of the prompt
- Show saved prompt (only once) when the user clicks on the button
window.addEventListener('beforeinstallprompt', (e) => {
// show your custom button
// Prevent Chrome 67 and earlier from automatically showing the prompt
// no matter what, the snack-bar shows in 68 (beta 06/16/2018 11:05 AM)
e.preventDefault();
// Save the prompt so it can be displayed when the user wants
this.deferredPrompt = e;
});
Manual A2HS iOS & Safari (Sample code working)
There is no prompt for A2HS, but there is a manual option.
When added to the Home Screen:
- iOS 11+ will open PWA as a Standalone window.
- Earlier versions of iOS & Safari will most likely open in the normal Safari window.
- iOS 9 or earlier versions may not show the A2HS button
Most users probably do not know it is there, but you can add instructions for when users are in iOS Safari.
- Share button
at the (top or bottom) of the browser
- Scroll (if needed) to find the Add to Home Screen button
Show these instructions if:
- Safari & iOS & Not Standalone
- Users of older versions (< 13% ) will still see this message even if they installed.
iOS 10 (8.04%) iOS 11 (86.74%) as of: 07/05/2018
Note
You will need to add Icons for iOS
It currently does not use the Manifest Icons
<!-- place this in a head section -->
<link rel="apple-touch-icon" href="/assets/touch-icon-iphone.png">
<link rel="apple-touch-icon" sizes="152x152" href="/assets/touch-icon-ipad.png">
<link rel="apple-touch-icon" sizes="180x180" href="/assets/touch-icon-iphone-retina.png">
<link rel="apple-touch-icon" sizes="167x167" href="touch-icon-ipad-retina.png">
And images for the iOS standalone splash screens If you do not add these, a plain white screen will be shown until the load is complete
<!-- place this in a head section -->
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="#ffffff">
<meta name="apple-mobile-web-app-title" content="A2HS Test">
<link rel="apple-touch-startup-image" href="assets/splash/apple_splash_640.png" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)">
<link rel="apple-touch-startup-image" href="assets/splash/apple_splash_750.png" media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)">
<link rel="apple-touch-startup-image" href="assets/splash/apple_splash_1242.png" media="(device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)">
<link rel="apple-touch-startup-image" href="assets/splash/apple_splash_1125.png" media="(device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)">
<link rel="apple-touch-startup-image" href="assets/splash/apple_splash_1536.png" media="(min-device-width: 768px) and (max-device-width: 1024px) and (-webkit-min-device-pixel-ratio: 2) and (orientation: portrait)">
<link rel="apple-touch-startup-image" href="assets/splash/apple_splash_1668.png" media="(min-device-width: 834px) and (max-device-width: 834px) and (-webkit-min-device-pixel-ratio: 2) and (orientation: portrait)">
<link rel="apple-touch-startup-image" href="assets/splash/apple_splash_2048.png" media="(min-device-width: 1024px) and (max-device-width: 1024px) and (-webkit-min-device-pixel-ratio: 2) and (orientation: portrait)">
Listen For Install
You can listen for when the app is added to the home screen in Chrome & Edge2
window.addEventListener('appinstalled', (evt) => {
// if installed, hide your custom button?
// if installed, call Google Analytics to track?
});
Standalone Detection (see grid below)
In your CSS
@media all and (display-mode: standalone) {
body {
background-color: yellow;
border: 1px solid black;
}
}
In your code
if (window.matchMedia('(display-mode: standalone)').matches) {
// do things here
// e.g. call Google Analytics to track standalone use
}
Next Steps
- Add logic to detect browser & version?
- Test what happens if prompt is placed in local storage
Random Notes
- – Clearing browsing data in Edge sometimes does not stop spinning? (06/19/2018)
- – If you open the app from the Chrome Desktop apps screen, it may open a standalone window, but not give focus to that window (Mac Chrome). You can access the app from the new icon in the dock.
- – The Prompt could be shown multiple times after rejection in desktop Chrome. It CANNOT be shown after rejection in mobile Chrome, Edge.
- – If you open a PWA site in the twitter “browser” window, and even then “open in browser” (chrome), it may not properly prompt A2HS. Looks like you may have to open the site directly in the browser?
- – Depending on the version of Desktop Chrome you are using, you may need to turn on A2HS Here (chrome://flags/#enable-desktop-pwas)
Goofiness
- If you FIRST install the WebAPK with Chrome, the prompt will NOT be shown in Edge. They will be fixing this soon.
Reference Articles I Like
Chrome 68 snack-bar ignores preventDefault()
Google Chrome installs a WebAPK
iOS Splash Screens - This works (mostly?)
Progressive Web App Splash Screens
A2HS OS & Browser Combos Coded/Tested So Far
Combo | A2HS Type | Notes | Standalone |
---|---|---|---|
Android 8.10 Chrome 67 |
Prompt Intercepted Custom btn shown |
WebApk Installed | Detected Custom btn hidden |
Android 8.10 Chrome 68 (beta) |
Prompt Intercepted Custom btn shown |
WebApk Installed See temp snack-bar note here |
Detected Custom btn hidden |
Android 8.10 Edge 42 |
Prompt Intercepted Custom btn shown |
Shortcut added | Detected Custom btn hidden |
iOS 11.4 Safari (simulator) |
Manual how to shown | Shortcut added Extra work needed for iOS icons & Splash Screens |
Detected How to hidden |
iOS 9.3.5 Safari (iPod) |
Manual how to shown | Shortcut added | ❌Semi-standalone? Not detected, not Safari How to hidden |
iOS 9.3.5 Chrome 63 (iPod) |
Manual how to shown | ❌No A2HS option available | n/a |
Android 8.10 Firefox 61 |
Manual how to shown | Shortcut added | ❌No standalone ❌How to shows |
Android 8.10 Firefox 62 (beta) |
Manual how to shown | Shortcut added | Detected How to hidden |
Android 8.10 Opera 43 |
❌Need to add how to code |
Shortcut added | Detected How to hidden |
To Do - Add code to show these instructions.
- Opera - Three dots > Home Screen (available for all websites)
- Firefox -“home” icon with a plus (+) icon inside it in address bar (qualifying PWA websites only)
Footnotes
-
There are TWO versions of the Lighthouse audit tool: The one built into the developer tools AND a Chrome extension which usually has the more recent features. ↩
-
Edge has a second dialog to set the icon where you want on the screen. If the user selects CANCEL here, you may falsely think it was installed if only listening to the first dialog. I’m not sure yet how to listen to the second dialog. ↩