> ## 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 的平台专属分段。

使用应用内消息通知旧版本应用的用户有更新可用，并提示他们安装。本教程将介绍如何为 iOS 和 Android 创建平台专属的分段和消息。

## 要求

* OneSignal SDK v5 或更高版本

## 设置

**示例场景**：我们应用程序的最新版本是 `1.0.1`。我们希望通过应用内消息针对使用 `1.0.0` 及更旧版本的用户，提示他们更新。

### 1. 获取您的最新应用版本

OneSignal 根据以下内容检测 `App Version`：

**iOS**：在 Xcode **您的主应用目标 > 通用 > 标识** 中找到的 `Version`

<Frame caption="iOS 应用版本在 Xcode 中的位置">
  <img src="https://mintcdn.com/onesignal/FXJz6yFfOqztaEND/images/mobile/ios-version.png?fit=max&auto=format&n=FXJz6yFfOqztaEND&q=85&s=4c6582a16d72787f02bce216ff5cd1c4" alt="Xcode 项目设置中标识部分下的 Version 字段" width="2104" height="1294" data-path="images/mobile/ios-version.png" />
</Frame>

**Android**：在您的应用 `build.gradle` 文件中找到的 `versionCode`

<Frame caption="Android 应用版本在 build.gradle 中的位置">
  <img src="https://mintcdn.com/onesignal/FXJz6yFfOqztaEND/images/mobile/android-version.png?fit=max&auto=format&n=FXJz6yFfOqztaEND&q=85&s=ded4166d51b66edd8727904db655eee7" alt="Android build.gradle 文件中显示的 versionCode 字段" width="2302" height="1390" data-path="images/mobile/android-version.png" />
</Frame>

<Note>
  如果您无法访问 Xcode 和/或 Android Studio，请向您的开发人员询问这些值。
</Note>

<Warning>
  iOS 和 Android 使用不同的版本格式，且各平台的商店链接也不同。请分别为每个平台创建独立的分段和应用内消息。
</Warning>

### 2. 设置分段

您需要创建两个分段，一个用于 iOS，一个用于 Android。

**iOS**:

* 分段名称：`iOS App version less than 1.0.1`
* 过滤器：`App Version` `less than` `1.0.1` 且 `Device Type` 是 `iOS`。

<Frame caption="iOS 分段过滤器">
  <img src="https://mintcdn.com/onesignal/BIUS_wdfwITxcuxQ/images/segments/ios-appversion-segment.png?fit=max&auto=format&n=BIUS_wdfwITxcuxQ&q=85&s=4326713ed20081df29db2b30ce8a0033" alt="OneSignal 分段，包含 App Version less than 1.0.1 和 Device Type is iOS 过滤器" width="1300" height="620" data-path="images/segments/ios-appversion-segment.png" />
</Frame>

**Android**:

* 分段名称：`Android App version less than 10001`
* 过滤器：`App Version` `less than` `10001` 且 `Device Type` 是 `Android`。

<Frame caption="Android 分段过滤器">
  <img src="https://mintcdn.com/onesignal/BIUS_wdfwITxcuxQ/images/segments/android-appversion-segment.png?fit=max&auto=format&n=BIUS_wdfwITxcuxQ&q=85&s=7684e1d0ec956fe40fc1f46e2359f45b" alt="OneSignal 分段，包含 App Version less than 10001 和 Device Type is Android 过滤器" width="1302" height="628" data-path="images/segments/android-appversion-segment.png" />
</Frame>

### 3. 设置应用内消息

导航到 **Messages > In-App > New Message > New In-App**。

从预构建的设计 **New Feature Announcement** 开始，或从头开始创建您自己的。

<Frame caption="New Feature Announcement 模板">
  <img src="https://mintcdn.com/onesignal/yt4lRKoquAlWvRvF/images/iam/new-in-app-message-select.png?fit=max&auto=format&n=yt4lRKoquAlWvRvF&q=85&s=672e45bec1d7b137040c0e4cfda951a9" alt="OneSignal 应用内消息模板选择界面，显示 New Feature Announcement 选项" width="2310" height="1888" data-path="images/iam/new-in-app-message-select.png" />
</Frame>

为消息命名以反映这是针对 iOS 用户的。

#### 添加您的受众

选择特定分段 **iOS App version less than 1.0.1**。

#### 更新消息

根据需要更新消息内容。要将用户导航到您的应用商店列表，请向按钮或其他元素添加 [URL 点击操作](./iam-click-actions#url)。

<Frame caption="链接到应用商店列表的 URL 点击操作">
  <img src="https://mintcdn.com/onesignal/yt4lRKoquAlWvRvF/images/iam/url-click-action.png?fit=max&auto=format&n=yt4lRKoquAlWvRvF&q=85&s=c9895a060ca2edb109e395a232b920b5" alt="OneSignal 应用内消息编辑器，显示在按钮上配置的 URL 点击操作" width="1732" height="1164" data-path="images/iam/url-click-action.png" />
</Frame>

输入商店链接作为 URL：

* **iOS**: `https://apps.apple.com/app/idYOUR_APP_STORE_ID` — 参见 [Requesting App Store Reviews](https://developer.apple.com/documentation/storekit/requesting_app_store_reviews)
* **Android**: `https://play.google.com/store/apps/details?id=YOUR_PACKAGE_NAME` — 参见 [Linking to Google Play](https://developer.android.com/distribute/marketing-tools/linking-to-google-play.html)

### 4. 触发器

我们建议使用 **On app open** 触发器来确保在用户打开应用时显示消息。

### 5. 计划和频率

如果您将应用更新计划在将来某个时间，您可以计划消息在那时开始显示。

根据您希望更新提示的积极程度，您可以将"您希望多久显示一次此消息？"频率设置为：

* **Every time trigger conditions are satisfied** - 在此示例中意味着每次打开应用时都显示。
* **Multiple times** - 设置显示消息的总次数以及之间的延迟。例如，100 次，间隔 3 天。将每 3 天显示一次消息，最多 100 次。

### 6. 保存为草稿并为 Android 复制

点击 **Save as Draft** 按钮保存消息。

在 **In-App Messages** 页面中，点击刚保存的消息旁边的 **Options > Duplicate**。

为您的 Android 用户更新以下内容：

* IAM 名称以反映这是针对 Android 用户的
* 将分段设置为 **Android App version less than 10001**
* 将 URL 更新为 Android 商店链接
* 对消息进行任何额外更改以使其对 Android 用户独特

点击 **Save as Draft** 保存消息。

***

## 测试

在发布您的消息之前，我们建议使用以下步骤进行测试：

<Steps>
  <Step title="找到您的测试设备并设置为测试订阅">
    * 找到您的测试设备并将其设置为[测试订阅](./test-users)。
    * 确保测试设备使用的是应用的较低版本。
  </Step>

  <Step title="更新分段以包含 Test Users">
    * 打开您要测试的应用内消息。
    * 点击分段并为 **Test Users** 添加一个 **And** 过滤器。
      * 这将确保消息只对您的测试设备显示
    * 例如，如果您的测试设备是 iOS，分段将如下所示：
          <Frame caption="添加了 Test Users 过滤器的 iOS 分段">
            <img src="https://mintcdn.com/onesignal/BIUS_wdfwITxcuxQ/images/segments/ios-appversion-testusers-segment.png?fit=max&auto=format&n=BIUS_wdfwITxcuxQ&q=85&s=8ba7a6b64f91409ae8056408fd5dc941" alt="OneSignal 分段，包含 App Version、Device Type 和 Test Users 过滤器" width="1292" height="653" data-path="images/segments/ios-appversion-testusers-segment.png" />
          </Frame>
    * 点击 **Update Segment** 保存更改。
  </Step>

  <Step title="发布消息">
    * 点击 **Update Message** 以更新应用内消息。
    * 点击消息旁边的 **Options > Resume** 使其生效。
  </Step>

  <Step title="验证消息是否显示">
    * 在测试设备上关闭应用。
    * 等待 1 分钟。
    * 在测试设备上打开应用。
    * 如果满足以下条件，您应该会看到消息：
      * 设备是测试订阅
      * 设备使用的是应用的较低版本。
      * 分段设置为 **Test Users**。
  </Step>
</Steps>

***

## 上线检查清单

当您准备上线时：

* 更新分段以移除 `Test Users` 过滤器。
* 检查计划以确保设置了正确的日期和时间。
* 点击 **Update Message** 以更新应用内消息。

<Check>
  完成了！任何在旧版本上打开应用的用户都会收到应用更新的通知。

  过一段时间后返回应用内消息检查进度。您还可以通过[事件流](./event-streams)或第三方[集成](./integrations)获取应用内消息分析。
</Check>

***

## 常见问题

### OneSignal 是否会自动检测应用版本？

是的。OneSignal SDK 会自动将应用版本上报给 OneSignal。在 iOS 上，这是 Xcode 中的 `Version` 字段；在 Android 上，这是 `build.gradle` 文件中的 `versionCode`。

### 为什么 iOS 和 Android 需要分别创建消息？

iOS 和 Android 使用不同的版本格式（例如 `1.0.1` 与 `10001`），且各平台的商店链接也不同。分别创建分段和消息可确保为每个平台使用正确的版本过滤器和商店链接。

### 我可以用 Journeys 代替应用内触发器吗？

可以。您可以创建一个 Journey，针对相同的基于版本的分段，并将发送应用内消息作为其中一个步骤。这样您可以对时间安排和后续操作进行更多控制。

***

<Info>
  需要帮助？

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

  请包含以下信息：

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

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

<Columns cols={2}>
  <Card title="应用内点击操作" icon="hand-pointer" href="./iam-click-actions">
    在应用内消息元素上配置 URL、权限提示、标签、结果和自定义点击操作。
  </Card>

  <Card title="分段" icon="users" href="./segmentation">
    根据用户属性、行为和设备特征创建分段。
  </Card>
</Columns>
