# 푸시 구독자 기반 관리

Pushwoosh에서 각 구독자는 푸시 토큰으로 식별됩니다. 푸시 토큰은 특정 기기로 메시지를 전송할 수 있게 해주는 고유 식별자입니다. 이 게시물에서는 푸시 토큰의 작동 방식과 구독자 기반에서 유효한 토큰만 유지하는 방법을 다룹니다.

## 푸시 토큰과 그 작동 방식 이해하기

푸시 토큰은 푸시 서비스 제공업체에 의해 기기의 특정 앱 인스턴스에 할당된 고유한 익명 식별자입니다:

*   iOS 기기용 Apple Push Notification Service (APNs)
*   Android 기기용 Firebase Cloud Messaging (FCM)

이 토큰은 푸시 알림이 사용자의 기기에서 올바른 앱으로 전달되도록 보장합니다.

Pushwoosh에서 푸시 토큰의 수명 주기는 다음과 같은 주요 단계를 포함합니다:

1.  앱이 처음 실행되면 기기의 운영 체제(OS)에 푸시 알림 수신 권한을 요청합니다.

2.  애플리케이션의 푸시 서비스(예: iOS용 APNs, Android용 FCM)는 해당 앱 인스턴스에 대한 고유한 푸시 토큰을 생성합니다. 기본적으로 Pushwoosh SDK는 사용자가 알림 표시 권한을 부여하지 않았더라도 이 토큰을 수집하고 저장합니다. 이러한 사용자에게는 푸시 메시지가 표시되지 않지만, 이 토큰은 Pushwoosh의 다른 메시징 채널인 애플리케이션 받은 편지함으로 메시지를 보내는 데 계속 사용될 수 있습니다.

    그러나 권한을 부여한 사용자로부터만 토큰을 수집하도록 SDK를 구성할 수 있습니다.

3.  앱은 Pushwoosh SDK를 사용하여 이 토큰을 기기 데이터(하드웨어 ID 또는 HWID 포함)와 함께 [`/registerDevice`](/ko/developer/api-reference/device-api/#registerdevice) API 엔드포인트를 통해 Pushwoosh 데이터베이스로 전송합니다.

4.  Pushwoosh는 향후 메시징을 위해 토큰을 안전하게 저장합니다.

5.  알림이 트리거되면 Pushwoosh는 저장된 토큰을 사용하여 적절한 전송 게이트웨이를 통해 메시지를 라우팅합니다.

6.  선택된 게이트웨이는 메시지를 기기로 전송하고, OS는 시스템 및 앱 알림 설정에 따라 메시지를 표시합니다.

7.  푸시 토큰이 유효하지 않게 되면(예: 앱 제거로 인해), Pushwoosh는 다른 알림 발송 후 게이트웨이가 만료/무효 등의 토큰을 포함한 발송 오류 목록을 반환할 때 전송 실패를 감지합니다. 그러면 Pushwoosh는 해당 토큰을 비활성으로 표시하고 데이터베이스에서 삭제합니다. 동일한 기기에 앱이 다시 설치되면 새 토큰이 발급됩니다.

### 푸시 토큰이 유효하지 않게 되는 일반적인 이유

Apple Push Notification Service (APNs)와 Firebase Cloud Messaging (FCM)은 토큰 수명 주기 정책에 대한 완전한 투명성을 제공하거나 사전 토큰 유효성 검사를 허용하지 않지만, 푸시 토큰이 유효하지 않게 되거나 만료될 수 있는 알려진 시나리오가 있습니다.

| 원인 | APNs (iOS) | FCM (Android) |
| :---- | ----- | ----- |
| **앱 제거** | 앱 제거 후 토큰이 유효하지 않게 됩니다. APNs는 결국 `410 Unregistered` 오류를 반환합니다. Apple은 무효화가 언제 발생하는지 명시하지 않으며, 몇 분에서 며칠까지 걸릴 수 있습니다. [자세히 알아보기](https://developer.apple.com/forums/thread/670868) | 제거 시 토큰이 즉시 무효화됩니다. 이후 전송 시 `Unregistered` 오류가 반환됩니다. [자세히 알아보기](https://help.pushwoosh.com/hc/en-us/articles/19861855131805-Sudden-increasing-of-unregistered-errors-on-the-Android-platform) |
| **토큰 갱신** | APNs는 OS 업그레이드, 기기 백업/복원, 앱 재설치 또는 OS 업데이트 후 새 토큰을 발급합니다. [자세히 알아보기](https://developer.apple.com/documentation/usernotifications/registering-your-app-with-apns#:~:text=Never%20cache%20device%20tokens%20in%20local%20storage.%20APNs%20issues%20a%20new%20token%20when%20the%20user%20restores%20a%20device%20from%20a%20backup%2C%20when%20the%20user%20installs%20your%20app%20on%20a%20new%20device%2C%20and%20when%20the%20user%20reinstalls%20the%20operating%20system.%20You%20get%20an%20up%2Dto%2Ddate%20token%20each%20time%20you%20ask%20the%20system%20to%20provide%20the%20token.) | APNs와 동일한 동작입니다. 앱 데이터 삭제 또는 기기 복원으로도 트리거됩니다. [자세히 알아보기](https://firebase.google.com/docs/cloud-messaging/manage-tokens?utm_source=chatgpt.com#retrieve-and-store-registration-tokens) |
| **토큰 비활성** | 비활성으로 인한 만료는 문서화되어 있지 않습니다. [자세히 알아보기](https://developer.apple.com/forums/thread/671310) | 270일 이상 비활성 상태인 토큰은 오래되었거나 만료된 것으로 간주됩니다. FCM은 이를 유효하지 않은 것으로 표시합니다. [자세히 알아보기](https://firebase.google.com/docs/cloud-messaging/manage-tokens#stale-and-expired-tokens) |
<Aside type="caution" title="중요">

Pushwoosh는 푸시 알림 전송에 실패한 경우에만 토큰 유효성을 확인합니다. 사전에 토큰 상태를 확인하지는 않습니다.

</Aside>

## 유효하지 않은 푸시 토큰을 제거하여 구독자 목록을 깨끗하게 유지하는 방법

푸시 구독자 목록을 깨끗하게 유지하려면 정기적으로 전송 통계를 확인하고, 유효하지 않은 토큰을 제거하며, 앱과 백엔드가 항상 최신 토큰 데이터를 가지고 있도록 해야 합니다.

Pushwoosh는 이를 돕기 위해 여러 가지 방법을 제공합니다:

### 전체 구독자 기반에 정기적으로 푸시 알림 보내기

전체 구독자 기반에 정기적으로 푸시 메시지를 보내세요. 이는 Pushwoosh가 유효하지 않은 토큰을 식별하는 데 도움이 됩니다. 메시지 전송이 실패하면(일반적으로 유효하지 않은 토큰으로 인해) 푸시 게이트웨이는 오류를 반환합니다. SDK는 이 응답을 캡처하고 유효하지 않은 토큰을 자동으로 제거하여 향후 전송에서 제외되도록 합니다.

> **중요:** 토큰 유효성은 푸시가 전송될 때만 확인됩니다. Pushwoosh는 백그라운드에서 토큰 유효성을 확인하지 않습니다.

### API를 사용하여 기기 등록 해제하기
<Aside type="caution" icon="setting" title="개발자 지원 필요">
API를 통해 기기를 등록 해제하려면 개발팀의 지원이 필요합니다. 이 가이드를 개발팀과 공유하여 프로세스를 구현하도록 하세요.
</Aside>

[`/bulkUnregisterDevice`](/ko/developer/api-reference/audience-api/#bulkunregisterdevice) Device API 메서드를 사용하여 구독자 기반에서 푸시 토큰을 제거할 수 있습니다. 예를 들어, 사용자가 옵트아웃하거나 더 이상 활성 상태가 아닐 때 사용할 수 있습니다.

방법은 다음과 같습니다:

1.  기준에 맞는 사용자 세그먼트를 만듭니다(예: 옵트아웃, 무료 등급 사용자 또는 X일 동안 비활성 상태인 사용자).
2.  Control Panel 또는 [`exportSegment`](/ko/developer/api-reference/segmentation-filters-api/#exportsegment) API 메서드를 사용하여 세그먼트를 내보냅니다.
3.  [`/bulkUnregisterDevice`](/ko/developer/api-reference/audience-api/#bulkunregisterdevice)를 호출하여 해당 세그먼트에 있는 기기의 푸시 토큰을 삭제합니다.

### 자동 유효성 검사로 90일 후 비활성 토큰 자동 제거

Pushwoosh의 자동 비활성 정리 알고리즘은 90일 동안 활동하지 않은 사용자의 푸시 토큰을 제거하여 구독자 목록을 깨끗하게 유지하는 데 도움이 됩니다.

이 기능은 기본 **Last Application Open** 태그를 사용하여 사용자가 마지막으로 앱을 연 시점을 추적하는 방식으로 작동합니다. 사용자가 90일 이상 앱을 열지 않으면 해당 푸시 토큰은 비활성으로 표시되고 구독자 기반에서 제거됩니다.
<Aside type="caution" title="중요">
이 기능은 2024년 1월 1일 이후에 생성된 모든 계정에 대해 기본적으로 활성화됩니다. 계정에서 활성화되어 있는지 확인하거나 활성화를 요청하려면 [Pushwoosh 지원팀에 문의](https://help.pushwoosh.com/hc/en-us/requests/new/)하세요.
</Aside>

### 제거 추적 사용하기

제거 추적은 사용자가 앱을 제거할 때 이를 감지하여 푸시 구독자 목록을 정확하게 유지합니다. 이를 통해 Pushwoosh는 유효하지 않은 토큰을 자동으로 제거할 수 있습니다.
> **참고:** 제거 추적은 **iOS** 및 **Android**에서만 지원됩니다.

작동 방식은 다음과 같습니다:

1.  Pushwoosh는 모든 구독 기기에 하루에 한 번 자동 푸시 알림을 보냅니다. 이 자동 알림은 사용자에게 보이지 않으며 알림, 소리 또는 배지가 없습니다.
2.  각 기기에는 알림 게이트웨이에서 제공하는 고유한 푸시 토큰이 있습니다. 앱이 제거되면 토큰은 유효하지 않게 됩니다. 자동 푸시가 실패하면 게이트웨이는 오류를 반환합니다.
3.  Pushwoosh는 오류를 감지하고 구독자 목록에서 유효하지 않은 토큰을 제거합니다.

<Aside type="caution" title="중요">
제거 추적은 매일 모든 구독자에게 자동 푸시 알림을 보내므로 시스템 부하가 증가할 수 있습니다. 인프라가 이 볼륨을 지원할 수 있는지 확인하세요. 이 기능은 지원되는 플랫폼에서 기본적으로 활성화됩니다. 비활성화하려면 [Pushwoosh 지원팀에 문의](https://help.pushwoosh.com/hc/en-us/requests/new/)하거나 고객 성공 관리자에게 문의하세요.
</Aside>

#### 제거 추적의 한계

알림 게이트웨이는 자동 푸시 전송을 보장하지 않습니다. 이러한 메시지는 게이트웨이에 의해 우선순위가 낮아지거나 삭제될 수 있으며, 이로 인해 제거 감지의 정확성이 지연되거나 제한될 수 있습니다. [자세히 알아보기](https://help.pushwoosh.com/hc/en-us/articles/26713265335581-Understanding-Silent-Push-Notification-Behavior-and-Limits-on-iOS)

#### 제거 데이터 보기

제거 활동을 모니터링하려면 Pushwoosh Control Panel에서 **Statistics > Dashboards > Application dashboard**로 이동하세요. **App Uninstalls** 그래프는 애플리케이션의 제거 추세에 대한 타임라인 뷰를 제공합니다.

## 푸시 토큰 삭제 후 사용자를 복원할 수 있나요?

지원되는 방법을 사용하여 푸시 토큰을 삭제하는 것은 쉽게 되돌릴 수 있습니다.

사용자가 앱을 다시 열면:

1.  Pushwoosh SDK는 자동으로 새 푸시 토큰을 요청합니다.
2.  그런 다음 기기를 다시 등록합니다([`registerDevice`](/ko/developer/api-reference/device-api/#registerdevice)를 통해).
3.  사용자는 다시 활성 구독자가 되며 앞으로 푸시 알림을 받게 됩니다.