# iOS SDK 고급 통합 가이드

import { Badge } from '@astrojs/starlight/components';

이 섹션에서는 Pushwoosh iOS SDK의 고급 통합에 대한 정보를 제공합니다.

## 백그라운드 모드

<Aside type="caution" title="">
기본적으로 iOS는 앱이 백그라운드에 있을 때 푸시 알림을 처리하는 것을 허용하지 않습니다. 여기에는 사용자 상호 작용 없이 앱 데이터를 업데이트하는 데 유용한 자동 푸시 알림이 포함됩니다.
</Aside>

이 기능을 활성화하려면 프로젝트에 백그라운드 모드를 추가해야 합니다.

#### 백그라운드 모드를 활성화하는 단계

1. **Xcode**에서 프로젝트를 열고 **Project Navigator**에서 선택합니다.
2. 왼쪽 패널에서 앱 타겟을 선택합니다.
3. **Signing & Capabilities** 탭으로 이동합니다.
4. 왼쪽 상단 모서리에 있는 **+ Capability** 버튼을 클릭합니다.
5. 목록에서 **Background Modes**를 검색하고 선택합니다.
6. **Background Modes** 섹션에서 확인란을 선택하여 **Remote notifications**를 활성화합니다.

완료되면 앱은 백그라운드에서 실행되는 동안 자동 푸시 알림을 포함한 푸시 알림을 처리할 수 있게 됩니다.

## 포그라운드 모드

기본적으로 Pushwoosh iOS SDK는 앱이 포그라운드에서 실행 중일 때 알림 배너를 표시합니다.

코드에서 다음 불리언 플래그를 설정하여 이 동작을 제어할 수 있습니다 (예: `AppDelegate`에서):

<Tabs syncKey="code-example">
    <TabItem label="Swift">
    ```swift
    // 포그라운드 알림을 비활성화하려면 false, 활성화하려면 true로 설정
    Pushwoosh.sharedInstance().showPushnotificationAlert = true
    ```

    <LinkCard
        title="예제 (Swift)"
        href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/customizing/customizing/ViewController.swift#L30"
    />

  </TabItem>

  <TabItem label="Objective-C">

  ```objective-c
  // 포그라운드 알림을 비활성화하려면 0, 활성화하려면 1로 설정
  [[Pushwoosh sharedInstance] setShowPushnotificationAlert:0];
  ```

    <LinkCard
        title="예제 (Objective-C)"
        href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/customizing/customizingObjC/customizingObjC/ViewController.m#L35"
    />

  </TabItem>
</Tabs>

## 로그 레벨

Pushwoosh iOS SDK는 다음 로깅 레벨을 지원합니다:

- `NONE` - SDK에서 로그 없음.
- `ERROR` - 콘솔에 오류 메시지만 표시합니다.
- `WARNING` - 오류 외에 경고도 표시합니다.
- `INFO` - 정보 메시지를 포함합니다 (기본 설정).
- `DEBUG` - 상세한 디버그 정보를 포함합니다.

기본적으로 로깅 레벨은 INFO로 설정되어 있어 SDK가 개발자 콘솔을 복잡하게 만들지 않으면서 관련 정보를 제공하도록 보장합니다.

로깅 레벨을 수정하려면 앱의 `Info.plist` 파일에서 `Pushwoosh_LOG_LEVEL` 키를 업데이트하십시오:

```xml
<key>Pushwoosh_LOG_LEVEL</key>
<string>YOUR_LOG_LEVEL</string>
```

또는 아래 코드 스니펫을 사용하여 로그 레벨을 변경할 수 있습니다:

```swift
Pushwoosh.Debug.setLogLevel(.PW_LL_DEBUG)
```

`YOUR_LOG_LEVEL`을 원하는 레벨(예: `DEBUG` 또는 `ERROR`)로 바꾸십시오.

## 사용자 지정 `UNNotificationCenterDelegate`

자신만의 `UNNotificationCenterDelegate`를 사용하려는 경우(예: 로컬 알림의 경우), 올바른 동작을 위해 Pushwoosh SDK에 알려야 합니다. Pushwoosh 인스턴스의 `notificationCenterDelegateProxy` 속성을 사용하여 이 작업을 수행할 수 있습니다:

<Tabs syncKey="code-example">
    <TabItem label="Swift">
    ```swift
    Pushwoosh.sharedInstance().notificationCenterDelegateProxy?.add(my_delegate)
    ```

    <LinkCard
        title="예제 (Swift)"
        href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/customizing/customizing/Custom%20UNNotificationCenterDelegate/CustomNotificationCDViewConrtoller.swift#L23"
    />

    </TabItem>

    <TabItem label="Objective-C">
    ```objective-c
    [Pushwoosh.sharedInstance.notificationCenterDelegateProxy addNotificationCenterDelegate:my_delegate];
    ```

    <LinkCard
        title="예제 (Objective-C)"
        href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/customizing/customizingObjC/customizingObjC/Custom%20UNNotificationCenterDelegate/PWCustomNotificationCDViewConrtoller.m#L28"
    />

    </TabItem>
</Tabs>

그런 다음, 델리게이트에서 `UNNotificationCenterDelegate` 메서드를 구현합니다:

<Tabs syncKey="code-example">
  <TabItem label="Swift">

  ```swift
  func userNotificationCenter(
      _ center: UNUserNotificationCenter,
      willPresent notification: UNNotification,
      withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void
  ) {
      if (!PWMessage.isPushwooshMessage(notification.request.content.userInfo)) {
          // 알림 처리
          completionHandler(UNNotificationPresentationOptions.alert)
      }
  }

  func userNotificationCenter(
      _ center: UNUserNotificationCenter,
      didReceive response: UNNotificationResponse,
      withCompletionHandler completionHandler: @escaping () -> Void
  ) {
      if (!PWMessage.isPushwooshMessage(response.notification.request.content.userInfo)) {
          // 알림 처리
          completionHandler()
      }
  }
  ```

  <LinkCard title="예제 (Swift)" href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/customizing/customizing/Custom%20UNNotificationCenterDelegate/CustomNotificationCDViewConrtoller.swift" />

  </TabItem>

  <TabItem label="Objective-C">

  ```objective-c
  - (void)userNotificationCenter:(UNNotificationCenter *)center
          willPresentNotification:(UNNotification *)notification
          withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {
      if (![PWMessage isPushwooshMessage:notification.request.content.userInfo]) {
          // 메시지 처리
          completionHandler(UNNotificationPresentationOptionAlert);
      }
  }

  - (void)userNotificationCenter:(UNNotificationCenter *)center
          didReceiveNotificationResponse:(UNNotificationResponse *)response
          withCompletionHandler:(void (^)(void))completionHandler {
      if (![PWMessage.isPushwooshMessage:response.notification.request.content.userInfo]) {
          // 메시지 처리
          completionHandler();
      }
  }
  ```

  <LinkCard title="예제 (Objective-C)" href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/customizing/customizingObjC/customizingObjC/Custom%20UNNotificationCenterDelegate/PWCustomNotificationCDViewConrtoller.m" />

  </TabItem>
</Tabs>

## Pushwoosh 지연 초기화

`Pushwoosh_LAZY_INITIALIZATION` 플래그는 애플리케이션이 시작될 때 Pushwoosh SDK의 자동 초기화를 방지합니다. 이를 통해 Pushwoosh SDK 서비스가 시작되는 시점을 더 잘 제어할 수 있습니다.

이 플래그가 활성화되면 Pushwoosh iOS SDK 메서드가 명시적으로 호출될 때까지 Pushwoosh SDK는 서비스를 시작하지 않습니다.

Info.plist에 다음 항목을 추가하십시오:

```xml
<key>Pushwoosh_LAZY_INITIALIZATION</key>
<true/>
```

**사용 사례**
1. **제어된 SDK 초기화** – Pushwoosh_LAZY_INITIALIZATION 플래그를 사용하면 Pushwoosh SDK 시작을 지연시켜 푸시 서비스가 활성화되는 시점을 더 잘 제어할 수 있습니다.

2. **지연된 푸시 활성화** – 일부 애플리케이션에서는 특정 조건에서만 푸시 알림을 초기화해야 합니다. 이 플래그를 활성화하면 명시적으로 요청될 때만 Pushwoosh SDK가 시작되도록 보장합니다.

3. **사용자별 푸시 구성** – 일부 애플리케이션에서는 사용자 기본 설정이나 계정 설정에 따라 푸시 알림 설정을 사용자 지정해야 할 수 있습니다. 지연 초기화를 사용하면 적절한 구성이 결정된 후에만 Pushwoosh SDK가 시작됩니다.
## Info.plist 속성 전체 목록

| 속성                                      | 설명                                                                  | 가능한 값                                                                                  |
|-----------------------------------------------|------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|
| `Pushwoosh_APPID`                             | 프로덕션 빌드용 Pushwoosh 애플리케이션 ID를 설정합니다.                     | `XXXXX-XXXXX` <br /> **유형**: 문자열                                                             |
| `Pushwoosh_APPID_Dev`                         | 개발 빌드용 Pushwoosh 애플리케이션 ID를 설정합니다.                    | `XXXXX-XXXXX` <br /> **유형**: 문자열                                                             |
| `Pushwoosh_SHOW_ALERT`                        | 알림 포그라운드 경고를 표시합니다.                                        | `YES` *(기본값)* / `NO` <br /> **유형**: 불리언                                                 |
| `Pushwoosh_ALERT_TYPE`                        | 알림 경고 스타일을 설정합니다.                                          | `BANNER` *(기본값)* / `ALERT` / `NONE` <br /> **유형**: 문자열                                   |
| `Pushwoosh_BASEURL`                           | Pushwoosh 서버 기본 URL을 재정의합니다.                                    | [`https://cp.pushwoosh.com/json/1.3/`](https://cp.pushwoosh.com/json/1.3/) *(기본값)* <br /> **유형**: 문자열 |
| `Pushwoosh_AUTO_ACCEPT_DEEP_LINK_FOR_SILENT_PUSH` | `YES`인 경우, 자동 푸시에서 수신된 딥 링크가 자동으로 처리됩니다. | `YES` *(기본값)* / `NO` <br /> **유형**: 불리언                                                 |
| `Pushwoosh_ALLOW_SERVER_COMMUNICATION`        | SDK가 Pushwoosh 서버로 네트워크 요청을 보낼 수 있도록 허용합니다.               | `YES` *(기본값)* / `NO` <br /> **유형**: 불리언                                                 |
| `Pushwoosh_ALLOW_COLLECTING_DEVICE_DATA`      | SDK가 장치 데이터(OS 버전, 로케일 및 모델)를 수집하여 서버로 보낼 수 있도록 허용합니다. | `YES` *(기본값)* / `NO` <br /> **유형**: 불리언                                                 |
| `Pushwoosh_ALLOW_COLLECTING_DEVICE_OS_VERSION` | SDK가 장치의 OS 버전을 수집하여 서버로 보낼 수 있도록 허용합니다.   | `YES` *(기본값)* / `NO` <br /> **유형**: 불리언                                                 |
| `Pushwoosh_ALLOW_COLLECTING_DEVICE_LOCALE`    | SDK가 장치 로케일을 수집하여 서버로 보낼 수 있도록 허용합니다.         | `YES` *(기본값)* / `NO` <br /> **유형**: 불리언                                                 |
| `Pushwoosh_ALLOW_COLLECTING_DEVICE_MODEL`     | SDK가 장치 모델을 수집하여 서버로 보낼 수 있도록 허용합니다.          | `YES` *(기본값)* / `NO` <br /> **유형**: 불리언                                                 |
| `Pushwoosh_LOG_LEVEL`                         | Pushwoosh SDK 로깅 레벨. 자세한 내용은 [로그 레벨 제어](#log-level)를 참조하십시오. | `NONE` / `ERROR` / `WARNING` / `INFO` *(기본값)* / `DEBUG` / `VERBOSE` <br /> **유형**: 문자열    |
| `Pushwoosh_PURCHASE_TRACKING_ENABLED`         | SDK가 인앱 구매를 추적할 수 있도록 허용합니다. Customer Journey Builder에 필요합니다. | `YES` / `NO` *(기본값)* <br /> **유형**: 불리언                                                 |