# 테스트 푸시 디바이스 추가

테스트 디바이스를 사용하여 앱 사용자에게 푸시 알림을 보내기 전에 디바이스에서 어떻게 보이는지 미리 볼 수 있습니다. 이를 위해서는 (앱이 설치된) 디바이스를 **테스트 디바이스**로 **등록**해야 합니다.

테스트 디바이스를 추가하려면:
1. Pushwoosh 계정의 **Test devices** 섹션으로 이동합니다.

<img src="/test-your-integration-test-devices-1.webp" alt="Pushwoosh 계정의 테스트 디바이스 섹션"/>

2. 오른쪽 상단의 **Add Device** 드롭다운 버튼을 클릭하고 **Push**를 선택합니다.

<img src="/test-your-integration-test-devices-2.webp" alt="테스트 디바이스 섹션의 푸시 옵션이 있는 디바이스 추가 드롭다운 버튼"/>

푸시 테스트 디바이스는 QR 코드를 이용한 자동 설정 또는 수동 설정 두 가지 방법 중 하나를 사용하여 추가할 수 있습니다.

## 자동으로 테스트 디바이스 추가하기

이 방법은 iOS 및 Android 디바이스에만 적합합니다.

1. **Test Devices** 섹션에서 **Add Device**를 클릭하고 **Push**를 선택합니다.
2. 팝업에 나타나는 QR 코드를 스캔합니다. 이렇게 하면 Pushwoosh SDK가 파싱하여 디바이스를 테스트 디바이스로 자동 등록할 수 있는 딥 링크가 생성됩니다.
3. 앱 설정에 딥 링크를 추가합니다:
* **Android**: `AndroidManifest.xml` 파일에 추가합니다.
* **iOS**: `Info.plist` 파일에 추가합니다.

자세한 내용은 [구현 섹션](/ko/developer/first-steps/test-your-integration/test-devices#implementation)의 Android 및 iOS 지침을 따르세요.

<Aside type="tip" title="QR 리더 팁">
스캔한 링크가 QR 리더의 웹뷰가 아닌 네이티브 브라우저에서 열리는지 확인하세요. 많은 QR 리더에는 이를 위한 "브라우저에서 열기" 버튼이 있습니다.
</Aside>


## 수동으로 테스트 디바이스 추가하기

테스트 디바이스를 수동으로 등록하려면 다음 단계를 따르세요:

1. 성공적인 [`/registerDevice`](/ko/developer/api-reference/device-api#registerdevice) API 호출에서 디바이스의 **하드웨어 ID (HWID)**를 얻습니다.
2. 필수 필드를 채웁니다:
   * **Device Name**: 테스트 디바이스에 대한 설명적인 이름 (예: "John의 Android").
   * **Device HWID**: 디바이스의 고유한 하드웨어 ID.
   * **Device Type**: 플랫폼을 선택합니다 (예: iOS, Android, Web).
   * **Description (Optional)**: 참조용으로 디바이스에 대한 메모나 세부 정보를 추가합니다.
3. **Save**를 클릭하여 테스트 디바이스를 등록합니다.

등록되면 테스트 디바이스는 **Test Devices** 섹션에서 사용할 수 있습니다.


## 구현

### Android

1. 애플리케이션에 [Pushwoosh SDK를 통합](/ko/developer/pushwoosh-sdk/android-sdk/firebase-integration/integrate-pushwoosh-android-sdk/)합니다.

2. _AndroidManifest.xml_에 **DeepLinkActivity**를 추가합니다:

```txt
<activity
          android:name="com.pushwoosh.DeepLinkActivity"
          android:theme="@android:style/Theme.Translucent.NoTitleBar" >
  <intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />

    <data android:scheme="pushwoosh-YOUR_PUSHWOOSH_APP_ID" />
  </intent-filter>
</activity>
```

위의 xml에서 _YOUR\_PUSHWOOSH\_APP\_ID_를 Pushwoosh 앱 ID로 바꾸는 것을 잊지 마세요.\
예시: _\<data android:scheme="pushwoosh-ABCDE-EDCBA" />_

3. 애플리케이션을 실행하여 푸시 알림을 구독합니다.

4. **Test Devices** 양식의 QR 코드를 적절한 QR 코드 스캐너 앱*을 사용하여 스캔합니다. 테스트 디바이스 등록 상태를 나타내는 토스트 메시지가 나타납니다.

\* 대부분의 QR 코드 스캔 앱은 이러한 딥 링크를 제대로 처리합니다. 다음은 그중 일부입니다:

* [QR & Barcode Scanner, Gamma Play](https://play.google.com/store/apps/details?id=com.gamma.scan)
* [QR & Barcode Scanner, Maker, AppSourceHub](https://play.google.com/store/apps/details?id=qrcode.scanner.qrmaker)

### iOS

1. 애플리케이션에 [Pushwoosh SDK를 통합](/ko/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk/)합니다.

2. _Info.plist_ 파일에 _pushwoosh-YOUR\_PUSHWOOSH\_APP\_ID_ URL 스킴을 추가합니다:

```xml
<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleTypeRole</key>
    <string>Editor</string>
    <key>CFBundleURLName</key>
    <string>com.pushwoosh.scheme</string>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>pushwoosh-YOUR_PUSHWOOSH_APP_ID</string>
    </array>
  </dict>
</array>
```

위의 XML에서 _YOUR\_PUSHWOOSH\_APP\_ID_를 Pushwoosh 앱 ID로 바꾸는 것을 잊지 마세요.\
예시: _pushwoosh-ABCDE-EDCBA_

<Aside type="caution">
 **프로젝트가 SwiftUI로만 빌드된 경우 SceneDelegate를 추가해야 합니다**

SwiftUI는 UIKit과 다르게 앱 생명주기를 관리합니다. 푸시 알림을 위한 테스트 디바이스 등록이나 딥 링크 처리와 같은 특정 시스템 이벤트가 올바르게 작동하도록 하려면 SceneDelegate를 명시적으로 추가하고 등록해야 합니다.

이것이 없으면 이러한 이벤트가 제대로 트리거되지 않을 수 있으며 푸시 등록이 실패할 수 있습니다.

SwiftUI를 사용하지 않는 경우 이 단계를 건너뛰고 바로 **3단계**로 이동할 수 있습니다.
</Aside>

**Info.plist**
<details>
  <summary>Info.plist 에 UIApplicationSceneManifest 를 추가하세요.</summary>

  ```xml
	<key>UIApplicationSceneManifest</key>
	<dict>
		<key>UIApplicationSupportsMultipleScenes</key>
		<true/>
		<key>UISceneConfigurations</key>
		<dict>
			<key>UIWindowSceneSessionRoleApplication</key>
			<array>
				<dict>
					<key>UISceneConfigurationName</key>
					<string></string>
					<key>UISceneDelegateClassName</key>
					<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
				</dict>
			</array>
		</dict>
	</dict>
  ```

</details>

**SceneDelegate**
<details>
  <summary>아래 예시와 같이 SceneDelegate 코드를 추가하세요.</summary>

  ```swift
import SwiftUI

@main
struct DemoApp: App {
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
    
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

class SceneDelegate: NSObject, UIWindowSceneDelegate {
    
    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let _ = (scene as? UIWindowScene) else { return }
    }
}

class AppDelegate: NSObject, UIApplicationDelegate, PWMessagingDelegate {
    
    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
        let sceneConfig: UISceneConfiguration = UISceneConfiguration(name: nil, sessionRole: connectingSceneSession.role)
        sceneConfig.delegateClass = SceneDelegate.self
        return sceneConfig
    }

}
  ```

</details>

3. 애플리케이션을 실행하여 푸시 알림을 구독합니다.

4. **Test Devices** 양식의 QR 코드를 적절한 QR 코드 스캐너를 사용하여 스캔합니다.