새로 고침 후 OneSignal 등록 실패
Laravel / Vue OneSignal 。을 는는에 시켰다.<head>"CHANGE: "CHANGE:
<script src="https://cdn.onesignal.com/sdks/OneSignalSDK.js" async=""></script>
<script>
var OneSignal = window.OneSignal || [];
OneSignal.push(function() {
OneSignal.init({
appId: "{{ env('ONESIGNAL_APP_ID') }}"
});
OneSignal.showNativePrompt();
});
</script>
<script>
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/OneSignalSDKWorker.js')
.then(function () {
console.log('Service worker registered');
})
.catch(function (error) {
console.log('Service worker registration failed:', error);
});
} else {
console.log('Service workers are not supported.');
}
</script>
저도 서비스 직원이 있기 때문에, 여기 있는 서류도 따라 보았습니다.
하드 리셋 후에 발생하는 것은 서비스 워커가 설치되고 모든 것이 정상이지만 페이지를 새로 고치면 다음과 같이 표시됩니다.
OneSignalPageSDKES6.js?v=151102:1 미취득(확정)Invalid State Error:현재 환경에서 이 작업을 지원하지 않습니다.Function.getServiceWorkerHref(https://cdn.onesignal.com/sdks/OneSignalPageSDKES6.js?v=151102:1:41510) xe).( https://cdn.onesignal.com/sdks/OneSignalPageSDKES6.js?v=151102:1:144028) at Generator . next ) 、 r ( https://cdn.onesignal.com/sdks/OneSignalPageSDKES6.js?v=151102:1:716) 。
그게 무슨 뜻인지 전혀 모르겠어요"현재 환경"이란 무엇입니까?디버깅은 어디서 시작합니까?콘솔로그를 붙여보려고 해봤지만 아무 소용이 없었어요...
라이브러리의 소스 코드를 보고 디버깅을 시작합니다.
이 경우 라이브러리는 브라우저용 OneSignal SDK입니다.
해보자!!!
는 에러에 의해 을 알 수.getServiceWorkerHref(여기서 정의되어 있는) 기능 및 오류 메시지는 에러 메시지에 의해 유도됩니다.InvalidStateReason★★★★
case InvalidStateReason.UnsupportedEnvironment:
super(`The current environment does not support this operation.`);
break;
파일을 ''에 메모가 .getServiceWorkerHrefOneSignal 개발자들은 그들의 소스 코드를 과감히 시도하는 사람들을 위해 떠났다.
else if (workerState === ServiceWorkerActiveState.Bypassed) {
/*
if the page is hard refreshed bypassing the cache, no service worker
will control the page.
It doesn't matter if we try to reinstall an existing worker; still no
service worker will control the page after installation.
*/
throw new InvalidStateError(InvalidStateReason.UnsupportedEnvironment);
}
보시다시피 서비스 워커가 "Bypassed" 상태가 되면 오류가 발생합니다.게게 뭐냐 어어 어어 어??,자,자,자꾸나.ServiceWorkerActiveState아래 열거는 같은 파일에 있습니다.
/**
* A service worker is active but not controlling the page. This can occur if
* the page is hard-refreshed bypassing the cache, which also bypasses service
* workers.
*/
Bypassed = 'Bypassed',
브라우저가 페이지를 "하드 리프레시"하면 서비스 워커를 바이패스하여 OneSignal이 정상적으로 초기화할 수 없는 것 같습니다.하드 리프레시는 여러 가지 이유로 발생할 수 있습니다.그 중 몇 가지는 다음과 같습니다(제가 아는 한).
- [Refresh]버튼을 여러 번 클릭하면 (보통 짧은 시간 내에 연속적으로 리프레쉬를 하면 리프레쉬가 트리거될 수 있습니다)
- DevTools에서 캐시를 사용하지 않도록 설정한 경우
- 가 「」를 .
no-cache
하드 리셋 후에 발생하는 현상
"하드 리셋"이 정확히 무슨 뜻인지 모르겠지만, 그것이 이 문제를 일으킬 것 같습니다.브라우저를 닫고 작업 중인 페이지를 "리셋" 기능을 사용하지 않고 방문하도록 권장합니다.이론적으로 서비스 워커는 연속 방문 시 캐싱에 사용해야 하며, 이를 통해 OneSignal이 확실하게 기능합니다.
언급URL : https://stackoverflow.com/questions/63659435/onesignal-registration-fails-after-refresh
'source' 카테고리의 다른 글
| vuex와 socketio를 사용하여 실시간 크러드를 만드는 방법 (0) | 2022.07.31 |
|---|---|
| java.net 를 참조해 주세요.Connect Exception:연결이 거부되었습니다. (0) | 2022.07.31 |
| Vuetify 데이터 테이블에서 슬롯을 사용하여 그룹화된 행을 스타일링하려면 어떻게 해야 합니까? (0) | 2022.07.31 |
| Java에서 바이너리 트리 다이어그램을 인쇄하는 방법 (0) | 2022.07.31 |
| Junit의 2개의 리스트와 같은 아사트 (0) | 2022.07.31 |