Android의 WebAPK

사용자가 Android의 홈 화면에 프로그레시브 웹 앱을 추가하면 Chrome에서 자동으로 APK를 생성합니다. 이 APK를 WebAPK라고도 합니다. APK를 통해 설치하면 앱이 앱 런처와 Android의 앱 설정에 표시되고 일련의 인텐트 필터를 등록할 수 있습니다.

Android에 PWA를 설치하면 프로그레시브 웹 앱이 사용자의 홈 화면에 추가되는 것 이상의 작업이 실행됩니다. Chrome에서 앱의 특수 APK를 자동으로 생성하고 설치합니다. 이를 WebAPK 라고도 합니다. APK를 통해 설치하면 앱이 앱 런처와 Android의 앱 설정에 표시되고 일련의 인텐트 필터를 등록할 수 있습니다.

WebAPK를 생성하기 위해 Chrome은 웹 앱 매니페스트와 기타 메타데이터를 확인합니다. 매니페스트 업데이트가 감지되면 Chrome에서 새 APK를 생성해야 합니다.

Android 인텐트 필터

프로그레시브 웹 앱이 Android에 설치되면 앱 범위 내의 모든 URL에 대해 일련의 인텐트 필터 를 등록합니다. 사용자가 앱 범위 내에 있는 링크를 클릭하면 브라우저 탭 내에서 열리는 대신 앱이 열립니다.

다음과 같은 부분 manifest.json을 고려해 보세요.

"start_url": "/",
"display": "standalone",

이를 사용하는 웹 앱이 앱 런처에서 실행되면 브라우저 Chrome 없이 https://example.com/이 독립형 앱으로 열립니다.

WebAPK에는 다음과 같은 인텐트 필터가 포함됩니다.

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data
    android:scheme="https"
    android:host="example.com"
    android:pathPrefix="/" />
</intent-filter>

사용자가 설치된 앱 내에서 https://example.com/read 링크를 클릭하면 인텐트에 의해 포착되어 프로그레시브 웹 앱에서 열립니다.

scope를 사용하여 인텐트 필터 제한

프로그레시브 웹 앱에서 사이트 내의 모든 URL을 처리하지 않도록 하려면 웹 앱 매니페스트에 scope 속성을 추가하면 됩니다. scope 속성은 URL이 origin + scope와 일치하는 경우에만 웹 앱을 열도록 Android에 지시합니다. 이를 통해 앱에서 처리할 URL과 브라우저에서 열어야 하는 URL을 제어할 수 있습니다. 이는 동일한 도메인에 앱과 앱이 아닌 다른 콘텐츠가 있는 경우에 유용합니다.

다음과 같은 부분 manifest.json을 고려해 보세요.

"scope": "/app/",
"start_url": "/app/",
"display": "standalone",

앱 런처에서 실행되면 브라우저 Chrome 없이 https://example.com/app/이 독립형 앱으로 열립니다.

이전과 마찬가지로 생성된 WebAPK에는 인텐트 필터가 포함되지만 APK의 AndroidManifest.xml에 다른 android:pathPrefix 속성이 있습니다.

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data
    android:scheme="https"
    android:host="example.com"
    android:pathPrefix="/app/" />
</intent-filter>

몇 가지 예를 살펴보겠습니다.

권장사항

https://example.com/app/ - /app/

권장사항

https://example.com/app/read/book - /app/

금지사항

https://example.com/help/ - /app/에 없음

금지사항

https://example.com/about/ - /app/에 없음

scope에 관한 자세한 내용, 설정하지 않을 때 발생하는 상황, 이를 사용하여 앱의 범위를 정의하는 방법을 알아보려면 scope를 참고하세요.

권한 관리

권한은 다른 웹 앱과 동일한 방식으로 작동하며 설치 시 요청할 수 없습니다. 대신 런타임에 요청해야 하며, 정말로 필요한 경우에만 요청하는 것이 좋습니다. 예를 들어 처음 로드할 때 카메라 권한을 요청하지 말고 사용자가 사진을 찍으려고 할 때까지 기다립니다.

저장소 및 앱 상태 관리

프로그레시브 웹 앱이 APK를 통해 설치되더라도 Chrome은 현재 프로필을 사용하여 데이터를 저장하며 분리되지 않습니다. 이를 통해 브라우저와 설치된 앱 간에 공유된 환경을 사용할 수 있습니다. 쿠키가 공유되고 활성화되며 모든 클라이언트 측 저장소에 액세스할 수 있고 서비스 워커가 설치되어 사용할 준비가 됩니다.

WebAPK 업데이트

WebAPK 업데이트 방법에 관한 정보는 Chrome에서 웹 앱 매니페스트 업데이트를 처리하는 방법으로 이동되었습니다.

자주 묻는 질문(FAQ)

스플래시 화면을 생성하는 데 사용되는 아이콘은 무엇인가요?

스플래시 화면에 192px 및 512px의 두 가지 아이콘 크기를 제공하는 것이 좋습니다: 192px 및 512px. 스플래시 화면의 아이콘이 너무 작다는 의견이 접수되었으며, Chrome 71 이상에서 생성된 WebAPK는 스플래시 화면에 더 큰 아이콘을 표시합니다. 권장 아이콘이 제공되는 한 아무런 조치가 필요하지 않습니다.

사용자가 사이트의 네이티브 앱을 이미 설치한 경우 어떻게 되나요?

오늘날 홈 화면에 추가하는 것과 마찬가지로 사용자는 네이티브 앱과 관계없이 사이트를 추가할 수 있습니다. 사용자가 둘 다 설치할 수 있다고 예상되는 경우 사이트의 아이콘 또는 이름을 네이티브 앱과 차별화하는 것이 좋습니다.

사용자가 Chrome의 캐시를 삭제하면 설치된 사이트의 저장소가 삭제되나요?

예.

새 기기를 받으면 앱이 다시 설치되나요?

현재는 아니지만 중요한 영역이라고 생각하며 작동하도록 하는 방법을 조사하고 있습니다.

권한은 어떻게 처리되나요? Chrome 프롬프트가 표시되나요, 아니면 Android 프롬프트가 표시되나요?

권한은 계속 Chrome을 통해 관리됩니다. 사용자에게 권한을 부여하는 Chrome 프롬프트가 표시되며 Chrome 설정에서 권한을 수정할 수 있습니다.

어떤 Android 버전에서 작동하나요?

프로그레시브 웹 앱은 Android용 Chrome을 실행하는 모든 Android 버전(특히 Jelly Bean 이상)에 설치할 수 있습니다.

WebView를 사용하나요?

아니요. 사용자가 사이트를 추가한 Chrome 버전에서 사이트가 열립니다.

생성된 APK를 Play 스토어에 업로드할 수 있나요?

아니요. 자체 APK를 업로드하려면 신뢰할 수 있는 웹 활동을 확인하세요.

Play 스토어에 등록되나요?

아니요. Play 스토어에 등록하기 위해 자체 APK를 업로드하려면 신뢰할 수 있는 웹 활동을 확인하세요.

Android의 다른 브라우저 개발자입니다. 이 원활한 설치 프로세스를 사용할 수 있나요?

이를 지원하기 위해 노력 중이며, Android의 모든 브라우저에서 사용할 수 있도록 최선을 다하고 있으며 곧 자세한 내용을 제공할 예정입니다.