# เพิ่มอุปกรณ์ทดสอบ push

คุณสามารถใช้ Test Devices เพื่อดูตัวอย่างว่า push notifications จะแสดงผลอย่างไรบนอุปกรณ์ก่อนที่จะส่งไปยังผู้ใช้แอป ในการทำเช่นนั้น คุณต้อง**ลงทะเบียนอุปกรณ์ของคุณ** (ที่ติดตั้งแอปของคุณไว้) เป็น **Test Device**

ในการเพิ่มอุปกรณ์ทดสอบ:
1. ไปที่ส่วน **Test devices** ในบัญชี Pushwoosh ของคุณ

<img src="/test-your-integration-test-devices-1.webp" alt="ส่วน Test devices ในบัญชี Pushwoosh"/>

2. คลิกปุ่มดรอปดาวน์ **Add Device** ที่มุมบนขวาและเลือก **Push**

<img src="/test-your-integration-test-devices-2.webp" alt="ปุ่มดรอปดาวน์ Add Device พร้อมตัวเลือก Push ในส่วน Test Devices"/>

คุณสามารถเพิ่มอุปกรณ์ทดสอบ push ได้โดยใช้วิธีใดวิธีหนึ่งจากสองวิธี: การกำหนดค่าอัตโนมัติด้วย QR code หรือการกำหนดค่าด้วยตนเอง

## การเพิ่มอุปกรณ์ทดสอบโดยอัตโนมัติ

วิธีนี้เหมาะสำหรับอุปกรณ์ iOS และ Android เท่านั้น

1. ในส่วน **Test Devices** คลิก **Add Device** และเลือก **Push**
2. สแกน QR code ที่ปรากฏในป๊อปอัป ซึ่งจะสร้าง deep link ที่ Pushwoosh SDK สามารถแยกวิเคราะห์เพื่อลงทะเบียนอุปกรณ์ของคุณเป็นอุปกรณ์ทดสอบโดยอัตโนมัติ
3. เพิ่ม deep link ไปยังการกำหนดค่าแอป:
* **สำหรับ Android**: เพิ่มไปยังไฟล์ `AndroidManifest.xml`
* **สำหรับ iOS**: เพิ่มไปยังไฟล์ `Info.plist`

สำหรับรายละเอียดเพิ่มเติม โปรดปฏิบัติตามคำแนะนำสำหรับ Android และ iOS ใน [ส่วนการนำไปใช้](/th/developer/first-steps/test-your-integration/test-devices#implementation)

<Aside type="tip" title="เคล็ดลับสำหรับเครื่องอ่าน QR">
ตรวจสอบให้แน่ใจว่าลิงก์ที่สแกนเปิดในเบราว์เซอร์ของเครื่อง ไม่ใช่ใน webview ของเครื่องอ่าน QR เครื่องอ่าน QR หลายตัวมีปุ่ม "Open in Browser" สำหรับจุดประสงค์นี้
</Aside>


## การเพิ่มอุปกรณ์ทดสอบด้วยตนเอง

หากคุณต้องการลงทะเบียนอุปกรณ์ทดสอบด้วยตนเอง ให้ทำตามขั้นตอนเหล่านี้:

1. รับ **Hardware ID (HWID)** ของอุปกรณ์จากการเรียก API [`/registerDevice`](/th/developer/api-reference/device-api#registerdevice) ที่สำเร็จ
2. กรอกข้อมูลในช่องที่จำเป็น:
   * **Device Name**: ชื่อที่สื่อความหมายสำหรับอุปกรณ์ทดสอบ (เช่น "John's Android")
   * **Device HWID**: Hardware ID ที่ไม่ซ้ำกันของอุปกรณ์
   * **Device Type**: เลือกแพลตฟอร์ม (เช่น iOS, Android, Web)
   * **Description (Optional)**: เพิ่มบันทึกหรือรายละเอียดเกี่ยวกับอุปกรณ์เพื่อการอ้างอิง
3. คลิก **Save** เพื่อลงทะเบียนอุปกรณ์ทดสอบ

เมื่อลงทะเบียนแล้ว อุปกรณ์ทดสอบจะพร้อมใช้งานในส่วน **Test Devices**


## การนำไปใช้

### Android

1. [ผสานรวม Pushwoosh SDK](/th/developer/pushwoosh-sdk/android-sdk/firebase-integration/integrate-pushwoosh-android-sdk/) กับแอปพลิเคชันของคุณ

2. เพิ่ม **DeepLinkActivity** ไปยัง _AndroidManifest.xml_ ของคุณ:

```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>
```

อย่าลืมแทนที่ _YOUR\_PUSHWOOSH\_APP\_ID_ ใน xml ข้างต้นด้วย Pushwoosh App ID ของคุณ\
ตัวอย่าง: _\<data android:scheme="pushwoosh-ABCDE-EDCBA" />_

3. เปิดแอปพลิเคชันเพื่อสมัครรับ push notifications

4. สแกน QR Code ในฟอร์ม **Test Devices** โดยใช้แอปสแกน QR Code ที่เหมาะสม* ข้อความ toast จะปรากฏขึ้นเพื่อระบุสถานะการลงทะเบียนอุปกรณ์ทดสอบ

\* แอปสแกน QR code ส่วนใหญ่จัดการกับ deep links ดังกล่าวได้อย่างถูกต้อง นี่เป็นเพียงบางส่วน:

* [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](/th/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk/) กับแอปพลิเคชันของคุณ

2. เพิ่ม _pushwoosh-YOUR\_PUSHWOOSH\_APP\_ID_ URL scheme ไปยังไฟล์ _Info.plist_:

```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>
```

อย่าลืมแทนที่ _YOUR\_PUSHWOOSH\_APP\_ID_ ใน XML ข้างต้นด้วย Pushwoosh App ID ของคุณ\
ตัวอย่าง: _pushwoosh-ABCDE-EDCBA_

<Aside type="caution">
 **หากโปรเจกต์ของคุณสร้างด้วย SwiftUI (เท่านั้น) คุณต้องเพิ่ม SceneDelegate**

SwiftUI จัดการวงจรชีวิตของแอปแตกต่างจาก UIKit เพื่อให้แน่ใจว่าเหตุการณ์ของระบบบางอย่างทำงานอย่างถูกต้อง — เช่น การลงทะเบียนอุปกรณ์ทดสอบสำหรับ push notifications หรือการจัดการ deep links — คุณต้องเพิ่มและลงทะเบียน SceneDelegate อย่างชัดเจน

หากไม่มีสิ่งนี้ เหตุการณ์เหล่านี้อาจไม่ถูกทริกเกอร์อย่างถูกต้อง และการลงทะเบียน push อาจล้มเหลว

หากคุณไม่ได้ใช้ SwiftUI คุณสามารถข้ามขั้นตอนนี้และไปที่ **ขั้นตอนที่ 3** ได้โดยตรง
</Aside>

**Info.plist**
<details>
  <summary>เพิ่ม `UIApplicationSceneManifest` ไปยัง `Info.plist` ของคุณ</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. เปิดแอปพลิเคชันเพื่อสมัครรับ push notifications

4. สแกน QR Code ในฟอร์ม **Test Devices** โดยใช้เครื่องสแกน QR Code ที่เหมาะสม