한 주 안에 Discourse 버그를 두 개나 발견하다니, 상을 하나 받아도 될 것 같아요.
하지만 두 가지 조치를 모두 취했는데도 파일이 여전히 jpeg로 변환되고 있습니다. 설정을 100%로 변경하고, 이미지를 92% 품질의 jpg로 저장한 후 PNG로 내보냈거든요(PNG의 품질을 직접 변경할 수 없었나요?). 다른 우회 방법이 있거나, 제가 잘못한 부분이 있을까요?
죄송합니다, 저는 PWA가 없는 사용자를 위한 덜 눈에 띄는 영속적 버튼/링크, 예를 들어 메뉴에 있는 것을 말씀드린 것입니다.
이 기능이 유용하다고 생각하는 이유는, 앱을 설치하려는 사용자가 있을 때 그 사용자가 어떤 상태인지 알 수 없고, Q&A를 진행하는 데 많은 에너지가 소모되기 때문입니다. 사용자가 따라 할 수 있는 확실한 2단계 프로세스가 있다면 좋겠습니다. 즉, 햄버거 메뉴로 이동 → 앱 설치. 그러면 사용자의 TL(타임라인) 상태, 방문 횟수, 배너를 닫았는지, 과거에 앱을 삭제했는지, 어떤 브라우저를 사용 중인지, 그리고 브라우저가 설치 옵션을 어떻게 표현하는지 등을 걱정할 필요가 없습니다.
여기서 혼란(제 혼란을 포함해서)이 많이 생기는 이유는 브라우저에 따라 PWA 설치 옵션이 다르기 때문인 것 같습니다:
Android Chrome (즉, 기본 브라우저): 공유하신 스크린샷을 여기서 받으신 것 같습니다. 여기서는 햄버거 메뉴에 “앱 설치” 옵션이 있는 것처럼 보입니다. 모든 브라우저에서 이 옵션이 제공되면 좋겠지만, 현재로서는 불가능한 것 같습니다.
iPhone Safari (기본 브라우저): 햄버거 메뉴에서 설치할 수 있는 버튼이 없습니다. 설치하려면 공유 아이콘(위쪽 화살표가 있는 사각형)을 누르고, 아래로 스크롤하여 "홈 화면에 추가"를 선택해야 합니다. 여기에서의 토론을 들어보면 햄버거 메뉴에 버튼을 추가하는 것은 불가능한 것 같습니다. 이렇게 하면 앱이 홈 화면에 저장되긴 하지만, 이전 상태를 저장하는 것과 같은 PWA 기능을 단독으로 제공하는지는 확실하지 않습니다.
데스크톱 Chrome: 제 Mac Chrome 브라우저의 햄버거 메뉴에는 설치 버튼이 없습니다. 원래 있어야 하나요? 여기에 추가할 수 있을까요?
데스크톱 Safari: 제 Mac Safari 브라우저의 햄버거 메뉴에도 설치 버튼이 없습니다. 원래 있어야 하나요? 여기에 추가할 수 있을까요?
Falco님의 제안은 Chrome 메뉴를 활용하는 것입니다. 여기서 말하는 햄버거 메뉴는 브라우저의 것이 아니라 Discourse의 메뉴를 의미합니다. 앞서 몇몇 분들이 Safari나 Firefox에서는 작동하지 않는다고 지적했듯이, 이 옵션은 브라우저에 따라 달라집니다. 설치가 가능하다 해도 해당 옵션이 제공되지 않는 경우가 있으므로, Discourse 메뉴 옵션이 가장 적절해 보입니다. 또한 사용자가 Chrome 메뉴를 확인하지 않을 수 있으므로, 이 옵션의 존재를 상기시켜 줄 수 있다는 장점도 있습니다.
<script>
let deferredPrompt; // 설치 프롬프트를 표시할 수 있도록 허용
const installButton = document.getElementById("install_button");
window.addEventListener("beforeinstallprompt", e => {
console.log("beforeinstallprompt 발생");
// Chrome 76 및 이전 버전에서 프롬프트가 자동으로 표시되지 않도록 방지
e.preventDefault();
// 나중에 트리거할 수 있도록 이벤트를 저장합니다.
deferredPrompt = e;
// 설치 버튼 표시
installButton.hidden = false;
installButton.addEventListener("click", installApp);
});
function installApp() {
// 프롬프트 표시
deferredPrompt.prompt();
installButton.disabled = true;
// 사용자가 프롬프트에 응답할 때까지 대기
deferredPrompt.userChoice.then(choiceResult => {
if (choiceResult.outcome === "accepted") {
console.log("PWA 설치 수락됨");
installButton.hidden = true;
} else {
console.log("PWA 설치 거부됨");
}
installButton.disabled = false;
deferredPrompt = null;
});
}
window.addEventListener("appinstalled", evt => {
console.log("appinstalled 발생", evt);
});
</script>