> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 웹 SDK 매핑

> 레거시 Player 모델과 새로운 User 모델 간의 OneSignal 웹 SDK 메서드를 비교하세요. TypeScript 기반 코드 예제 및 업데이트된 메서드 참조를 통해 구현을 마이그레이션하는 방법을 알아보세요.

<Warning>
  OneSignal은 기기 중심 모델(Player ID)에서 사용자 중심 모델(OneSignal ID)로 업데이트되었습니다. 마이그레이션 가이드는 [사용자 모델 마이그레이션 가이드](./user-model-migration-guide)를 참조하세요.

  레거시 기기 중심 구현에 대한 문서는 [버전 9](/v9.0/docs/web-push-sdk)를 참조하세요.
</Warning>

## 개요

이 문서는 OneSignal의 레거시 **Player 모델 웹 SDK**의 메서드, 속성 및 이벤트를 새로운 **User 모델** SDK에 매핑합니다. 각 섹션에는 일치하는 TypeScript 코드 예제가 포함되어 있어 통합을 업데이트하는 방법을 명확하게 보여줍니다.

모든 예제는 데모 목적으로 단순화되었습니다. 완전하고 최신 구현을 위해서는 각 메서드 또는 이벤트 아래에 제공된 문서 링크를 참조하세요.

## OneSignal Service Worker

`OneSignalSDKWorker.js` 파일의 import를 업데이트하세요:

**Player 모델:**

```javascript theme={null}
importScripts('https://cdn.onesignal.com/sdks/OneSignalSDKWorker.js');
```

**User 모델:**

```javascript theme={null}
importScripts("https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.sw.js");
```

파일 경로는 동일하게 유지하세요. `importScripts` URL만 업데이트하세요.

자세한 내용은 [OneSignal Service Worker](./onesignal-service-worker)를 참조하세요.

## 초기화

### `init()`

**Player 모델:** [문서](/v9.0/docs/web-push-sdk)

```html theme={null}
<script src="https://cdn.onesignal.com/sdks/OneSignalSDK.js" async></script>
<script>
window.OneSignal = window.OneSignal || [];
OneSignal.push(function() {
  OneSignal.init({
    appId: "YOUR_APP_ID"
  });
});
</script>
```

**User 모델:** [문서](./mobile-sdk-reference#initialize)

```html theme={null}
<script src="https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.page.js" defer></script>
<script>
window.OneSignalDeferred = window.OneSignalDeferred || [];
OneSignalDeferred.push(async function(OneSignal) {
  await OneSignal.init({
    appId: "YOUR_APP_ID",
  });
});
</script>
```

### `provideUserConsent()`

**Player 모델:** [문서](/v9.0/docs/web-push-sdk)

```typescript theme={null}
OneSignal.provideUserConsent(true)
```

**User 모델:** [문서](./mobile-sdk-reference#setconsentgiven)

```typescript theme={null}
OneSignal.setConsentGiven(true)
```

## 푸시 등록

### `showNativePrompt()`

**Player 모델:**

```typescript theme={null}
OneSignal.showNativePrompt()
```

**User 모델:** [문서](./mobile-sdk-reference#requestpermission-fallbacktosettings-push)

```typescript theme={null}
OneSignal.Notifications.requestPermission()
```

### `registerForPushNotifications()` — User 모델에서 제거됨

```typescript theme={null}
OneSignal.registerForPushNotifications()
```

### `#permissionPromptDisplay`

**Player 모델:**

```typescript theme={null}
OneSignal.on('permissionPromptDisplay', () => ...)
```

**User 모델:** [문서](./web-sdk-reference#addeventlistener-push-notification)

```typescript theme={null}
OneSignal.Notifications.addEventListener('permissionPromptDisplay', event => { ... })
```

### `showSlidedownPrompt()`

**Player 모델:**

```typescript theme={null}
OneSignal.showSlidedownPrompt()
```

**User 모델:** [문서](./web-sdk-reference#promptpush)

```typescript theme={null}
OneSignal.Slidedown.promptPush()
```

### `showHttpPrompt()` — User 모델에서 제거됨

```typescript theme={null}
OneSignal.showHttpPrompt()
```

### `showCategorySlidedown()`

**Player 모델:**

```typescript theme={null}
OneSignal.showCategorySlidedown()
```

**User 모델:** [문서](./web-sdk-reference#promptpushcategories)

```typescript theme={null}
OneSignal.Slidedown.promptPushCategories()
```

### `#getNotificationPermission`

**Player 모델:**

```typescript theme={null}
OneSignal.on('getNotificationPermission', (permission) => ...)
```

**User 모델:** [문서](./web-sdk-reference#addeventlistener-push-subscription)

```typescript theme={null}
OneSignal.User.PushSubscription.addEventListener('change', ({ optedIn }) => { ... })
```

### `isPushNotificationsSupported()`

**Player 모델:**

```typescript theme={null}
OneSignal.isPushNotificationsSupported()
```

**User 모델:** [문서](./web-sdk-reference#ispushsupported)

```typescript theme={null}
OneSignal.Notifications.isPushSupported()
```

### `isPushNotificationsEnabled()`

**Player 모델:**

```typescript theme={null}
await OneSignal.isPushNotificationsEnabled()
```

**User 모델:** [문서](./web-sdk-reference#optedin)

```typescript theme={null}
OneSignal.User.PushSubscription.optedIn
```

### `#subscriptionChange`

**Player 모델:**

```typescript theme={null}
OneSignal.on('subscriptionChange', (subscribed) => ...)
```

**User 모델:**

```typescript theme={null}
OneSignal.User.PushSubscription.addEventListener('change', ({ token }) => { ... })
```

## 분석

### `#notificationPermissionChange`

**Player 모델:**

```typescript theme={null}
OneSignal.on('notificationPermissionChange', ({ to }) => ...)
```

**User 모델:** [문서](./web-sdk-reference#permissionchange)

```typescript theme={null}
OneSignal.Notifications.addEventListener('permissionChange', permission => { ... })
```

### `#popoverShown`

**Player 모델:**

```typescript theme={null}
OneSignal.on('popoverShown', () => ...)
```

**User 모델:** [문서](./web-sdk-reference#addeventlistener-slidedown)

```typescript theme={null}
OneSignal.Slidedown.addEventListener('slidedownShown', presented => { ... })
```

### `#customPromptClick`

**Player 모델:**

```typescript theme={null}
OneSignal.on('customPromptClick', ({ result }) => ...)
```

**User 모델:** [문서](./web-sdk-reference#click)

```typescript theme={null}
OneSignal.Notifications.addEventListener('click', ({notification, result}) => { ... })
```

## 사용자 ID

### `getUserId()`

**Player 모델:**

```typescript theme={null}
OneSignal.getUserId()
```

**User 모델:** [문서](./web-sdk-reference#id)

```typescript theme={null}
OneSignal.User.PushSubscription.id;
```

### `setExternalUserId()`

**Player 모델:** [문서](./users)

```typescript theme={null}
OneSignal.setExternalUserId("external id")
```

**User 모델:** [문서](./web-sdk-reference#login-external-id)

```typescript theme={null}
OneSignal.login("external id")
```

### `removeExternalUserId()`

**Player 모델:**

```typescript theme={null}
OneSignal.removeExternalUserId()
```

**User 모델:** [문서](./web-sdk-reference#logout)

```typescript theme={null}
OneSignal.logout()
```

### `getExternalUserId()`

**Player 모델:**

```typescript theme={null}
await OneSignal.getExternalUserId()
```

**User 모델:** [문서](./web-sdk-reference#externalid)

```typescript theme={null}
OneSignal.User.externalId
```

## 태그

### `sendTag()`

**Player 모델:**

```typescript theme={null}
OneSignal.sendTag("key", "value")
```

**User 모델:**

```typescript theme={null}
OneSignal.User.addTag("key", "value")
```

**User 모델** [문서](./web-sdk-reference#addtag-%2C-addtags)

### `sendTags()`

**Player 모델:**

```typescript theme={null}
OneSignal.sendTags({ key1: 'value1', key2: 'value2' })
```

**User 모델:**

```typescript theme={null}
OneSignal.User.addTags({ key1: 'value1', key2: 'value2' })
```

### `getTags()`

**Player 모델:**

```typescript theme={null}
await OneSignal.getTags()
```

**User 모델:**

```typescript theme={null}
OneSignal.User.getTags()
```

### `deleteTag()`

**Player 모델:**

```typescript theme={null}
OneSignal.deleteTag("key")
```

**User 모델:**

```typescript theme={null}
OneSignal.User.removeTag("key")
```

### `deleteTags()`

**Player 모델:**

```typescript theme={null}
OneSignal.deleteTags(["key1", "key2"])
```

**User 모델:**

```typescript theme={null}
OneSignal.User.removeTags(["key1", "key2"])
```

## 푸시 알림

### `sendSelfNotification()` — User 모델에서 제거됨

```typescript theme={null}
OneSignal.sendSelfNotification('title', 'message', 'url')
```

### `setSubscription()`

**Player 모델:**

```typescript theme={null}
OneSignal.setSubscription(false)
```

**User 모델:**

```typescript theme={null}
OneSignal.Notifications.permission = false
```

## 알림 수신

### `#notificationDisplay`

**Player 모델:**

```typescript theme={null}
OneSignal.on('notificationDisplay', (event) => { ... })
```

**User 모델:**

```typescript theme={null}
OneSignal.Notifications.addEventListener('foregroundWillDisplay', ({ notification }) => { ... })
```

### `#notificationDismiss`

**Player 모델:**

```typescript theme={null}
OneSignal.on('notificationDismiss', (event) => { ... })
```

**User 모델:**

```typescript theme={null}
OneSignal.Notifications.addEventListener('dismiss', ({ notification }) => { ... })
```

### `#addListenerForNotificationOpened`

**Player 모델:**

```typescript theme={null}
OneSignal.on('addListenerForNotificationOpened', (event) => { ... })
```

## 이메일

### `setEmail()`

**User 모델** [문서](./web-sdk-reference#addemail-%2C-removeemail)

**Player 모델:**

```typescript theme={null}
OneSignal.setEmail('email@example.com')
```

**User 모델:**

```typescript theme={null}
OneSignal.User.addEmail('email@example.com')
```

### `logoutEmail()`

**Player 모델:**

```typescript theme={null}
OneSignal.logoutEmail()
```

**User 모델:**

```typescript theme={null}
OneSignal.User.removeEmail('email@example.com')
```

### `getEmailId()` — User 모델에서 제거됨

## SMS

### `setSMSNumber()`

**Player 모델:**

```typescript theme={null}
OneSignal.setSMSNumber('+11234567890')
```

**User 모델:**

```typescript theme={null}
OneSignal.User.addSms('+11234567890')
```

### `logoutSMSNumber()`

**Player 모델:**

```typescript theme={null}
OneSignal.logoutSMS()
```

**User 모델:**

```typescript theme={null}
OneSignal.User.removeSms('+11234567890')
```

***
