> ## 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.

# URL、链接和深度链接

> 设置推送、电子邮件、应用内消息、短信和 RCS 中的启动 URL、深度链接、动态 URL、UTM 跟踪和点击跟踪。

## 链接的工作原理

每条 OneSignal 消息——推送、电子邮件、应用内消息、短信或 RCS——都可以包含一个 URL，当用户点击时会跳转到目标页面。该目标可以是在浏览器中打开的网页，也可以是直接在应用内打开的[深度链接](#deep-links)。

设置 URL 的方式取决于渠道：

* **推送**：在仪表板中使用 **Launch URL** 字段，或在 API 中使用 `url` 参数。
* **电子邮件**：使用电子邮件编辑器或 HTML 添加链接。OneSignal 自动跟踪点击。
* **应用内消息**：在按钮、图像或背景上配置[点击操作](./iam-click-actions)。
* **SMS/RCS**：将链接直接内嵌到消息中。在仪表板中使用 **Insert Trackable Link** 可自动缩短并跟踪链接。请参阅 [SMS/RCS 可跟踪链接](#sms%2Frcs-trackable-links)。

### 深度链接

要在应用内而非浏览器中打开内容，请使用深度链接。各渠道的深度链接支持情况有所不同：

* **推送和应用内消息**：支持自定义 URL 方案（如 `your-app://product/123`）以及 `https://` 通用链接 / App Links。
* **电子邮件和短信**：仅支持 `https://` 通用链接 / App Links。自定义 URL 方案不适用，因为电子邮件客户端和短信应用不处理它们。

<Card title="深度链接" icon="link" href="./deep-linking">
  自定义 URL 方案、通用链接和应用专属路由的完整设置指南。
</Card>

### 推送

#### 启动 URL

启动 URL 在用户点击推送通知时打开。它应以 `https://` 开头。

<Info>
  要在 Apple 设备上使用 `http://` URL，请在应用的 `Info.plist` 文件中配置 [NSAppTransportSecurity](https://developer.apple.com/documentation/bundleresources/information_property_list/nsapptransportsecurity) 属性。
</Info>

如果您向网页和移动用户同时发送单条消息，请使用特定平台的 URL 字段：

* `url` — 面向所有平台
* `web_url` — 仅面向网页推送 Subscription
* `app_url` — 仅面向移动 Subscription

<Frame caption="OneSignal 仪表板中的 Launch URL 字段">
  <img src="https://mintcdn.com/onesignal/KudGm9GSZy-rIRO3/images/dashboard/push-launch-url.png?fit=max&auto=format&n=KudGm9GSZy-rIRO3&q=85&s=5b5687b99e1bc2ab8c3afd9e1780c1a5" alt="OneSignal 仪表板显示推送通知的启动 URL 输入字段" width="1066" height="440" data-path="images/dashboard/push-launch-url.png" />
</Frame>

<Tip>
  要在不打开任何页面的情况下关闭网页推送通知，请在启动 URL 末尾添加 `?_osp=do_not_open`，例如 `https://yoursite.com/page?_osp=do_not_open`。此功能仅适用于网页推送。
</Tip>

#### 附加数据

您也可以不使用启动 URL，而是通过 **Additional Data** 字段（API 中的 `data`）发送自定义键值对。您的应用可通过 [SDK 的通知点击监听器](./mobile-sdk-reference#push-notification-events)的 `additionalData` 属性读取此数据——当您需要比单个 URL 更高的灵活性时，这非常有用。

<Frame caption="通过 Additional Data 字段发送供应用处理的 URL">
  <img src="https://mintcdn.com/onesignal/KudGm9GSZy-rIRO3/images/dashboard/push-additional-data.png?fit=max&auto=format&n=KudGm9GSZy-rIRO3&q=85&s=9c00048fd23586de1e3e70a82fcd1db7" alt="OneSignal 仪表板显示附加数据字段及自定义键值对" width="1034" height="378" data-path="images/dashboard/push-additional-data.png" />
</Frame>

### 电子邮件链接跟踪

当为电子邮件或模板启用 **Track link clicks** 时（默认开启），OneSignal 会自动跟踪电子邮件中的链接点击。OneSignal 按电子邮件和按单个链接分别跟踪总点击数和独特点击数（每封电子邮件最多 30 个链接）。可在[电子邮件消息报告](./email-message-reports)中查看这些统计数据。

<Note>
  有关取消订阅链接，请参阅[取消订阅链接和电子邮件订阅](./unsubscribe-links-email-subscriptions)。
</Note>

<Frame caption="显示按链接跟踪统计的点击活动表">
  <img src="https://mintcdn.com/onesignal/3PUtCumasMeFG2p0/images/docs/link_tracking.png?fit=max&auto=format&n=3PUtCumasMeFG2p0&q=85&s=318dab483003dac8e1203ab75b5c2756" alt="OneSignal 电子邮件消息报告，显示每个链接的总点击数和独特点击数" width="957" height="312" data-path="images/docs/link_tracking.png" />
</Frame>

<Accordion title="电子邮件点击跟踪如何重写 URL">
  跟踪的工作原理是重写 URL 以捕获点击事件，然后将用户重定向到原始目标。这几乎是即时发生的，但可能会导致[深度链接](./deep-linking)出现意外行为。例如：

  `https://some-domain.com/the-page`

  会变成类似：

  `https://some-domain/c/eJxU0D2uGzEMBODTrDoZJPW3...`

  用户会立即被重定向到预期的 URL。
</Accordion>

如果您使用 Liquid 语法构造链接，OneSignal 可能无法自动检测到它们。请明确将链接标记为可跟踪：

```liquid theme={null}
{{ 'https://some-domain.com/the-page' | track_link }}
```

要为整封电子邮件禁用跟踪，请在仪表板电子邮件编辑器中取消勾选 **Track link clicks**，或在 API 中设置 `disable_email_click_tracking: true`。

<Frame caption="取消勾选 Track link clicks 以禁用跟踪">
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/8d3292a5cb0b24a4b5bc8f9ae1074f513c3fed310045a6b6c534b94e344a401b-Screenshot_2025-02-14_at_11.50.38_AM.png" alt="OneSignal 仪表板电子邮件设置，已取消勾选 Track link clicks" />
</Frame>

要仅对特定链接禁用跟踪，同时保持其他链接的跟踪，请在其锚标记中添加 `disable-tracking=true` 属性：

```html theme={null}
<a href="https://some-domain.com/the-page" disable-tracking=true>查看页面</a>
```

<Warning>
  为整封电子邮件禁用跟踪意味着不会收集任何点击数据——[电子邮件消息报告](./email-message-reports)中的点击率将显示"N/A"。
</Warning>

### SMS/RCS 可跟踪链接

OneSignal 使用 `1sgnl.co` 域名为 SMS/RCS 消息提供可跟踪的缩短链接。只需将您的 URL 包裹在 `{{ "https://your-url.com" | track_link }}` 中，消息发送时该链接将被替换为可跟踪链接。如需通过 API 使用，请参阅 [SMS/RCS 创建消息 API 参考](/reference/sms)。

每条 SMS/RCS 消息只允许包含 1 个可跟踪链接。

使用仪表板时，您也可以点击消息输入框下方的 **Insert Trackable Link** 按钮并输入您的 URL：

<Frame caption="输入可跟踪短信链接的弹窗">
  <img src="https://mintcdn.com/onesignal/bUViEhbP9-TaIZwH/images/docs/trackable_sms_1.png?fit=max&auto=format&n=bUViEhbP9-TaIZwH&q=85&s=c1cd72dbf1cd7e3be05460bd4958ecff" alt="OneSignal 仪表板弹窗，用于向短信消息中插入可跟踪缩短链接" width="2570" height="1232" data-path="images/docs/trackable_sms_1.png" />
</Frame>

点击 **Insert trackable link** 将短链接添加到消息中：

```liquid theme={null}
Your order is on its way!
Track it here: {{ "https://your-url.com" | track_link }}
```

消息发送时，双花括号及其中的内容将被替换为 `1sgnl.co/XXXX` 可跟踪链接：

<Frame caption="可跟踪链接在设备上显示的样式">
  <img src="https://mintcdn.com/onesignal/KSCNwSpBCNSQ8xdF/images/docs/trackable_sms_3.png?fit=max&auto=format&n=KSCNwSpBCNSQ8xdF&q=85&s=627e22caedd413d193a403aef6070b68" alt="移动设备上的短信通知，显示可跟踪缩短链接" width="1242" height="1044" data-path="images/docs/trackable_sms_3.png" />
</Frame>

***

## 动态 URL

您可以使用 [Liquid 语法](./using-liquid-syntax) 构建个性化的用户专属 URL。例如，在 URL 中包含用户 ID，让每个人都跳转到自己的个人资料页面；或插入最近事件中的产品 ID，直接链接到相关商品。

动态 URL 可从以下来源提取数据：

* 用户属性（如 `external_id`、`email`）
* 存储在 OneSignal 中的标签
* 通过 API 发送的 `custom_data`
* 自定义事件（在 Journeys 中）

<Tabs>
  <Tab title="用户属性">
    将 `external_id` 或 `email` 等值直接注入 URL。

    ```text theme={null}
    https://yourdomain.com/profile/user={{subscription.external_id}}
    ```

    如果用户的 `external_id` 是 `12345`，最终 URL 为：

    ```text theme={null}
    https://yourdomain.com/profile/user=12345
    ```

    类似地：

    ```text theme={null}
    https://yourdomain.com/profile/email={{subscription.email}}
    ```

    如果用户的电子邮件是 `john@example.com`，最终 URL 为：

    ```text theme={null}
    https://yourdomain.com/profile/email=john@example.com
    ```
  </Tab>

  <Tab title="数据标签">
    引用存储在 OneSignal 中的用户标签。

    ```text theme={null}
    https://yourdomain.com/topic/{{tag_key}}
    ```

    如果用户的标签 `tag_key` 值为 `technology`，最终 URL 为：

    ```text theme={null}
    https://yourdomain.com/topic/technology
    ```

    如果未设置 `tag_key`，URL 将变为：

    ```text theme={null}
    https://yourdomain.com/topic/
    ```

    使用 `default` 过滤器设置默认值：

    ```text theme={null}
    https://yourdomain.com/topic/{{tag_key | default: 'unknown'}}
    ```
  </Tab>

  <Tab title="custom_data">
    使用创建消息 API 和模板。在模板中使用引用 `custom_data` 对象的 Liquid 语法设置 URL。

    模板 URL：

    ```text theme={null}
    https://yourdomain.com/invoice={{message.custom_data.invoice_number}}
    ```

    带有 `custom_data` 的 API 请求：

    ```json theme={null}
    {
        "template_id": "YOUR_TEMPLATE_ID",
        "custom_data": {
            "invoice_number": "12345"
        }
    }
    ```

    最终 URL：

    ```text theme={null}
    https://yourdomain.com/invoice=12345
    ```
  </Tab>

  <Tab title="自定义事件">
    在 Journeys 中使用捕获的自定义事件个性化 URL。直接引用事件属性，或将事件赋值给变量以简化语法。

    **直接引用事件属性：**

    ```text theme={null}
    https://yourdomain.com/order/{{ journey.event.purchase.properties.order_id }}
    ```

    如果最近的 `purchase` 事件包含 `"order_id": "98765"`，最终 URL 为：

    ```text theme={null}
    https://yourdomain.com/order/98765
    ```

    **将事件赋值给变量以提高可读性：**

    ```liquid theme={null}
    {% assign event = journey.event.purchase %}
    https://yourdomain.com/order/{{ event.properties.order_id }}
    ```

    **访问最近存储的事件：**

    ```text theme={null}
    https://yourdomain.com/product/{{ journey.last_event.properties.product_id | default: 'unknown' }}
    ```

    **包含空格或特殊字符的事件名称（哈希表示法）：**

    ```text theme={null}
    https://yourdomain.com/status/{{ journey.event["order status"].properties.current_status }}
    ```

    <Note>
      自定义事件只能在 Journeys 中使用的模板中引用。使用 `journey.first_event`、`journey.last_event` 或 `journey.event.<name>` 在 Liquid 中访问事件数据。
    </Note>
  </Tab>
</Tabs>

<Tip>
  只将数据替换到 URL 的部分内容中——保持协议（`https://`）和域名为静态文本。使用 `default` 过滤器为缺失值设置默认值。
</Tip>

***

## UTM 参数

UTM 参数通过在 URL 中附加 `source`、`medium` 和 `campaign` 详情来跟踪推广活动效果。将 UTM 参数直接添加到消息中的 URL 即可。

对于从仪表板发送的推送通知，OneSignal 可以自动添加 UTM。

<Accordion title="推送通知的自动 UTM" icon="circle-chevron-down">
  导航到**设置 > 推送和应用内 > UTM 设置**，并启用 **Turn on automated UTM tagging**。

  启用后，OneSignal 会附加以下可编辑的值：

  * **Source** = `utm_source` — 默认为 `onesignal`
  * **Medium** = `utm_medium` — 默认为 `push`
  * **Campaign** = `utm_campaign` — 默认为 `{{ sendDate }}-{{ title }}`
    * `sendDate`：发送日期
    * `title`：消息标题中的前 15 个字母数字字符、下划线或连字符

  示例：

  ```text theme={null}
  https://test.com?utm_source=onesignal&utm_medium=push&utm_campaign=2020-06-03-sale-today
  ```

  <Warning>
    自动 UTM 标记仅适用于从仪表板发送的推送通知，不适用于：

    * 电子邮件、短信或应用内消息
    * Journeys、模板或自动化消息
    * API 请求
    * "发送测试消息"按钮
    * 附加数据字段

    对于以上情况，请在模板或 API 请求体中手动添加 UTM 参数。
  </Warning>

  #### URL 处理和覆盖

  如果您在启用自动标记的情况下手动向启动 URL 添加 UTM 参数，您手动添加的 UTM 将覆盖自动值。
</Accordion>

***

## 常见问题

### 如何链接到应用商店？

将商店 URL 作为启动 URL 使用：

* **Android**：使用 Google Play 链接，例如 `https://play.google.com/store/apps/details?id=com.example.app`。请参阅[链接到 Google Play](https://developer.android.com/distribute/marketing-tools/linking-to-google-play.html)。
* **iOS**：使用 App Store 链接，但将 `https://` 替换为 `itms-apps://` 以直接打开 App Store 应用，例如 `itms-apps://apps.apple.com/app/id123456789`。

### 我可以链接到其他应用吗？

对于推送和应用内消息，您可以使用 URL 方案深度链接到其他应用。例如，要[深度链接到 WhatsApp](https://faq.whatsapp.com/425247423114725)：`whatsapp://wa.me/15551234567`。

对于电子邮件和短信，请改用 `https://` 链接——不支持自定义 URL 方案。

### 为什么我的启动 URL 不起作用？

常见原因：

* **URL 格式不匹配**：URL 必须以 `https://` 开头。如果您在 Apple 设备上使用 `http://`，需要配置 [NSAppTransportSecurity](https://developer.apple.com/documentation/bundleresources/information_property_list/nsapptransportsecurity)。
* **移动端自定义方案**：像 `your-app://path` 这样的深度链接在所有平台上不一定能作为启动 URL 使用。请使用 **Additional Data** 字段，或参阅[深度链接](./deep-linking)获取可靠的应用路由方案。
* **网页推送默认行为**：如果未设置启动 URL，网页推送将打开您的主页。请明确设置启动 URL 以控制目标页面。
* **点击跟踪干扰**：在电子邮件中，用于点击跟踪的 URL 重写可能会破坏深度链接。请尝试对该特定链接[禁用点击跟踪](#email-link-tracking)。

### UTM 参数适用于电子邮件和短信吗？

不适用。自动 UTM 标记仅适用于从仪表板发送的推送通知。对于电子邮件和短信，请在模板或 API 请求体中手动添加 UTM 参数。请参阅 [UTM 参数](#utm-parameters) 了解完整限制说明。

### 我可以阻止推送通知打开 URL 吗？

在移动端，点击推送通知始终会打开应用。

在网页端，可在启动 URL 末尾添加 `?_osp=do_not_open`，以在不打开任何页面的情况下关闭通知。请参阅[启动 URL 提示](#launch-url)中的示例。

***

<Columns cols={2}>
  <Card title="深度链接" icon="link" href="./deep-linking">
    为推送和应用内消息设置自定义 URL 方案和应用专属路由。
  </Card>

  <Card title="消息个性化" icon="wand-magic-sparkles" href="./message-personalization">
    使用 Liquid 语法和标签在消息中插入动态用户数据。
  </Card>

  <Card title="使用 Liquid 语法" icon="code" href="./using-liquid-syntax">
    OneSignal 模板中 Liquid 过滤器、标签和变量的参考指南。
  </Card>

  <Card title="电子邮件消息报告" icon="chart-line" href="./email-message-reports">
    查看电子邮件推广活动的投递、打开和点击率指标。
  </Card>

  <Card title="操作按钮" icon="hand-pointer" href="./action-buttons">
    为推送通知添加带有自定义 URL 的行动号召按钮。
  </Card>
</Columns>
