반응형
모든 Progressive Web App에는 앱 매니페스트, 앱의 기본 정보(이름, 아이콘, 설명 등)가 포함된 간단한 JSON 파일이 있습니다.
기존 웹 앱에 PWA 기능만 추가하려는 경우, Progressier에는 동적 앱 아이콘 옵션을 포함하여 필요한 모든 것이 있습니다. 그러나 만약 당신이 당신의 웹 앱 매니페스트를 동적으로 만들고 싶다면, 계속 읽어보세요.
전통적인 방식
당신의 첫 번째 PWA를 만들 때, 가장 간단한 방법은 당신의 HTML 템플릿의섹션에 직접 당신의 앱 매니페스트에 링크를 추가하는 것이다.
호스트 매니페스트.json은 당신의 사이트 어디에나 있습니다. 결과 JSON 파일은 다음과 같아야 합니다.
{
"short_name":"Coronavirus",
"name":"The Coronavirus App",
"background_color":"#ffffff",
"theme_color":"#ffffff",
"display":"standalone",
"orientation":"any",
"start_url":"https://coronavirus.app",
"scope":"https://coronavirus.app",
"icons":[
{"src":"/icon512.png","sizes":"512x512","type":"image/png"},
{"src":"/icon192.png","sizes":"192x192","type":"image/png"},
{src":"/icon196.png","sizes":"196x196","type":"image/png"}
]
}
왜 다르게 하고 싶은지
위의 방법이 웹 앱 매니페스트를 처리하는 데 완벽하게 유효한 방법이지만 정적 파일이 작동하지 않고 대신 동적으로 생성하는 합법적인 경우가 있습니다.
- 데스크톱과 모바일에는 완전히 다른 아이콘이 필요합니다.
- 동일한 도메인에 여러 개의 개별 PWA를 호스팅하려는 경우
- 로그인한 사용자마다 PWA가 다르게 표시되어야 합니다.그리고 아마도 더 많은 타당한 예들이 있을 것이다. 앱 매니페스트를 동적으로 생성하려면 사용자가 요청할 때 서버에 매니페스트를 빌드하는 두 가지 옵션이 있습니다. 또는 브라우저에서 바로 자동으로 생성할 수 있습니다(기본 설정 방식).당신의 사이트에서 정적 파일로 파일을 호스팅하는 대신 /manifest.json의 경로를 API로 만들어 당신이 필요로 하는 것에 기반하여 프로그래밍 방식으로 JSON 파일의 내용을 생성할 수 있게 한다. 다음은 Node/Express를 사용한 예입니다.
클라이언트 측 동적 앱 매니페스트 생성
//for brevity, we're not including the isDesktop function here let iconUrl = isDesktop() ? '/desktop.png' : '/mobile.png'; let manifest = { name: "App name", icons: [{ src: iconUrl, sizes: "512x512", type:"image/png" }] }; let content = encodeURIComponent(JSON.stringify(manifest)); let url = "data:application/manifest+json,"+content; let element = document.createElement('link'); element.setAttribute('rel', 'manifest'); element.setAttribute('href', url); document.querySelector('head').appendChild(element);
- 2021년 12월 28일 https://dev.to에서 처음 출판되었습니다.
- 이면에서는 이러한 사용자 설정을 사용하여 위의 방법으로 앱 매니페스트를 동적으로 생성합니다.
- 클라이언트측 코드에서 만드는 방법은 다음과 같습니다.
- 특정 자산을 동적으로 생성할 필요가 없더라도 데이터 URL이 이 작업을 수행하는 데 더 낫다고 주장합니다.
app.get('/manifest.json', async function(req, res){ //for brevity, we're not including the isDesktop function here let iconUrl = isDesktop() ? '/desktop.png' : '/mobile.png'; let manifest = { name: "App name", icons: [{ src: iconUrl, sizes: "512x512", type:"image/png" }] } res.header('content-type', 'application/json'); return res.status(200).send(JSON.stringify(manifest)); });
- 서버 측 동적 앱 매니페스트 생성
'javascript' 카테고리의 다른 글
Javascript 알고리즘: 역추적 (0) | 2021.12.29 |
---|---|
면접관 대부분이 프런트엔드 개발자에게 질문을 했다. (0) | 2021.12.29 |
로런츠 대칭 깨짐 - 1부 (0) | 2021.12.29 |
HTML5 로컬 스토리지 사용: 세션 저장소 (0) | 2021.12.29 |
10개 이상의 요소를 가진 Firestore -in-subscription (0) | 2021.12.29 |
댓글