PWA는 HTML, CSS, JavaScript로 작성된 웹 앱으로, 네이티브 앱처럼 동작할 수 있도록 설계됩니다. Play Store에 배포하려면 PWA로 먼저 만들어야 합니다.
<!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>내 PWA 앱</title> <link rel="manifest" href="manifest.json"> </head> <body> <h1>안녕하세요, PWA 앱입니다!</h1> <script src="app.js"></script> </body> </html>console.log("PWA 앱이 실행되었습니다!");PWA로 동작하려면 manifest.json 파일이 필요합니다. 이 파일은 앱의 이름, 아이콘, 시작 URL 등을 정의합니다.
json
{ "name": "내 PWA 앱", "short_name": "PWA 앱", "start_url": "/index.html", "display": "standalone", "background_color": "#ffffff", "theme_color": "#000000", "icons": [ { "src": "icon-192x192.png", "sizes": "192x192", "type": "image/png" }, { "src": "icon-512x512.png", "sizes": "512x512", "type": "image/png" } ] }
오프라인 동작과 캐싱을 위해 serviceworker.js 파일을 추가합니다.
javascript
self.addEventListener('install', (event) => { event.waitUntil( caches.open('v1').then((cache) => { return cache.addAll([ '/', '/index.html', '/app.js', '/icon-192x192.png', '/icon-512x512.png' ]); }) ); }); self.addEventListener('fetch', (event) => { event.respondWith( caches.match(event.request).then((response) => { return response || fetch(event.request); }) ); });
<script> if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/serviceworker.js') .then(() => console.log('Service Worker 등록 성공')) .catch((error) => console.log('Service Worker 등록 실패:', error)); } </script>PWA는 HTTPS 환경에서만 제대로 작동하므로, 웹 앱을 호스팅할 서버를 준비하고 SSL 인증서를 적용하세요. (예: GitHub Pages, Netlify, Vercel 등 무료 서비스 활용 가능)
PWA를 Play Store에 등록하려면 TWA를 사용해 Android 앱으로 패키징해야 합니다.
Bubblewrap은 PWA를 TWA로 변환해주는 CLI 도구입니다.
bash
npm install -g @bubblewrap/cli
bubblewrap init --manifest https://your-domain.com/manifest.jsonbubblewrap buildkeytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-aliasbubblewrap build --aab