> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 推送通知操作按钮

> 在iOS、Android和网页的推送通知中添加交互式操作按钮。学习通过控制台和API进行设置、支持的平台、点击处理、图标和事件跟踪。

<Frame caption="Image showing action buttons in iOS">
  <img src="https://mintcdn.com/onesignal/9_Q1FZLh6C0BFLq-/images/docs/c40c0d1-ios15-action-icons--1.jpeg?fit=max&auto=format&n=9_Q1FZLh6C0BFLq-&q=85&s=51965abdd020931ca08de3f44dd96370" width="1000" height="580" data-path="images/docs/c40c0d1-ios15-action-icons--1.jpeg" />
</Frame>

<Info>
  本指南仅适用于推送通知。对于应用内消息，请参阅[应用内消息：如何添加点击操作](./iam-click-actions)。
</Info>

操作按钮让您可以在单个推送通知中添加多个带标签的操作，因此用户无需先打开您的应用或网站即可响应。根据操作系统和设备，用户通过展开通知（长按、滑动+查看或展开操作）来显示按钮。

***

## 添加操作按钮

您可以在[模板](./templates)中配置操作按钮，直接在控制台编写消息时配置，或通过[API](/reference/push-notification)配置。

### 控制台和模板设置

创建推送时，打开**高级选项 > 操作按钮**。

<Frame caption="Image showing action buttons to be added for iOS and Android">
  <img src="https://mintcdn.com/onesignal/MUgio66t0sYhGEvj/images/docs/64712e6-Screenshot_2023-06-02_at_1.53.48_PM.png?fit=max&auto=format&n=MUgio66t0sYhGEvj&q=85&s=b2bb426793efd74cf713471e75894fc3" width="1614" height="1588" data-path="images/docs/64712e6-Screenshot_2023-06-02_at_1.53.48_PM.png" />
</Frame>

### API设置

* **移动应用**：使用`buttons`参数。传递最多3个包含`id`、`text`和`icon`的对象数组。
* **网页(Chrome)**：使用`web_buttons`，传递最多2个包含`id`、`text`、`icon`和`url`的对象。

***

## 操作按钮属性

* **操作ID**：特定按钮操作的唯一标识符。点击按钮的ID会传递给您，以便您识别点击了哪个按钮。（例如'accept-button'）

  * 每个按钮必须唯一。
  * 在OSNotification负载中可用，可在SDK通知打开事件处理程序中访问。
  * API：`id`属性

* **标签**：按钮应向用户显示的文本。（例如'接受'）

  * API：`text`属性

* **图标**：与按钮标签一起显示的可选图标。并非所有平台和操作系统都支持。详细信息请参阅下方的常见问题。

  * 移动应用必须在其图片资源中包含按钮。详细信息请参阅下方的操作按钮图标。
  * 网站可以使用有效的公开可访问的图标URL。请保持较小大小，因为每次通知显示时都会下载。（例如`http://site.com/icon.png`）
  * API：`icon`属性

* **按钮URL**：点击通知时打开的URL。传递`'do_not_open'`可防止打开任何URL。（例如'do\_not\_open'）

  * 仅限网页
  * API：`url`属性

### 操作按钮图标

* iOS 15+支持操作按钮图标
* Android在[Android N（又称Android 7）](https://android-developers.googleblog.com/2016/06/notifications-in-android-n.html)停止支持操作按钮图标

***

## 处理操作按钮点击

当用户点击按钮时，OneSignal会将操作ID传递给您的应用/网站。您可以使用默认行为（打开您的应用/网站）或覆盖它。

### 默认行为（打开应用/网站，然后处理）

1. 应用/网站打开（或在网页上获得焦点）。
2. 您的点击/打开监听器接收带有操作ID的事件。（有关点击监听器的详细信息，请参阅[移动SDK参考](./mobile-sdk-reference#addclicklistener-push)或[网页SDK参考](./web-sdk-reference#addeventlistener-notifications)。）

### 防止从操作按钮点击启动应用

* **Android：** 遵循[Android SDK设置 > 禁用默认打开行为](./android-sdk-setup#disable-default-open-behavior)。这让您可以在[服务扩展](./service-extensions)中拦截点击并运行自定义逻辑（例如调用API）而不打开应用。
* **iOS：** 在通知上包含`ios_category`，通过[UNNotificationCategory对象](https://developer.apple.com/documentation/usernotifications/unnotificationcategory)关联操作。更多详细信息请参阅Apple的[声明您的可操作通知类型](https://developer.apple.com/documentation/usernotifications/declaring_your_actionable_notification_types)。
* **网页(Chrome)：** 使用`_osp=do_not_open`魔术字符串防止打开任何URL。Chrome和Firefox支持此功能，但Safari浏览器不支持。

***

## 支持的平台和限制

| 平台                        | 支持的按钮 | 注意事项                            |
| ------------------------- | ----- | ------------------------------- |
| iOS                       | 最多4个  | iOS 15+支持图标。后台处理需要类别。           |
| Android / Amazon / Huawei | 最多3个  | Android 7+不支持按钮图标。              |
| 网页 – Chrome               | 最多2个  | 支持按钮和图标。支持`_osp=do_not_open`。   |
| 网页 – Firefox              | 无按钮   | `_osp=do_not_open`仅适用于启动URL。    |
| 网页 – Safari               | 无按钮   | 不支持`_osp=do_not_open`。请提供真实URL。 |

<Note>用户通常需要**展开**通知才能看到按钮（例如，iOS上长按，某些Android OEM上滑动+**查看**）。</Note>

***

## 故障排除

### 按钮不显示

* 展开通知（长按、滑动+查看或展开）。
* 验证您为每个按钮都添加了操作ID和标签。
* 检查平台限制（例如，Chrome上只能有2个按钮）。

### 在移动网页上点击按钮不会打开浏览器

如果浏览器在后台或完全关闭，大多数移动浏览器（包括Chrome）不会前置或打开URL，尽管点击事件仍会在service worker中触发。这是故意的浏览器行为，用于防止后台应用程序中断用户。

* 大多数移动浏览器不会从后台service worker中前置自己。点击仍会在worker中触发，但标签页不会打开。这是故意的。
* 如果您希望标签页获得焦点而不是打开新标签页，请确保启动URL和按钮URL完全相同（包括尾部斜杠）。

### 图标不显示

* iOS必须是15+版本才支持按钮图标。
* Android 7+不渲染操作按钮图标。
* 在网页上，确认图标URL是公开可访问的且文件较小（便于快速下载）。

### 为什么有关闭操作按钮？

默认情况下，Windows 10上的网页推送通知包含关闭按钮。但是，如果您添加了自己的操作按钮，则会删除此关闭按钮。因此，在任一情况下，通知都会保留在屏幕上，直到用户与其交互。这是Google设计的，以给用户与通知交互的机会。

<Info>
  需要帮助？

  与我们的支持团队聊天或发送邮件至 `support@onesignal.com`

  请包含以下信息：

  * 您遇到的问题详情以及复现步骤（如有）
  * 您的 OneSignal 应用 ID
  * 外部 ID 或订阅 ID（如适用）
  * 您在 OneSignal 控制台中测试的消息 URL（如适用）
  * 任何相关的[日志或错误信息](/docs/cn/capturing-a-debug-log)

  我们很乐意为您提供帮助！
</Info>

***
