📖 reference:
1. New PWA Training https://web.dev/new-pwa-training/
2. Mobile Apps - Web vs. Native vs. Hybrid https://www.youtube.com/watch?v=ZikVtdopsfY
3. 프로그래스 웹 앱: 오프라인으로 전환 https://developers.google.com/codelabs/pwa-training/pwa03--going-offline#0
4. PWA builder https://www.pwabuilder.com/
5. PWA builder Github https://github.com/pwa-builder/pwabuilder-web/blob/V2/src/assets/next-steps.md
💡
**PWA 관련 개념 정리, 튜토리얼 정리**
공부시간: 8월 22일 13:00~16:30
목 표: PWA 배포해서 알림 기능 사용해보기
주 제: 네이티브 앱, 모바일 웹, 하이브리드 앱
PWA,PWAbuilder
🥚🐣🐥🐓🤯
💡
기존 반응형, 또는 모바일 웹으로 개발한 웹 페이지를 PWA로 배포해
휴대폰 알림 등 네이티브 기능을 사용해보고 싶었습니다.
오늘 학습에서 배포에 성공하지 못했기 때문에 part2로 다시 정리할 예정입니다...
HTML, CSS, JS와 같은 웹 페이지를 App으로 만들고 배포할 수 있는 기능
18일부터 모바일 웹 형식의 팀 프로젝트를 진행하면서
PWA 배포에 흥미가 생겨서 사용법을 익히기 전에,
네이티브 앱, 모바일 웹, 하이브리드 앱, 프로그래시브 웹 앱에 대해서 알아보았습니다.
기본적인 형태의 앱
네이티브 앱은 각 OS 환경의 가이드와 프레임 워크로 만들어짐
각각의 SDK를 보유, Single platform
각 스토어에 등록
모바일 OS | 개발 도구 | 배포 |
---|---|---|
iOS | Swift, (이전에는 Objective-C) | 앱스토어 |
안드로이드 | 자바, 코틀린 | 플레이스토어 |
장점
단점
New Progressive Web App training now available
pwabuilder-web/next-steps.md at V2 · pwa-builder/pwabuilder-web
yarn create react-app . --template cra-template-pwa
if ('serviceWorker' in navigator) {
window.addEventListener('load', async () => { // 윈도우 로드 시 비동기로 실행
try {
const reg = await navigator.serviceWorker.register('서비스 워커 파일 경로');
console.log('Service worker registered! 😎', reg);
} catch (err) {
console.log('😥 Service worker registration failed: ', err);
}
});
}
사전 캐싱
- Cache Storage API를 사용하여 열리고 precacheResources에 지정된 파일 및 경로가
cache.addAll 메서드를 사용하여 캐시에 로드
- 파일이 필요하거나 요청할 때 캐시하지 않고, 설치 중 미리 캐시
앱이 오프라인일 때 200 상태 코드로 응답할 수 있다.
// Choose a cache name
const cacheName = 'cache-v1';
// List the files to precache
const precacheResources = ['/', '/index.html', '/css/style.css', '/js/main.js', '/js/app/editor.js', '/js/lib/actions.js'];
// When the service worker is installing, open the cache and add the precache resources to it
self.addEventListener('install', (event) => {
console.log('Service worker install event!');
event.waitUntil(caches.open(cacheName).then((cache) => cache.addAll(precacheResources)));
});
self.addEventListener('activate', (event) => {
console.log('Service worker activate event!');
});
// When there's an incoming fetch request, try and respond with a precached resource, otherwise fall back to the network
self.addEventListener('fetch', (event) => {
console.log('Fetch intercepted for:', event.request.url);
event.respondWith(
caches.match(event.request).then((cachedResponse) => {
if (cachedResponse) {
return cachedResponse;
}
return fetch(event.request);
}),
);
});
manifest.json 충족 기준
- 웹 앱이 아직 설치되지 않음
- 사용자 참여 휴리스틱 충족
- HTTPS를 통해 제공
- 다음을 포함하는 웹 앱 매니페스트를 포함합니다.
short_name
또는name
icons
- 192px 및 512px 아이콘을 포함해야 합니다.start_url
display
fullscreen
,standalone
또는minimal-ui
중 하나여야 합니다.prefer_related_applications
이 존재하거나false
여서는 안 됩니다.fetch
핸들러에 서비스 워커를 등록합니다.
ngrok - secure introspectable tunnels to localhost
ngrok http 5000
ngrok http 3000 -host-header="localhost:3000”
authtoken은 하이퍼
ngork authtoken 토큰
시동 코드는 VSC 터미널
ngork authtoken 토큰