source

새로 고침 후 OneSignal 등록 실패

goodcode 2022. 7. 31. 22:59
반응형

새로 고침 후 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

반응형