홈 화면에 추가 동작 변경사항

Google은 홈 화면에 추가 배너를 처음 출시한 이후로 프로그레시브 웹 앱에 더 명확한 라벨을 지정하고 사용자가 앱을 설치하는 방식을 간소화하기 위해 노력해 왔습니다. 궁극적인 목표는 모든 플랫폼의 옴니박스에 설치 버튼을 제공하는 것이며, Chrome 68에서는 이 목표를 향해 변경사항을 적용하고 있습니다.

변경사항

Android의 Chrome 68 (2018년 7월 안정화 버전)부터 Chrome에 홈 화면에 추가 배너가 더 이상 표시되지 않습니다. 사이트가 홈 화면에 추가 기준을 충족하면 Chrome에 미니 정보 표시줄이 표시됩니다. 그런 다음 사용자가 미니 정보 표시줄을 클릭하거나 사용자 동작 내에서 beforeinstallprompt 이벤트에 prompt()를 호출하면 Chrome에서 모달 홈 화면에 추가 대화상자를 표시합니다.

A2HS 배너 Chrome 67 이전 버전

A2HS 배너 스크린샷

사이트가 홈 화면에 추가 기준을 충족하고 사이트가 beforeinstallprompt 이벤트에서 preventDefault()를 호출하지 않는 경우 자동으로 표시됩니다.

또는

beforeinstallprompt 이벤트에서 prompt()를 호출하여 표시됩니다.

미니 정보 표시줄 Chrome 68 이상

A2HS 정보 표시줄 스크린샷
사이트가 홈 화면에 추가 기준을 충족하는 경우 표시됩니다.

사용자가 닫은 경우 충분한 기간 (~3개월)이 지나기 전에는 표시되지 않습니다.

beforeinstallprompt 이벤트에서 preventDefault()가 호출되었는지 여부와 관계없이 표시됩니다.

이 UI 처리는 옴니박스 설치 버튼이 도입되면 향후 Chrome 버전에서 삭제됩니다.

A2HS 대화상자

A2HS 대화상자 스크린샷

Chrome 68 이상에서 beforeinstallprompt 이벤트의 사용자 동작 내에서 prompt()를 호출하여 표시됩니다.

또는

사용자가 Chrome 68 이상에서 소형 정보 표시줄을 탭할 때 표시됩니다.

또는

모든 Chrome 버전에서 사용자가 Chrome 메뉴에서 '홈 화면에 추가'를 클릭한 후 표시됩니다.

미니 정보 표시줄

미니 정보 표시줄 스크린샷
미니 정보 표시줄

미니 정보 표시줄은 Chrome UI 구성요소이며 사이트에서 제어할 수 없지만 사용자가 쉽게 닫을 수 있습니다. 사용자가 닫으면 충분한 시간이 지날 때까지(현재 3개월) 다시 표시되지 않습니다. 사이트가 홈 화면에 추가 기준을 충족하면 beforeinstallprompt 이벤트에서 preventDefault() 여부와 관계없이 미니 정보 표시줄이 표시됩니다.

옴니박스의 설치 버튼 초기 개념
검색주소창의 설치 버튼 초기 개념
미니 정보 표시줄은 Chrome이 검색주소창에 설치 버튼을 포함하여 모든 플랫폼에서 일관된 환경을 만들기 위해 노력하는 동안 Android용 Chrome에 제공되는 임시 환경입니다. ## 홈 화면에 추가 대화상자 트리거
데스크톱 프로그레시브 웹 앱의 설치 버튼
데스크톱 프로그레시브 웹 앱의 설치 버튼

페이지 로드 시 사용자에게 메시지를 표시하는 대신 (권한 요청의 안티 패턴) 앱을 일부 UI와 함께 설치할 수 있음을 나타낼 수 있습니다. 그러면 모달 설치 메시지가 표시됩니다. 예를 들어 이 데스크톱 PWA는 사용자 프로필 이름 바로 위에 '앱 설치' 버튼을 추가합니다.

사용자 동작에 따라 앱 설치를 요청하면 사용자에게 스팸처럼 느껴지지 않으며 '취소' 대신 '추가'를 클릭할 가능성이 높아집니다. 앱에 설치 버튼을 통합하면 사용자가 오늘 앱을 설치하지 않더라도 내일 또는 설치할 준비가 되었을 때 버튼이 표시됩니다.

beforeinstallprompt 이벤트 수신 대기

사이트가 홈 화면에 추가 기준을 충족하면 Chrome에서 beforeinstallprompt 이벤트를 발생시키고, 이벤트 참조를 저장하고, 사용자가 앱을 홈 화면에 추가할 수 있음을 나타내도록 사용자 인터페이스를 업데이트합니다.

let installPromptEvent;

window.addEventListener('beforeinstallprompt', event => {
  // Prevent Chrome <= 67 from automatically showing the prompt
  event.preventDefault();
  // Stash the event so it can be triggered later.
  installPromptEvent = event;
  // Update the install UI to notify the user app can be installed
  document.querySelector('#install-button').disabled = false;
});

앱이 이미 설치되어 있으면 beforeinstallprompt 이벤트가 발생하지 않습니다 (홈 화면에 추가 기준 참고). 하지만 사용자가 나중에 앱을 제거하면 각 페이지 탐색에서 beforeinstallprompt 이벤트가 다시 발생합니다.

prompt()로 대화상자 표시

홈 화면에 추가 대화상자
홈 화면에 추가 대화상자

홈 화면에 추가 대화상자를 표시하려면 사용자 동작 내에서 저장된 이벤트에 prompt()을 호출합니다. Chrome에 모달 대화상자가 표시되어 사용자에게 앱을 홈 화면에 추가하라는 메시지가 표시됩니다. 그런 다음 beforeinstallprompt 이벤트의 userChoice 속성에서 반환된 프로미스를 수신 대기합니다. 이 프롬프트가 표시되고 사용자가 이에 응답한 후 프로미스는 outcome 속성이 있는 객체를 반환합니다.

btnInstall.addEventListener('click', () => {
  // Update the install UI to remove the install button
  document.querySelector('#install-button').disabled = true;
  // Show the modal add to home screen dialog
  installPromptEvent.prompt();
  // Wait for the user to respond to the prompt
  installPromptEvent.userChoice.then(choice => {
    if (choice.outcome === 'accepted') {
      console.log('User accepted the A2HS prompt');
    } else {
      console.log('User dismissed the A2HS prompt');
    }
    // Clear the saved prompt since it can't be used again
    installPromptEvent = null;
  });
});

지연된 이벤트에서 prompt()는 한 번만 호출할 수 있습니다. 사용자가 대화상자에서 취소를 클릭하면 다음 페이지 탐색에서 beforeinstallprompt 이벤트가 발생할 때까지 기다려야 합니다. 기존 권한 요청과 달리 취소를 클릭해도 prompt()에 대한 향후 호출이 차단되지 않습니다. 이 호출은 사용자 동작 내에서 호출해야 하기 때문입니다.

추가 리소스

앱 설치 배너에서 다음을 비롯한 자세한 내용을 확인하세요.

  • beforeinstallprompt 이벤트에 관한 세부정보
  • 홈 화면 추가 메시지에 대한 사용자의 응답 추적
  • 앱이 설치되었는지 추적
  • 앱이 설치된 앱으로 실행되는지 확인