# 设备 API

## registerDevice

`POST` `https://api.pushwoosh.com/json/1.3/registerDevice`

由 SDK 内部调用。为应用程序注册设备。

##### 请求头

| 名称 | 必填 | 值 | 描述 |
|---------------|----------|---------------|------------------------------------------------------------|
| Authorization | 是 | Token `XXXX` | 用于访问设备 API 的 [API 设备令牌](/zh/developer/api-reference/api-access-token/#device-api-token)。请将 `XXXX` 替换为您的实际设备 API 令牌。 |


##### 请求体

| 名称 | 类型 | 描述 |
| ---------------------------------------------- | ------- | --------------------------------------------------------------------------------------------------- |
| application\* | string | [Pushwoosh 应用程序代码](/zh/developer/api-reference/api-identifiers/#application-code) |
| push\_token | string | 设备的 [推送令牌](/zh/developer/api-reference/api-identifiers/#push-token)。 |
| language | string | 设备的语言区域设置。必须是符合 ISO-639-1 标准的小写双字母代码。 |
| hwid\* | string | 用于识别设备的唯一字符串（iOS 上为 IDFV，Android 上为随机生成的值）。[了解更多](/zh/developer/api-reference/api-identifiers/#hardware-id) |
| timezone | integer | 设备的秒级时区偏移量。 |
| device\_type\* | integer | [设备类型](/zh/developer/api-reference/api-identifiers/#device-type)。请参阅下面的可能值。 |
| email | string | 要注册的电子邮件地址（用于电子邮件用户，替代 HWID 和推送令牌）。 |
| tags | object | 分配给已注册设备的标签值。 |

<Tabs>
<TabItem label="200">
```json
{
  "status_code": 200,
  "status_message": "OK",
  "response": null
}
```
</TabItem>
</Tabs>

```json title="示例"
{
  "request": {
    "application": "XXXXX-XXXXX",        // 必填。Pushwoosh 应用程序代码
    "push_token": "dec301908b9ba8XXXXX57a58e40f96f5XXXXX2068674f5XXXXa25cdc250a2a41", // 可选。
    "hwid": "1CA6XXXXX-8DAC-XXXXX-XXXXX-B756288B6D3C",                                   // 必填。硬件设备 ID
    "idfa": "AEBE52E7-0XXXXX-455A-XXXXX-E57283966239",                                   // 可选。
    "timezone": 3600,                    // 可选。秒级偏移量
    "device_type": 1,                    // 必填。请参阅下面的可能值。对于电子邮件，
                                         //           请使用下面描述的 "emails" 参数。
    "email": "email_address@domain.com", // 用于为您的电子邮件项目注册电子邮件地址，
                                         //           替代 "hwid" 和 "push_token"
    "language": "en",                    // 可选。ISO 639-1|639-2 语言代码
    "userId": "Alex",                    // 可选。
    "tags": {                            // 可选。为已注册设备设置的标签值
      "StringTag": "string value",
      "IntegerTag": 42,
      "ListTag": ["string1", "string2"], // 为列表类型的标签设置值列表
      "DateTag": "2024-10-02 22:11",     // 注意时间应为 UTC
      "BooleanTag": true                 // 有效值为：true、false
    },

    // 系统标签，可选
    "app_version": "1.2.3", 
    "device_model": "Samsung SM-G355H",
    "os_version": "2.3",

    // 可选的 chrome/firefox 加密密钥
    "public_key": "BNmDO4BTKEMJqaqprTf7t/HBXXXXX/orcXXXXX/scS5CFP6XXXXXHI1/GgRQD8c4kTxTEEF0quvIUiLQqoBY0/Qo=",
    "auth_token": "RlRmCXXXXX/s7XXXXXjKFzoQ==",
 
    // 可选的 Chrome FCM 密钥 (用于 XMPP)
    "fcm_token": "BNmDO4BTKEMJXXXXXprTf7t/XXXXXBQ/orXXXXXc/scS5CFP6zhQGIHI1/GgRQD8c4kTxTEEF0quvIUiLQqoBY0/Qo=",
    "fcm_push_set": "RlXXXXXGM/s7XXXXXjKFzoQ=="
  }
}
```

可能的设备类型：

* 1 – iOS
* 3 – Android
* 7 – Mac OS X
* 8 – Windows
* 9 – Amazon
* 10 – Safari
* 11 – Chrome
* 12 – Firefox
* 13 – Internet Explorer
* 14 – Email
* 16 – Baidu Android
* 17 – Huawei
* 18 – SMS
* 20 – Web
* 21 – WhatsApp
* 22 – Line
* 23 – Kakao Talk
* 24 – Telegram
* 25 – Apple Wallet
* 26 – Google Wallet
* 27 – Viber

### 注册电子邮件设备
要为您的应用**注册电子邮件订阅者**，请在您的 `/registerDevice` 或 [`/registerEmail`](/zh/developer/api-reference/email-api#registeremail) 请求中发送 `"email": "email_address@domain.com"` 参数，如下所示：

##### 请求示例
```json
{
  "request":{
    "application": "XXXXX-XXXXX",        // 必填。Pushwoosh 应用程序代码
    "email": "email_address@domain.com", // 必填。为您的电子邮件项目注册的电子邮件地址
    "language": "en",                    // 可选。ISO 639-1|639-2 语言代码
    "userId": "Alex",                    // 可选。
    "tags": {                            // 可选。为已注册设备设置的标签值
      "StringTag": "string value",
      "IntegerTag": 42,
      "ListTag": ["string1", "string2"], // 为列表类型的标签设置值列表
      "DateTag": "2024-10-02 22:11",     // 注意时间应为 UTC
      "BooleanTag": true                 // 有效值为：true、false
    }
  }
}
```

### 注册 WhatsApp 设备
要为您的应用注册 WhatsApp 设备，请遵循以下指南：

- **hwid**：确保此字段包含 `whatsapp:` 前缀，后跟 E.164 格式的电话号码（例如，`whatsapp:+0000000000`）。电话号码必须有效，Pushwoosh 会进行验证。

- **推送令牌**：不需要推送令牌，因为 `hwid` 将自动作为推送令牌。

- **device_type**：将此字段设置为 `21` 以指定 WhatsApp 为平台。

##### 请求示例
```json
{ 
  "request": {
    "application": "XXXXX-XXXXX",        // 必填。Pushwoosh 应用程序代码
    "hwid": "whatsapp:+0000000000",      // 必填。WhatsApp 前缀和有效的电话号码
    "timezone": 3600,                    // 可选。秒级时间偏移量
    "device_type": 21,                   // 必填。WhatsApp 设备类型为 21
    "language": "en",                    // 可选。ISO 639-1|639-2 语言代码
    "userId": "Alex",                    // 可选。用户标识符
    "tags": {                            // 可选。用于自定义分段的标签值
      "StringTag": "string value",
      "IntegerTag": 42,
      "ListTag": ["string1", "string2"],
      "DateTag": "2024-10-02 22:11",     // UTC 格式
      "BooleanTag": true  
    },
    "app_version": "1.2.3",              // 可选。应用程序版本
    "device_model": "Samsung SM-G355H",  // 可选。设备型号
    "os_version": "2.3"                  // 可选。操作系统版本
  }
}
```

### 注册 SMS 设备
要为您的应用注册 SMS 设备，请遵循以下指南：

- **hwid**：确保此字段包含 E.164 格式的电话号码（例如，`+0000000000`）。电话号码必须有效，Pushwoosh 会进行验证。

- **推送令牌**：不需要推送令牌，因为 `hwid` 将自动作为推送令牌。

- **device_type**：将此必填字段设置为 `18` 以指定 SMS 为平台。

##### 请求示例
```json 
{  
   "request": {
      "application": "XXXXX-XXXXX",           // 必填。Pushwoosh 应用程序代码
      "hwid": "+0000000000",                  // 必填。E.164 格式的有效电话号码
      "timezone": 3600,                       // 可选。秒级时间偏移量
      "device_type": 18,                      // 必填。SMS 设备类型为 18
      "language": "en",                       // 可选。ISO 639-1|639-2 语言代码
      "userId": "Alex",                       // 可选。用户标识符
      "tags": {                               // 可选。用于自定义分段的标签值
           "StringTag": "string value",
           "IntegerTag": 42,
           "ListTag": ["string1", "string2"],
           "DateTag": "2024-10-02 22:11",     // UTC 格式
           "BooleanTag": true  
      },
      "app_version": "1.2.3",                 // 可选。应用程序版本
      "device_model": "Samsung SM-G355H",     // 可选。设备型号
      "os_version": "2.3"                     // 可选。操作系统版本
   }
}
```

**状态码**：

| HTTP 状态码 | status\_code | 描述 |
| ---------------- | ------------ | -------------------------------------------------- |
| 200 | 200 | 设备注册成功 |
| 200 | 210 | 参数错误。有关更多信息，请参阅 status\_message。 |
| 400 | N/A | 格式错误的请求字符串 |
| 500 | 500 | 内部错误 |



## unregisterDevice

`POST` `https://api.pushwoosh.com/json/1.3/unregisterDevice`

移除设备的推送令牌。未注册的设备仍计入总设备数，并可通过应用内消息 (In-Apps) 访问。由 SDK 内部调用。

##### 请求头

| 名称 | 必填 | 值 | 描述 |
|---------------|----------|---------------|------------------------------------------------------------|
| Authorization | 是 | Token `XXXX` | 用于访问设备 API 的 [API 设备令牌](/zh/developer/api-reference/api-access-token/#device-api-token)。请将 `XXXX` 替换为您的实际设备 API 令牌。 |

##### 请求体

| 名称 | 类型 | 描述 |
| --------------------------------------------- | ------ | --------------------------------------------------- |
| application\* | string | [Pushwoosh 应用程序代码](/zh/developer/api-reference/api-identifiers/#application-code) |
| hwid\* | string | 在 /registerDevice 请求中使用的 [硬件设备 ID](/zh/developer/api-reference/api-identifiers/#hardware-id)。 |

<Tabs>
<TabItem label="200">
```json
{
    "status_code": 200,
    "status_message": "OK",
    "response": null
}
```
</TabItem>
</Tabs>

```json title="示例"
{
  "request": {
    "application": "XXXXX-XXXXX",              // 必填。Pushwoosh 应用程序代码
    "hwid": "8f65b16XXXXXe7a6beceXXXXX530fb2"  // 必填。在 /registerDevice API 中使用的硬件设备 ID
  }
}
```

<Aside type="note">
对于电子邮件，请调用 [`/deleteEmail`](/zh/developer/api-reference/email-api/#deleteemail)。
</Aside>

**状态码**：

| HTTP 状态码 | status\_code | 描述 |
| ---------------- | ------------ | -------------------------------------------------- |
| 200 | 200 | 设备成功取消订阅 |
| 200 | 210 | 参数错误。有关更多信息，请参阅 status\_message。 |
| 400 | N/A | 格式错误的请求字符串 |
| 500 | 500 | 内部错误 |



## deleteDevice

`POST` `https://api.pushwoosh.com/api/v2/device-api/deleteDevice`

删除由指定 [HWID](/zh/developer/api-reference/api-identifiers/#hardware-id) 标识的设备及其在应用程序中的所有关联数据。与仅移除推送令牌并保留设备记录的 [`/unregisterDevice`](/zh/developer/api-reference/device-api/#unregisterdevice) 不同，`/deleteDevice` 会完全移除设备。该请求是异步处理的，一旦删除请求被接受处理，端点就会返回 `200 OK`。

#### 请求头

| 名称 | 必填 | 值 | 描述 |
|---------------|----------|------------------|------------------------------------------------------------|
| Authorization | 是 | Token `XXXX` | 用于访问设备 API 的 [API 设备令牌](/zh/developer/api-reference/api-access-token/#device-api-token)。请将 `XXXX` 替换为您的实际设备 API 令牌。 |
| Content-Type | 是 | application/json | |

#### 请求体

| 名称 | 必填 | 类型 | 描述 |
| ----------- | -------- | ------ | ----------------------------------------------------------------------------------------------------------- |
| application | 是 | string | [Pushwoosh 应用程序代码](/zh/developer/api-reference/api-identifiers/#application-code) |
| hwid | 是 | string | 要删除的设备的 [硬件设备 ID](/zh/developer/api-reference/api-identifiers/#hardware-id)。 |


#### 请求示例

```json
{
  "application": "XXXXX-XXXXX",                 // 必填。Pushwoosh 应用程序代码
  "hwid": "8f65b16df378e7a6bece9614e1530fb2"    // 必填。要删除的设备的硬件设备 ID
}
```

#### 响应示例

<Tabs>
<TabItem label="200">
```json
{
  "status_code": 200,
  "status_message": "OK",
  "response": null
}
```
</TabItem>
</Tabs>

##### 状态码

| HTTP 状态码 | status\_code | 描述 |
| ---------------- | ------------ | -------------------------------------------------- |
| 200 | 200 | 删除请求已接受 |
| 200 | 210 | 参数错误。有关更多信息，请参阅 status\_message。 |
| 400 | N/A | 格式错误的请求字符串 |
| 401 | N/A | 缺少或无效的授权令牌 |
| 500 | 500 | 内部错误 |



## setTags

`POST` `https://api.pushwoosh.com/json/1.3/setTags`

为设备设置标签值。由 SDK 调用。

##### 请求头

| 名称 | 必填 | 值 | 描述 |
|---------------|----------|---------------|------------------------------------------------------------|
| Authorization | 是 | Token `XXXX` | 用于访问设备 API 的 [API 设备令牌](/zh/developer/api-reference/api-access-token/#device-api-token)。请将 `XXXX` 替换为您的实际设备 API 令牌。 |

##### 请求体

| 名称 | 类型 | 描述 |
| --------------------------------------------- | ------ | ------------------------------------------------------------ |
| application\* | string | [Pushwoosh 应用程序代码](/zh/developer/api-reference/api-identifiers/#application-code) |
| hwid\* | string | 在 /registerDevice 请求中使用的 [硬件设备 ID](/zh/developer/api-reference/api-identifiers/#hardware-id)。 |
| tags\* | object | 要设置的标签的 JSON 对象，发送 "null" 以移除值。 |

<Tabs>
<TabItem label="200">
```json
{
   "status_code": 200,
   "status_message": "OK",
   "response": null
}
```
</TabItem>
</Tabs>

<Aside type="note">
该方法由 SDK 调用。可以从您的后端远程调用它，但您需要在后端维护一个最新的 hwid 数据库。
</Aside>

```json title="示例"
{
  "request":{
    "application": "XXXXX-XXXXX",               // 必填。Pushwoosh 应用程序代码
    "hwid": "8f65b16XXXXXe7a6becXXXXXe1530fb2", // 必填。在 /registerDevice API 中使用的硬件设备 ID
    "tags": {                                   // 必填。
      "StringTag": "string value",
      "IntegerTag": 42,
      "ListTag": ["string1", "string2"],        // 为列表类型的标签设置值列表
      "DateTag": "2024-10-02 22:11",            // 注意时间为 UTC
      "BooleanTag": true                        // 有效值为 - true, false
    }  
  }
}
```

### 增加整数标签值

要**增加**整数标签的值，请使用带有 "increment" 值的 `operation` 参数，如下所示：

```json
{
  "request":{
    "application": "12345-67890",                   // 必填。Pushwoosh 应用程序代码
    "hwid": "21AB7628-XXXX-XXXX-CCC0-PO287CS24CA4", // 必填。在 /registerDevice API 中使用的硬件设备 ID
    "tags": {                                       // 必填。
      "Level": {                                    // 标签名称
        "operation": "increment",                   // 以以下值的增量覆盖整数标签
        "value": 1                                  // 标签值的增量
      }  
    }  
  }
}
```

### 减少整数标签值

要**减少**，请使用负数作为 "increment" 操作的值（-1、-2、-3、-n）：

```json
{
  "request":{
    "application": "12345-67890",                   // 必填。Pushwoosh 应用程序代码
    "hwid": "21AB7628-XXXX-XXXX-CCC0-PO287CS24CA4", // 必填。在 /registerDevice API 中使用的硬件设备 ID
    "tags": {                                       // 必填
      "Level": {                                    // 标签名称
        "operation": "increment",                   // 以以下值的减量覆盖整数标签
        "value": -1                                 // 标签值的减量
      }  
    }  
  }
}
```

### 附加列表标签值

要**使用新值扩展列表标签**，请使用带有 "append" 值的 `operation` 参数，如下所示：

```json title="示例"
{
  "request": {
    "hwid": "3d124a79XXXXf189XXXX7dfd9XXXXafd", // 必填。在 /registerDevice API 中使用的硬件设备 ID
    "application": "6XXXX-XXXX3",               // 必填。Pushwoosh 应用程序代码
    "tags": {                                   // 必填。
      "ListTag": {                              // 标签名称
        "operation": "append",                  // 将以下值附加到标签的值列表中
        "value": [                              // 要附加的值
          "tag2",
          "tag3"
        ]
      }
    }
  }
}
```

### 移除列表标签值

要从列表标签中移除某些值，请使用 "remove" 操作，如下所示：

```json
{
  "request":{
    "application": "12345-67890",                   // 必填。Pushwoosh 应用程序代码
    "hwid": "21AB7628-XXXX-XXXX-CCC0-PO287CS24CA4", // 必填。在 /registerDevice API 中使用的硬件设备 ID
    "tags": {                                       // 必填。
      "In-App Product": {                           // 标签名称
        "operation": "remove",                      // 从列表标签中移除以下值
        "value": "outwear_02"                       // 要移除的一个或多个值
      }
    }  
  }
}
```

### 按 UserID 设置标签

要为与特定 [User ID](/zh/developer/api-reference/api-identifiers/#user-id) 关联的所有设备设置标签，请使用 "userId" 参数而不是 "hwid"。

<Aside type="caution">
请确保您要设置值的标签是[用户特定的](/zh/developer/guides/audience-and-segmentation/tags/#tag-scope-general-vs-user-specific)。
</Aside>

```json title="示例"
{
  "request":{
    "application": "AAAAA-BBBBB", // Pushwoosh 应用代码
    "userId": "some_user",        // 您想为其设置标签的用户 ID
    "tags": {                     // 要设置的标签和值
      "Language": "es"
    }  
  }
}
```

<Aside type="note">
对于电子邮件，请调用 [`/setEmailTags`](/zh/developer/api-reference/email-api/#setemailtags)。
</Aside>

**状态码：**

| HTTP 状态码 | status\_code | 描述 |
| ---------------- | ------------ | -------------------------------------------------- |
| 200 | 200 | 标签已成功设置 |
| 200 | 210 | 参数错误。有关更多信息，请参阅 status\_message。 |
| 400 | N/A | 格式错误的请求字符串 |
| 500 | 500 | 内部错误 |


## getTags

`POST` `https://api.pushwoosh.com/json/1.3/getTags`

检索特定设备的标签列表及其对应值。

##### 请求头

| 名称 | 必填 | 值 | 描述 |
|---------------|----------|---------------|------------------------------------------------------------|
| Authorization | 是 | Token `XXXX` | 用于访问设备 API 的 [API 设备令牌](/zh/developer/api-reference/api-access-token/#device-api-token)。请将 `XXXX` 替换为您的实际设备 API 令牌。 |

##### 请求体

| 名称 | 类型 | 描述 |
| --------------------------------------------- | ------ | --------------------------------------------------------------------------------------------------- |
| application\* | string | [Pushwoosh 应用程序代码](/zh/developer/api-reference/api-identifiers/#application-code) |
| userId | string | 用于替代 "hwid" 的 [User ID](/zh/developer/api-reference/api-identifiers/#user-id)。如果与 "hwid" 一起使用，则 "hwid" 优先。 |
| hwid | string | 在 `/registerDevice` 请求中使用的 [硬件设备 ID](/zh/developer/api-reference/api-identifiers/#hardware-id)。 |

<Tabs>
<TabItem label="200">
```json
{
  "status_code": 200,
  "status_message": "OK",
  "response": {
    "result": {
      "Language": "fr"
    }
  }
}
```
</TabItem>
</Tabs>

```json title="示例"
{
  "request":{
    "application": "XXXXX-XXXXX",   // 必填。Pushwoosh 应用程序代码
    "hwid": "HWID",                 // 可选。在 /registerDevice API 中使用的硬件设备 ID
    "userId": "USER_ID"             // 可选。可用于替代 "hwid" 以检索特定用户的标签
  }
}
```

## setBadge

`POST` `https://api.pushwoosh.com/json/1.3/setBadge`

将设备的当前角标值发送到 Pushwoosh。由 SDK 内部调用。

##### 请求头

| 名称 | 必填 | 值 | 描述 |
|---------------|----------|---------------|------------------------------------------------------------|
| Authorization | 是 | Token `XXXX` | 用于访问设备 API 的 [API 设备令牌](/zh/developer/api-reference/api-access-token/#device-api-token)。请将 `XXXX` 替换为您的实际设备 API 令牌。 |

##### 请求体

| 名称 | 类型 | 描述 |
| --------------------------------------------- | ------- | --------------------------------------------------- |
| application\* | string | [Pushwoosh 应用程序代码](/zh/developer/api-reference/api-identifiers/#application-code) |
| hwid\* | string | 在 /registerDevice 请求中使用的 [硬件设备 ID](/zh/developer/api-reference/api-identifiers/#hardware-id)。 |
| badge\* | integer | 应用程序上的当前角标。 |

<Tabs>
<TabItem label="200">
```json
{
  "status_code": 200,
  "status_message": "OK"
}
```
</TabItem>
</Tabs>

```json title="示例"
{
  "request":{
    "application": "XXXXX-XXXXX",               // 必填。Pushwoosh 应用程序代码
    "hwid": "8f65b16dXXXXe7a6XXXX9614XXXX0fb2", // 必填。在 /registerDevice API 中使用的硬件设备 ID
    "badge": 4                                  // 必填。应用程序上的当前角标
  }
}
```

由 SDK 内部调用。将设备的当前角标值发送到 Pushwoosh。当应用在 iOS 设备上更改角标值时，这会在内部发生。这使得角标自动递增功能能够正常工作。

<Aside type="caution">
此方法**不**用于更新设备上的角标值。请改用带有 `"ios_badges"` 参数的 [`/createMessage`](/zh/developer/api-reference/messages-api/#createmessage) 请求。
</Aside>



## applicationOpen

`POST` `https://api.pushwoosh.com/json/1.3/applicationOpen`

注册应用打开事件。由 SDK 内部调用。

##### 请求头

| 名称 | 必填 | 值 | 描述 |
|---------------|----------|---------------|------------------------------------------------------------|
| Authorization | 是 | Token `XXXX` | 用于访问设备 API 的 [API 设备令牌](/zh/developer/api-reference/api-access-token/#device-api-token)。请将 `XXXX` 替换为您的实际设备 API 令牌。 |

##### 请求体

| 名称 | 类型 | 描述 |
| --------------------------------------------- | ------ | --------------------------------------------------- |
| application\* | string | [Pushwoosh 应用程序代码](/zh/developer/api-reference/api-identifiers/#application-code) |
| hwid\* | string | 在 `/registerDevice` 请求中使用的 [硬件设备 ID](/zh/developer/api-reference/api-identifiers/#hardware-id)。 |

<Tabs>
<TabItem label="200">
```json
{
  "status_code": 200,
  "status_message": "OK"
}
```
</TabItem>
</Tabs>

```json title="示例"
{
  "request": {
    "application": "XXXXX-XXXXX",              // 必填。Pushwoosh 应用程序代码
    "hwid": "8f65b16dXXXXe7a6XXXX9614eXXXXfb2" // 必填。在 /registerDevice API 中使用的硬件设备 ID
  }
}
```



## pushStat

`POST` `https://api.pushwoosh.com/json/1.3/pushStat`

注册推送打开事件。由 SDK 内部调用。

##### 请求头

| 名称 | 必填 | 值 | 描述 |
|---------------|----------|---------------|------------------------------------------------------------|
| Authorization | 是 | Token `XXXX` | 用于访问设备 API 的 [API 设备令牌](/zh/developer/api-reference/api-access-token/#device-api-token)。请将 `XXXX` 替换为您的实际设备 API 令牌。 |
##### 请求体

| 名称 | 类型 | 描述 |
| --------------------------------------------- | ------ | --------------------------------------------------------------------------- |
| application\* | string | [Pushwoosh 应用程序代码](/zh/developer/api-reference/api-identifiers/#application-code) |
| hwid\* | string | 在 /registerDevice 请求中使用的 [硬件设备 ID](/zh/developer/api-reference/api-identifiers/#hardware-id)。 |
| userId | string | 与推送打开事件关联的 [User ID](/zh/developer/api-reference/api-identifiers/#user-id)。 |
| hash | string | 在推送通知中收到的哈希标签（推送有效负载的 "p" 参数）。 |

<Tabs>
<TabItem label="200">
```json
{
  "status_code": 200,
  "status_message": "OK",
  "response": null
}
```
</TabItem>
</Tabs>

```json title="示例"
{
  "request": {
    "application": "XXXXX-XXXXX",               // 必填。Pushwoosh 应用程序代码
    "hwid": "8f65b16dfXXXX7a6beXXXX14e1530fb2", // 必填。在 /registerDevice API 中使用的硬件设备 ID
    "userId": "USER012345",                     // 可选。与推送打开事件关联的用户 ID
    "hash": "HASH_TAG"                          // 可选。在推送通知中收到的哈希标签
                                                //           （推送有效负载中的 "p" 参数）
  }
}
```


## messageDeliveryEvent

`POST` `https://api.pushwoosh.com/json/1.3/messageDeliveryEvent`

为设备注册推送送达事件。由 SDK 内部调用。

##### 请求头

| 名称 | 必填 | 值 | 描述 |
|---------------|----------|---------------|------------------------------------------------------------|
| Authorization | 是 | Token `XXXX` | 用于访问设备 API 的 [API 设备令牌](/zh/developer/api-reference/api-access-token/#device-api-token)。请将 `XXXX` 替换为您的实际设备 API 令牌。 |

##### 请求体

| 名称 | 类型 | 描述 |
| --------------------------------------------- | ------ | --------------------------------------------------------------------------- |
| application\* | string | [Pushwoosh 应用程序代码](/zh/developer/api-reference/api-identifiers/#application-code) |
| hwid\* | string | 在 `/registerDevice` 请求中使用的 [硬件设备 ID](/zh/developer/api-reference/api-identifiers/#hardware-id)。 |
| hash | string | 在推送通知中收到的哈希标签（推送有效负载的 "p" 参数）。 |

<Tabs>
<TabItem label="200">
```json
{
  "status_code": 200,
  "status_message": "OK",
  "response": null
}
```
</TabItem>
</Tabs>

```json title="示例"
 {
  "request": {
    "application": "XXXXX-XXXXX",               // 必填。Pushwoosh 应用程序代码
    "hwid": "8f65b16dfXXXX7a6bece9XXXX1530fb2", // 必填。在 /registerDevice API 中使用的硬件设备 ID
    "hash": "HASH_TAG"                          // 可选。在推送通知中收到的哈希标签
                                                //           （推送有效负载中的 "p" 参数）
  }
}
```