# 了解 Pushwoosh 中的设备标识符

有两种方法可以识别在 Pushwoosh 注册的特定设备——硬件 ID (HWID) 和推送令牌 (push token)。

## HWID

HWID (或硬件 ID) 是 Pushwoosh SDK 分配给设备的关键标识符。

#### Android HWID

对于 Android 设备，HWID 是由设备上安装的第一个带有 Pushwoosh SDK 的应用生成的随机字母和数字集。它随后会与包含 Pushwoosh SDK 的其他应用共享，因此所有这些应用最终都将具有相同的 HWID。

但是，如果用户删除了所有带有 Pushwoosh SDK 的应用，然后重新安装部分应用，则会再次生成一个新的 HWID。

Android HWID 示例：`5dcaed99-e1e0-44dc-bde2-b96188b99e9e`

#### iOS HWID

对于 iOS 设备，IDFV ([Identifier for Vendor](https://developer.apple.com/documentation/uikit/uidevice/1620059-identifierforvendor)) 被用作设备的 HWID。只要设备上安装了至少一个来自同一供应商的应用，它就不会改变。

iOS HWID 示例 (仅大写！)：`CBAF8ED1-17FB-49A3-73BD-DC79B63AEF93`

## 推送令牌

推送令牌 (设备令牌) 是由 Apple 或 Google 推送通知网关为应用-设备组合颁发的唯一密钥。它允许网关和推送通知提供商路由消息，并确保通知被传送到其预期的唯一应用-设备组合。

#### iOS 推送令牌

iOS 设备推送令牌是包含 64 个十六进制符号的字符串。iOS 推送令牌示例：`03df25c845d460bcdad7802d2vf6fc1dfde97283bf75cc993eb6dca835ea2e2f`

<Aside type="caution">
在 API 请求中定位特定设备时，请确保您使用的 iOS 推送令牌为**小写**。
</Aside>

#### Android 推送令牌

Android 设备推送令牌的长度可能不同 (通常少于 255 个字符)，并且通常以 APA91b… 开头；但是，它也可能有一个以冒号分隔的前缀。Android 推送令牌示例：`APA91bFoi3lMMre9G3XzR1LrF4ZT82_15MsMdEICogXSLB8-MrdkRuRQFwNI5u8Dh0cI90ABD3BOKnxkEla8cGdisbDHl5cVIkZah5QUhSAxzx4Roa7b4xy9tvx9iNSYw-eXBYYd8k1XKf8Q_Qq1X9-x-U-Y79vdPq`

<Aside type="caution">
使用原始设备令牌来定位特定设备不是最可靠的方法，因为 FCM 推送令牌会不时更改，而且很难判断其发生的频率。
</Aside>

## 从设备收集日志、HWID 和推送令牌

### iOS

首先，如果您有权访问应用的源代码，请确保应用中的 `Pushwoosh_LOG_LEVEL` 设置为 `VERBOSE`。为此，请检查 `Info.plist` 文件中的 `Pushwoosh_LOG_LEVEL` 字符串键。如果不是，请跳到下一步。以下是此键的可能值：

* `NONE` - SDK 不记录日志
* `ERROR` - 仅在控制台中显示错误
* `WARNING` - 同时显示警告
* `INFO` - 添加信息性消息
* `DEBUG` - 添加调试信息
* `VERBOSE` - SDK 的所有日志

`VERBOSE` 键值允许 Pushwoosh SDK 显示有关注册操作的重要信息。

2. 接下来，将设备连接到您的 Mac 并启动 Xcode。转到 Window->Device and Simulators。

<img src="/pushwoosh-knowledge-hub-device-identifiers-1.webp" alt="Xcode 的“设备和模拟器”窗口，显示已连接的 iOS 设备"/>

3. 在打开的窗口中，选择您连接的设备，然后单击左下角的上三角符号以查看设备控制台：

<img src="/pushwoosh-knowledge-hub-device-identifiers-2.webp" alt="Xcode 设备控制台视图，显示设备日志，并高亮显示上三角按钮"/>

从 Xcode 9.3 版本开始，获取设备控制台日志的过程略有改变。您只需转到 Launchpad 并启动“控制台”应用程序。在左侧边栏中选择您的设备。就这样！

<img src="/pushwoosh-knowledge-hub-device-identifiers-3.webp" alt="macOS 控制台应用程序，显示在左侧边栏中选定的已连接 iOS 设备，并显示设备日志"/>

4. 接下来，在设备上启动您的应用并等待对话框窗口。允许您的应用发送推送通知。

5. 完成这些步骤后，从控制台窗口中选择整个设备日志，并将其复制到任何文本编辑器中。

您要查找的是 [`/registerDevice`](/zh/developer/api-reference/device-api/) Pushwoosh API 请求：

<img src="/pushwoosh-knowledge-hub-device-identifiers-4.webp" alt="设备控制台日志，显示 registerDevice API 请求，其中 hwid 和 push token 参数可见"/>

如果设备注册正确，此请求必须包含以下参数，包括“hwid”和“push token”的值：

```txt title="示例"
x
| Pushwoosh request:
| Url: https://D868A-C13C1.api.pushwoosh.com/json/1.3/registerDevice
| Payload: {"request":{"gateway":"production","jailbroken":0,"app_version":"1.9","application":"D868A-C13C1","sounds":["bubble.wav"],"device_type":1,"userId":"1457691684303547","language":"en","hwid":"FBCA07FE-05EE-4770-B4BA-AB6737BC1A98","package":"com.pushwoosh.pushon","timezone":"25200","push_token":"ae784019d1b8c8e38a1ea06f0800c17a4fa986d6e2d346fc79373e92439ff8f7","os_version":"11.2.2","v":"5.5.1","device_model":"iPhone7,1"}}
| Status: "200 no error"
| Response: {"status_code":200,"status_message":"OK","response":{"iosCategories":[{"categoryId":0,"buttons":[{"id":"33389","label":"test","type":"0","startApplication":0},{"id":"1233","label":"ajhdkj","type":"1","startApplication":0}]}]}}
x
```

设备推送令牌的通知也应该出现：

```
<Notice>: [PW] [I] -[PWPushNotificationsManagerCommon] Registered for push notifications: ae784019d1b8c8e38a1ea06f0800c17a4fa986d6e2d346fc79373e92439ff8f7
```

### Android

1. 如果您有权访问应用的源代码，请确保 Pushwoosh 日志级别设置为 `NOISE`。为此，请将值为 `NOISE` 的 `com.pushwoosh.log_level` 元数据添加到 `AndroidManifest.xml` 中。

2. 接下来，在您的 Mac/PC 上运行 Android Studio，然后转到 Tools -> Android -> Android Device Monitor。

<img src="/pushwoosh-knowledge-hub-device-identifiers-5.webp" alt="Android Studio 的 Android 设备监视器窗口，显示已连接的 Android 设备"/>

3. 将您的设备连接到 Mac/PC 并启动应用。等待约 30 秒，从控制台窗口中选择整个设备日志，并将其复制到任何文本编辑器中。

<img src="/pushwoosh-knowledge-hub-device-identifiers-6.webp" alt="Android 设备监视器控制台日志窗口，显示设备日志，其中 registerDevice 请求可见"/>

请注意，在最新版本的 Android Studio 中，您也可以使用 Logcat 工具获取设备控制台日志。运行 Android Studio 并转到 View -> Tool Windows -> Logcat：

<img src="/pushwoosh-knowledge-hub-device-identifiers-7.webp" alt="Android Studio 界面，显示从“视图”菜单访问的 Logcat 工具窗口"/>

之后，您可以在 Logcat 窗口中找到设备日志：

<img src="/pushwoosh-knowledge-hub-device-identifiers-8.webp" alt="Android Studio Logcat 窗口，显示设备日志，其中 registerDevice API 请求可见"/>

以下示例展示了 Pushwoosh /registerDevice API 请求在设备控制台日志中的样子：

<img src="/pushwoosh-knowledge-hub-device-identifiers-9.webp" alt="Android 设备控制台日志，显示 registerDevice API 请求，并高亮显示 hwid 和 push token 参数"/>

在请求中找到“hwid”和“push token”参数的值：

```txt title="示例"
[RequestManager]
x
| Pushwoosh request:
| Url: https://D868A-C13C1.api.pushwoosh.com/json/1.3/registerDevice
| Payload: {"request":{"application":"D868A-C13C1","hwid":"fc79efabee7649ec","v":"5.5.2","device_type":3,"userId":"fc79efabee7649ec","device_name":"Phone","language":"en","timezone":25200,"android_package":"com.pushwoosh.pushon","jailbroken":0,"device_model":"Sony F8332","os_version":"8.0.0","idfa":"d43ad490-4e6a-48a8-b8b9-f20b76fbf07b","app_version":"1.5","push_token":"dwMAeCRabUE:APA91bGSk8SqCSycxfltrWCV9KtXGo48-8qvNKfzHn758PW7lLXSi_Wd7y3gqw-lbexsjLwsaXStpELTJUAQVZ3ybNqAUmfw-we-62rTjpNbvBa4oPYTwaPCr3s4M05xNv8jGau-MeA_","sounds":"[]"}}
| Response: {"status_code":200,"status_message":"OK","response":null}
x
[RequestManager] registerDevice response success
```

推送令牌包含在设备注册通知中：

```
I/Pushwoosh(12733): [DeviceRegistrar] Registered for pushes: dwMAeCRabUE:APA91bGSk8SqCSycxfltrWCV9KtXGo48-8qvNKfzHn758PW7lLXSi_Wd7y3gqw-lbexsjLwsaXStpELTJUAQVZ3ybNqAUmfw-we-62rTjpNbvBa4oPYTwaPCr3s4M05xNv8jGau-MeA_
03-30 14:45:10.539: D/PushOn(12733): Registered for push notifications
```

### Chrome (桌面版)

1. 转到您的网站。

2. 在页面任意位置右键单击，然后按“Inspect”。

<img src="/pushwoosh-knowledge-hub-device-identifiers-10.webp" alt="Chrome 浏览器开发者工具已打开，其中“检查元素”上下文菜单选项可见"/>

3. 在打开的窗口中，转到“Application”选项卡。

4. 然后，在左侧边栏中，选择 IndexedDB -> Pushwoosh\_SDK\_Store -> keyValue。在这里，找到 HWID 和推送令牌参数。

<img src="/pushwoosh-knowledge-hub-device-identifiers-11.webp" alt="Chrome 开发者工具的“Application”选项卡，显示 IndexedDB，其中包含 Pushwoosh SDK Store 和含有 HWID 及推送令牌的 keyValue"/>

### Chrome (移动版)

1. 将您的移动设备连接到计算机。

2. 在您的桌面版 Chrome 中转到 chrome://inspect/#devices。

3. 在您的移动版 Chrome 上打开您的网站。

4. 在移动版 Chrome 上打开网站后，您将在桌面版 Chrome 页面中看到相应的页面。请看下面的截图：

<img src="/pushwoosh-knowledge-hub-device-identifiers-12.webp" alt="Chrome 远程调试页面，显示已连接的移动设备，并高亮显示“Inspect”按钮"/>

5. 按下上面截图中高亮显示的“Inspect”按钮。

6. 以下窗口将出现在您的桌面版 Chrome 中。在该窗口的“Application”选项卡中，打开 IndexedDB -> PUSHWOOSH\_SDK\_STORE。之后，单击 keyValue 并打开 API\_PARAMS 部分：

<img src="/pushwoosh-knowledge-hub-device-identifiers-13.webp" alt="Chrome 开发者工具的“Application”选项卡，显示 IndexedDB PUSHWOOSH SDK STORE，其中 API_PARAMS 部分包含 hwid 和推送令牌"/>

在 API\_PARAMS 部分，您将找到“hwid”和“push token”参数及其值。

### Safari

1. 转到您的网站。
2. 在页面任意位置右键单击并选择 Inspect Element。
3. 转到 Storage 选项卡 -> Indexed Databases -> PUSHWOOSH\_SDK\_STORE -> keyValue。
4. 展开 API\_PARAMS，在这里找到“hwid”和“push token”的值。

<img src="/pushwoosh-knowledge-hub-device-identifiers-14.webp" alt="Safari 开发者工具的“Storage”选项卡，显示 Indexed Databases，其中 PUSHWOOSH SDK STORE keyValue 包含带有 hwid 和推送令牌的 API_PARAMS"/>