# 添加推送测试设备

您可以使用测试设备，在向应用用户发送推送通知前，预览其在设备上的显示效果。为此，您需要将您的设备（已安装您的应用）注册为**测试设备**。

要添加测试设备：
1. 在您的 Pushwoosh 账户中，导航至**测试设备**部分。

<img src="/test-your-integration-test-devices-1.webp" alt="Pushwoosh 账户中的测试设备部分"/>

2. 点击右上角的**添加设备**下拉按钮，然后选择**推送**。

<img src="/test-your-integration-test-devices-2.webp" alt="测试设备部分中带有推送选项的添加设备下拉按钮"/>

您可以使用以下两种方法之一添加推送测试设备：使用二维码自动配置或手动配置。

## 自动添加测试设备

此方法仅适用于 iOS 和 Android 设备。

1. 在**测试设备**部分，点击**添加设备**并选择**推送**。
2. 扫描弹出窗口中出现的二维码。这将生成一个深层链接，Pushwoosh SDK 可以解析该链接以自动将您的设备注册为测试设备。
3. 将深层链接添加到应用配置中：
* **对于 Android**：将其添加到 `AndroidManifest.xml` 文件中。
* **对于 iOS**：将其添加到 `Info.plist` 文件中。

更多详情，请遵循[实现部分](/zh/developer/first-steps/test-your-integration/test-devices#implementation)中针对 Android 和 iOS 的说明。

<Aside type="tip" title="二维码阅读器提示">
请确保扫描的链接在原生浏览器中打开，而不是在二维码阅读器的 webview 中打开。许多二维码阅读器都有一个“在浏览器中打开”按钮来实现此目的。
</Aside>


## 手动添加测试设备

如果您希望手动注册测试设备，请按以下步骤操作：

1. 从成功的 [`/registerDevice`](/zh/developer/api-reference/device-api#registerdevice) API 调用中获取设备的**硬件 ID (HWID)**。
2. 填写必填字段：
   * **设备名称**：测试设备的描述性名称（例如，“John 的 Android”）。
   * **设备 HWID**：设备的唯一硬件 ID。
   * **设备类型**：选择平台（例如，iOS、Android、Web）。
   * **描述（可选）**：添加有关设备的任何注释或详细信息以供参考。
3. 点击**保存**以注册测试设备。

注册后，测试设备将显示在**测试设备**部分。


## 实现

### Android

1. 将 [Pushwoosh SDK 集成](/zh/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>
```

不要忘记将上面 xml 中的 _YOUR\_PUSHWOOSH\_APP\_ID_ 替换为您的 Pushwoosh App ID。
示例：_\<data android:scheme="pushwoosh-ABCDE-EDCBA" />_

3. 启动应用程序以订阅推送通知。

4. 使用任何合适的二维码扫描器应用*扫描**测试设备**表单中的二维码。将会出现一条 toast 消息，指示测试设备注册的状态。

* 大多数二维码扫描应用都能正确处理此类深层链接，以下仅列举其中几个：

* [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 集成](/zh/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>
```

不要忘记将上面 XML 中的 _YOUR\_PUSHWOOSH\_APP\_ID_ 替换为您的 Pushwoosh App ID。
示例：_pushwoosh-ABCDE-EDCBA_

<Aside type="caution">
 **如果您的项目（仅）使用 SwiftUI 构建，则需要添加一个 SceneDelegate**

SwiftUI 管理应用生命周期的方式与 UIKit 不同。为确保某些系统事件（如注册推送通知测试设备或处理深层链接）正常工作，您需要显式添加并注册一个 SceneDelegate。

如果没有它，这些事件可能无法正确触发，推送注册可能会失败。

如果您不使用 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. 启动应用程序以订阅推送通知。

4. 使用任何合适的二维码扫描器扫描**测试设备**表单中的二维码。