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

# 应用内消息概览

> 开始使用 OneSignal 应用内消息：如何设置、设计、触发和测试应用内活动来有效地吸引您的移动用户。

<Frame caption="应用内消息示例">
  <img src="https://mintcdn.com/onesignal/yt4lRKoquAlWvRvF/images/iam/iam_marketing.jpg?fit=max&auto=format&n=yt4lRKoquAlWvRvF&q=85&s=4e09e43dc57956f4c33ad761f403aea5" width="1280" height="720" data-path="images/iam/iam_marketing.jpg" />
</Frame>

应用内消息 (IAM) 是在您的移动应用内显示的可自定义、有针对性的消息。它们使您能够：

* 提示用户操作，如订阅推送通知或更新他们的位置。
* 向目标用户推广新功能或未充分利用的功能。
* 实时显示公告和新闻，无需发布应用更新。
* 创建调查和轮播。
* 帮助进行引导和教育内容。

***

## 应用内设置

您必须在应用中安装 OneSignal SDK 才能使用应用内消息。完成后，您可以从 OneSignal 仪表板创建和发送应用内消息，无需编写任何代码。我们的 SDK 还具有用于高级用例的方法，如：

* 在特定时间触发消息
* 点击处理和深度链接
* 暂停消息
* 生命周期管理等等！

<Columns cols={2}>
  <Card title="移动端 SDK 设置" href="./mobile-sdk-setup" arrow={true}>
    将 OneSignal 添加到您的移动应用代码库中。
  </Card>

  <Card title="应用内消息 SDK 方法" href="./mobile-sdk-reference#in-app-messages" arrow={true}>
    开发者：访问触发器、点击处理器和生命周期 API。
  </Card>

  <Card title="应用内触发器" href="./iam-triggers" arrow={true}>
    基于用户行为或应用活动控制消息何时出现。
  </Card>

  <Card title="应用内点击操作" href="./iam-click-actions" arrow={true}>
    定义用户与您的消息交互时会发生什么。
  </Card>
</Columns>

***

## 发送应用内消息

您可以从 OneSignal 仪表板和历程中发送应用内消息。

<div style={{ display: 'flex', justifyContent: 'center', margin: '2rem 0' }}>
  <iframe width="560" height="315" src="https://www.youtube.com/embed/TSkqp4e-ya0?si=vbNStROmopkSWxWd" title="YouTube 视频播放器" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen />
</div>

<Columns cols={2}>
  <Card title="仪表板" icon="window-maximize" href="#send-from-the-dashboard">
    从 OneSignal 仪表板撰写并发送应用内消息。
  </Card>

  <Card title="Journeys" icon="route" href="./journeys-overview">
    构建自动化的多步骤和多渠道流程。
  </Card>
</Columns>

### 从仪表板发送

<Steps>
  <Step title="选择消息渠道" icon="window-maximize">
    选择 **创建...** 然后选择您的消息渠道。您也可以导航到 **消息** 或 **模板** 查看以前的消息。

    <Frame caption="在 OneSignal 仪表板中创建新消息。">
      <img src="https://mintcdn.com/onesignal/UDk6E5NjA3sdGdRN/images/dashboard/create-message.png?fit=max&auto=format&n=UDk6E5NjA3sdGdRN&q=85&s=97504cf71555ac4aeb263a36ad2d28b3" alt="OneSignal dashboard showing create message options" width="2128" height="1374" data-path="images/dashboard/create-message.png" />
    </Frame>
  </Step>

  <Step title="选择编写方法" icon="pencil">
    * 使用[块编辑器](./design-your-in-app-message)或 [HTML 编辑器](./design-your-in-app-message-with-html)从头开始
    * 使用预构建的[模板](./templates)
  </Step>

  <Step title="设置名称和标签" icon="tag">
    添加用于跟踪和报告的内部元数据。API 对应字段：`name`
  </Step>

  <Step title="选择您的受众" icon="users">
    选择哪些用户接收消息。您可以包含和排除[细分](./segmentation)以定位特定群体。如果未设置细分，默认为所有“已订阅用户”。

    <Frame caption="仪表板中的名称、标签和受众细分选择。">
      <img src="https://mintcdn.com/onesignal/ciRrThfP6xMpI7GY/images/dashboard/message-name-label-audience.png?fit=max&auto=format&n=ciRrThfP6xMpI7GY&q=85&s=1f41b0e42d31211b1c1badf87ba84056" alt="Dashboard fields for message name, label, and audience segment selection" width="1650" height="518" data-path="images/dashboard/message-name-label-audience.png" />
    </Frame>

    <Note>
      应用内消息将传递给细分中的所有[移动订阅](./subscriptions)，无论推送选择加入状态如何。但是，如果您的消息包含推送提示[点击操作](#click-actions)，它将不会显示给已订阅（已选择加入）的移动订阅。
    </Note>
  </Step>
</Steps>

### 消息设计

使用我们的可视化拖放编辑器或 HTML 编辑器以获得更多控制。

<Frame caption="Editing screen">
  <img src="https://mintcdn.com/onesignal/56ctKxZSV4m5VEkn/images/docs/b7df349-Screenshot_2022-12-10_at_12.52.59_PM.png?fit=max&auto=format&n=56ctKxZSV4m5VEkn&q=85&s=4930228c3107db798dadc1bf69b4b0d6" width="2134" height="1736" data-path="images/docs/b7df349-Screenshot_2022-12-10_at_12.52.59_PM.png" />
</Frame>

<Columns cols={2}>
  <Card title="拖放设计" href="./design-your-in-app-message" arrow={true}>
    使用我们的可视化编辑器快速构建消息。
  </Card>

  <Card title="HTML 设计" href="./design-your-in-app-message-with-html" arrow={true}>
    为开发者提供完全控制来自定义消息。
  </Card>

  <Card title="预构建 HTML 模板" href="./in-app-html-templates" arrow={true}>
    从经过测试的布局和活动开始。
  </Card>

  <Card title="HTML 应用内 JavaScript API" href="./in-app-message-api" arrow={true}>
    Add OneSignal's click actions to your HTML messages.
  </Card>

  <Card title="消息个性化" href="./message-personalization" arrow={true}>
    添加动态内容以为每个用户个性化消息。
  </Card>

  <Card title="多语言消息" href="./multi-language-messaging" arrow={true}>
    为全球受众本地化您的内容。
  </Card>
</Columns>

### 点击操作

自定义用户点击消息中元素时发生的事情。

<Frame caption="Click action options">
  <img src="https://mintcdn.com/onesignal/yt4lRKoquAlWvRvF/images/iam/click_action_dropdown.png?fit=max&auto=format&n=yt4lRKoquAlWvRvF&q=85&s=4edea63fce3704ec2c343eacfc77f248" width="518" height="525" data-path="images/iam/click_action_dropdown.png" />
</Frame>

<Columns cols={2}>
  <Card title="点击操作" href="./iam-click-actions" arrow={true}>
    自定义用户点击消息中元素时发生的事情。
  </Card>

  <Card title="事件流" href="./event-streams" arrow={true}>
    跟踪与消息的交互。
  </Card>

  <Card title="SDK 点击处理程序" href="./mobile-sdk-reference#addclicklistener-in-app" arrow={true}>
    使用我们的移动 SDK 响应点击事件。
  </Card>

  <Card title="深度链接" href="./deep-linking" arrow={true}>
    在点击时导航用户。
  </Card>
</Columns>

### 触发器

定义消息在应用会话期间何时出现。

<Frame caption="Trigger setup">
  <img src="https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/5578ae6-image.png?fit=max&auto=format&n=jFWn5xzleD8du3j6&q=85&s=d70aa26e6fa87244d4fa8f4527d9b449" width="1766" height="884" data-path="images/docs/5578ae6-image.png" />
</Frame>

Four trigger types:

<Columns col={2}>
  <Card title="应用打开时">
    用户启动应用时触发。
  </Card>

  <Card title="会话持续时间">
    Delay X seconds after app open.
  </Card>

  <Card title="从上次消息以来">
    Delay X time after last in-app message.
  </Card>

  <Card title="自定义触发器" href="./iam-triggers" arrow={true}>
    Controlled via SDK `addTrigger(s)`.
  </Card>
</Columns>

#### 此消息何时应该被取消？

Messages can dismiss:

* On user interaction (click, swipe)
* 设定时间后（自动取消）

<Frame caption="Auto-dismiss after 90 seconds">
  <img src="https://mintcdn.com/onesignal/tc0EvmtSSX56SX0c/images/docs/8dcc001876557819348b804906ed63aee17d83bce300e63e91cc11c54eface2f-Screenshot_2025-04-08_at_2.00.07_PM.png?fit=max&auto=format&n=tc0EvmtSSX56SX0c&q=85&s=59d61042bc7d3e1855e4c90f9a83e562" width="1342" height="530" data-path="images/docs/8dcc001876557819348b804906ed63aee17d83bce300e63e91cc11c54eface2f-Screenshot_2025-04-08_at_2.00.07_PM.png" />
</Frame>

### 计划和频率

* **开始显示**：消息符合条件时
* **Stop Showing**: Set end date/time or "Show forever"

#### 您希望多久显示一次此消息？

* **Only once** (default)
* **Every time** triggers are met
* **Multiple times** with custom repeat logic:

Examples:

* Show **2 times** with **1 hour** gap
* Show **12 times** with **30 days** gap

<Frame caption="示例将每 30 天显示消息总共 12 次。">
  <img src="https://mintcdn.com/onesignal/Z6xkXGfmy814If53/images/docs/e66d013-Screenshot_2022-12-10_at_1.27.10_PM.png?fit=max&auto=format&n=Z6xkXGfmy814If53&q=85&s=0cfe8f5e92ea5d02aa5ae3c659b5538c" width="2100" height="756" data-path="images/docs/e66d013-Screenshot_2022-12-10_at_1.27.10_PM.png" />
</Frame>

***

## 应用内消息如何显示

应用内消息不是主动推送的。相反，它们在应用启动时根据受众被拉取。然后根据触发逻辑显示。

<Frame caption="In-app message display logic flow">
  <img src="https://mintcdn.com/onesignal/Z6xkXGfmy814If53/images/docs/e1ce302cd1350e6c9e5616937a8068329fe61619884cd62889cd1772fd29999d-1c688b0-lifecycle-of-an-in-app.png?fit=max&auto=format&n=Z6xkXGfmy814If53&q=85&s=7a7552973b2746cd2ffa36137e743675" width="2036" height="815" data-path="images/docs/e1ce302cd1350e6c9e5616937a8068329fe61619884cd62889cd1772fd29999d-1c688b0-lifecycle-of-an-in-app.png" />
</Frame>

消息将显示如果：

1. 用户在 **新会话** 开始 *之前* 符合受众标准。

* A **new session** starts when the user opens your app after it has been in the background or closed for at least 30 seconds.
* 如果用户在消息上线时打开了应用或在同一会话期间进入细分，他们需要将应用失去焦点（关闭或后台）至少 30 秒才有资格看到消息。

2. 触发条件得到满足。
3. 计划的时间和频率有效。

如果细分标准在会话中期发生变化，用户必须重新打开应用才能看到消息。

### 测试

While testing, it is recommended to do the following:

<Steps>
  <Step title="在应用中添加详细日志记录">
    Add our [`setLogLevel` method to `Verbose`](./mobile-sdk-reference#setloglevel) in your app to get more detailed logs.
  </Step>

  <Step title="确保您的订阅在细分中">
    如上所述在[应用内消息如何显示](#how-in-app-messages-are-shown)中，用户必须在 **新会话开始之前** 符合受众标准。

    * See [Find Devices & Set Test Users](./test-users) if you don't know your device's Subscription ID.
    * 确保您设备的订阅在包含的细分中，如果使用的话，不在排除的细分中。
    * **提示**：您可以将您的设备添加为测试订阅，并创建或更新细分以包含 **测试用户** 筛选器。
  </Step>

  <Step title="确保应用关闭或失去焦点至少 30 秒">
    这将确保您正在打开应用以创建新会话并符合接收消息的条件。
  </Step>

  <Step title="检查触发条件">
    确保您满足消息显示的[触发器](#triggers)。
  </Step>

  <Step title="检查计划和频率">
    * Make sure the "Start showing" and "Stop showing" dates are set correctly.
    * 在测试时将[“您希望多久显示一次此消息？”](#schedule-%26-frequency)设置为“每次触发条件得到满足时”。
  </Step>

  <Step title="更新消息并确保其处于活动状态">
    * 一旦消息处于活动状态，您可以在设备上打开应用。
    * 您应该根据您的触发条件看到消息显示。
  </Step>
</Steps>

#### Test & Preview button

使用 **测试和预览** 按钮将向您选择的测试设备发送推送通知。当您点击推送打开应用时，应用内消息将显示。要使用此功能，您必须：

* 确保您的设备是[测试用户](./test-users)。
* 推送通知 **仅用于测试目的**。当消息正式上线时不会发送推送。
* 您可以打开应用并发送“测试消息”。应用内消息将显示。
* 标签替换不适用于测试应用内消息。
* 如果您没有看到消息，请确保您已遵循[测试步骤](#testing)。

<Info>
  需要帮助？

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

  请包含以下信息：

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

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

***

## 教程和用例

<Columns cols={2}>
  <Card title="个性化应用内消息" href="./personalization-properties-and-tags" arrow={true}>
    Step-by-step guide to personalize your in-app message with tags.
  </Card>

  <Card title="针对过时的应用版本" href="./app-version-update" arrow={true}>
    提示用户更新其应用。
  </Card>

  <Card title="应用商店评价提示" href="./example-app-store-review" arrow={true}>
    通过及时的评价请求提高您的评分。
  </Card>

  <Card title="创建用户调查" href="./example-create-a-survey" arrow={true}>
    在您的应用内收集反馈。
  </Card>

  <Card title="推送权限提示" href="./prompt-for-push-permissions" arrow={true}>
    Improve push opt-in rates.
  </Card>

  <Card title="位置权限提示" href="./location-opt-in-prompt" arrow={true}>
    请求用户启用位置跟踪。
  </Card>

  <Card title="创建教程" href="./example-create-a-tutorial" arrow={true}>
    设置教程来帮助用户了解您应用的新功能！
  </Card>
</Columns>

***

## 分析

跟踪消息性能和参与度。

<Columns cols={2}>
  <Card title="应用内消息报告" icon="chart-line" href="./in-app-message-reports">
    应用内消息的展示次数、点击次数、关闭次数和转化指标。
  </Card>

  <Card title="分析概述" icon="chart-bar" href="./analytics-overview">
    OneSignal 中所有可用的分析选项。
  </Card>

  <Card title="事件流" icon="signal-stream" href="./event-streams">
    实时将推送事件流式传输到您的数据仓库或 BI 工具。
  </Card>
</Columns>

***

## 常见问题

### 应用内消息需要推送通知权限吗？

不需要。应用内消息会发送至目标细分群体中的所有移动端订阅者，无论其推送订阅状态如何。它们在活跃会话期间显示在应用内。

### 为什么我的应用内消息没有显示？

最常见的原因是用户的会话未刷新。用户必须关闭或将应用切换到后台至少30秒，然后重新打开以开始新会话。还请验证用户是否在目标细分群体中，以及是否满足触发条件。完整清单请参见[测试](#testing)。

### 我可以通过 API 发送应用内消息吗？

您必须在 OneSignal 控制台中创建应用内消息。

您可以将应用内消息包含在 [Journeys](./journeys-overview) 中，并通过从 API 触发的[自定义事件](./custom-events)将用户加入 Journey。

### 应用内消息与推送通知有何不同？

应用内消息在用户主动使用应用时显示在应用内。推送通知显示在设备的通知栏中，即使应用关闭也可以触达用户。应用内消息不需要推送权限，在会话开始时拉取，而不是由服务器推送。

### 我可以在网页上使用应用内消息吗？

不可以。应用内消息仅适用于安装了 OneSignal 移动 SDK 的移动应用。对于网页，请考虑改用[网页推送通知](./web-push-setup)。
