# iOS PWA에서 SW가 앱을 제어하지 않아 푸시 알림 구독이 조용히 실패하는 문제

**URL:** https://meta.discourse.org/t/push-notification-subscription-in-ios-pwa-silently-failing-because-of-sw-not-controlling-the-app/402645
**Category:** Bug
**Tags:** pwa, push-notifications, ios
**Created:** [5월 11, 2026, 10:17오전 UTC](https://meta.discourse.org/t/push-notification-subscription-in-ios-pwa-silently-failing-because-of-sw-not-controlling-the-app/402645 "2026-05-11T10:17:46Z")
**Posts on this page:** 1
**Showing post:** 1

<div class="post-metadata">

### Author: ![klappradla](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/klappradla/32/531604_2.png) [@klappradla](https://meta.discourse.org/u/klappradla)
#### Post date: [5월 11, 2026, 10:17오전 UTC](https://meta.discourse.org/t/push-notification-subscription-in-ios-pwa-silently-failing-because-of-sw-not-controlling-the-app/402645/1 "2026-05-11T10:17:47Z")

</div>

안녕하세요 👋

iOS PWA에서 푸시 알림을 설정할 때 이상한 동작(아마도 버그…)을 경험했습니다. UI는 푸시 알림 구독이 설정된 것처럼 보이지만, 백그라운드에서는 아무 일도 일어나지 않았고 사용자는 푸시 알림을 절대 받지 못합니다.

_(요약: 해결 방법을 알고 있으며 PR을 제공할 수 있습니다)_

## 재현 방법 👣

이 문제는 iOS에서 PWA를 설치한 직후 푸시 알림을 활성화하는 것과 관련이 있습니다.

1. iOS 모바일 Safari에서 Discourse 인스턴스를 엽니다.
2. 공유 메뉴를 열고 "홈 화면에 추가"를 선택합니다.
3. 홈 화면의 새 PWA를 엽니다.
4. 푸시 알림을 활성화할지 묻는 배너가 표시됩니다.
5. “알림 활성화” 링크를 클릭합니다.
  1. `"xyz"가 사용자에게 알림을 보내려고 합니다`라는 시스템 다이얼로그가 표시됩니다 - 허용을 선택합니다.

6. 알림 설정으로 이동하면 `실시간 알림`이 **활성화되지 않은** 것을 볼 수 있습니다.
  1. 서버를 확인해도 해당 사용자의 새 `PushSubscription` 레코드를 찾을 수 없습니다.

## 예상 동작 📚

5단계 이후에는 알림이 활성화되었음을 알리는 푸시 알림을 이미 받아야 합니다. 데이터베이스에는 현재 사용자의 새 `PushSubscription` 레코드가 생성되어야 하며, PWA에서 `실시간 알림`을 받는 설정이 활성화되어야 합니다.

## 문제 🐛

방금 새로 시작된 PWA에서는 서비스 워커가 설치되고 활성화되었지만, **아직 페이지를 제어하지 않습니다**. 이로 인해 `lib/push-notifications.js`의 `isPushNotificationsSupported()` 체크는 여전히 false를 반환합니다. 그 이유는 `navigation.serviceworker.controller`가 `null`을 반환하기 때문입니다. 다음은 중요한 두 줄입니다:

```javascript
navigator.serviceWorker.controller &&
navigator.serviceWorker.controller.state === "activated"

```

이로 인해 UI는 사용자에게 설정이 정상적인 것처럼 보이게 하지만, 사용자는 푸시 알림을 절대 받을 수 없습니다.

첫 번째 로드 시 PWA는 제어되지 않은 상태이며, 사용자가 권한을 부여했음에도 `subscribe()` 호출이 결코 이루어지지 않습니다… 🐛

사용자가 방법을 안다면 스스로 문제를 해결할 수 있습니다:

1. PWA를 완전히 닫습니다 (스와이프하여 제거…)
2. PWA를 다시 엽니다
3. 알림 설정으로 이동합니다
4. `실시간 알림`을 다시 활성화합니다
5. -\> 이번에는 새 `PushSubscription` 레코드가 생성되고 알림이 설정됩니다.

## 잠재적 수정안 🩹

저는 설치/활성화 시 `skipWaiting()`과 `clients.claim()`을 호출하는 또 다른 서비스 워커를 등록하여 이 문제를 우회했습니다. 이렇게 하면 PWA의 제어를 즉시 넘겨받아 구독이 진행되고 각각의 `PushSubscription` 레코드가 생성됩니다.

저는 Discourse 코어 포크에 손을 대지 않고도 사용자의 상황을 수정할 수 있도록 이 내용을 "핫픽스"로 내 커스텀 플러그인 중 하나에 포함하여 배포했습니다…

변경 사항은 두 가지뿐입니다:

```ruby
# plugin.rb
register_service_worker "push-notification-setup.js"

```

```javascript
// assets/push-notification-setup.js
self.addEventListener("install", function () {
  self.skipWaiting();
});
		
		
self.addEventListener("activate", function (event) {	
  event.waitUntil(self.clients.claim());
});

```

하지만 이 수정은 Discourse 코어에 포함되어야 한다고 생각합니다. 제가 이렇게 하면 플러그인이 PWA에 대해 불필요한 제어를 하게 됩니다. 구독이 실제로 작동하도록 Discourse 코어의 체크를 조정하는 PR을 제공할 수 있습니다. 여기에서 자세히 말씀드리겠지만, 주제에 대한 의견을 미리 말씀해 주셔도 좋습니다.

---

_[View the full topic](https://meta.discourse.org/t/push-notification-subscription-in-ios-pwa-silently-failing-because-of-sw-not-controlling-the-app/402645)._
