# 变更日志

> 查看 Android SDK 变更日志以追踪更新，包括移除平台聚合以及建议改用行业标准聚合适配器等信息。

## 14.8.0 (2026-06-17)##14.8.0-(2026-06-17)

* 改进了 Web 内容调试的稳定性。
* 增强的用户界面可改善最终用户体验。

## 14.7.0 (2026-03-18)##14.7.0-(2026-03-18)

* 内部优化。

## 14.6.0 (2025-11-20)##14.6.0-(2025-11-20)

* 内部改进。

## 14.5.0 (2025-10-10)##14.5.0-(2025-10-10)

* 向任务中添加了内联安装支持。
* 已弃用 TJActionRequest。
* 已将 Play 服务广告标识符更新为 18.2.0。
* 更新到 Kotlin 2.2.0。现在最低版本为 2.0.0。
* 已将目标 API 更新为 36。

## 14.4.0 (2025-06-03)##14.4.0-(2025-06-03)

* 已将 Gradle 升级到 8.9.1。

## 14.3.1 (2025-04-25)##14.3.1-(2025-04-25)

* 修复了请求中包含超过 2 字节的 Unicode 字符时出现的问题。这些字符包括中文、韩语、日语和其他语言中常见的字符。

## 14.3.0 (2025-04-07)##14.3.0-(2025-04-07)

* 日志记录改进：
  * 已弃用 `Tapjoy.setDebugEnabled` 并将其替换为 `Tapjoy.setLoggingLevel(TJLogLevel.Debug)`。
  * 已弃用 `TapjoyConnectFlag.ENABLE_LOGGING` 并将其替换为 `TapjoyConnectFlag.TJC_OPTION_LOGGING_LEVEL`。
  * 日志级别为：Error（错误）、Warning（警告）、Info（信息）和 Debug（调试）。
* 向 `OptOutAdvertisingId` 添加了 getter。
* 将 UnityAds 添加到 EasyApp。
* 向 EasyApp 添加了购买和货币值输入。
* 向 EasyApp UI 添加了 OptOutAdvertisingId 切换开关。

## 14.2.1 (2024-12-09)##14.2.1-(2024-12-09)

* 版本号提升。

## 14.2.0 (2024-12-04)##14.2.0-(2024-12-04)

* 已将 Kotlin 更新到 v1.9.25。
* 已弃用 TJPlacement onClick 监听器。
* 目标 API 更新为 35。
* 已弃用 getSupportUrl。
* 修复了 Android 15 上的 EasyApp UI 问题。
* 禁用了预测性返回手势。
* 在 EasyApp 中禁用自动连接后，现在可以添加和连接新的 SDK 密钥，而无需重新启动。

## 14.1.1 (2024-10-15)##14.1.1-(2024-10-15)

* 修复了连接后不会调用“AppLaunch”广告位的错误。

## 14.1.0 (2024-10-01)##14.1.0-(2024-10-01)

* 修复了 Android 15 上屏幕刘海/相机/状态栏会遮挡 UI 的问题。
* 修复了 TJEventOptimiser 导致的 ANR 问题。
* 已将 Gradle 插件更新到 8.6.1。
* 更新了 EasyApp 依赖关系。
* 更新了 EasyApp 以使用 AAR。
* 已弃用 PPE。
* 已将 play-services-ads-identifier 更新为 18.1.0。
* 已将 play-services-appset 更新为 16.1.0。
* 修复了使用 Plugin（插件）复选框启用 Offerwall Discover 时偶尔崩溃的问题。
* C++：添加了对 16k 页面文件的支持。

### 已知问题##known-issues

* 有一个错误会阻止在连接后自动调用“AppLaunch”广告位。
* 更新到 14.1.1，其中包含对此问题的修复。

## 14.0.1 (2024-07-16)##14.0.1-(2024-07-16)

* 版本号提升以匹配 iOS。

### 已知问题##known-issues

* 有一个错误会阻止在连接后自动调用“AppLaunch”广告位。
* 更新到 14.1.1，其中包含对此问题的修复。

## 14.0.0 (2024-07-01)##14.0.0-(2024-07-01)

* 修复了 Offerwall 有时在 Android 8.0 设备上无法打开的问题。
* 添加了清除用户值的功能。
* 添加了 User Level getter `Tapjoy.getUserLevel()`。
* 添加了 UserId getter `Tapjoy.getUserId()`。
* 移除了 DISABLE\_ANDROID\_ID\_AS\_ANALYTICS\_ID 连接标志。
* 移除了已弃用的推送通知接口。
* 移除了已弃用的 limitedConnect 和广告位接口。
* 移除了已弃用的 UserCohortVariables 接口。
* 移除了已弃用的 InstallReferrer 接口。
* 移除了已弃用的 CustomEvents 接口。
* 移除了已弃用的 PrivacyPolicy 接口。
* 移除了已弃用的 UserFriendCount 接口。
* 移除了已弃用的聚合/广告竞价日期接口。
* 移除了 store\_name 连接标志。
* 移除了已弃用的 setUserId 接口。
* 移除了已弃用的 connectFailure 回调。
* 移除了 TJConnectActivity。
* 已弃用 setGLSurfaceView。此方法不再起任何作用。
* 已弃用 setActivity。此方法不再起任何作用。

### 已知问题##known-issues

* 有一个错误会阻止在连接后自动调用“AppLaunch”广告位。
* 更新到 14.1.1，其中包含对此问题的修复。

## 13.4.1 (2024-03-19)##13.4.1-(2024-03-19)

* 版本号提升以匹配 iOS。

## 13.4.0 (2024-03-04)##13.4.0-(2024-03-04)

* 添加了 `connectWarning` 回调。
* 添加了 Kotlin 示例应用
* 向 SDK 添加了 `kotlin-stdlib` 依赖项
* 更新到 Java 11（仅限原生版本）。
* 移除了推送通知。
* 移除了安装来源参数。

## 13.3.0 (2023-11-30)##13.3.0-(2023-11-30)

* Tapjoy.connect 现在会在 API 23 或更低级别立即失败。MinSdk 保持为 API 21 以用于编译。
* 已弃用“DISABLE\_ANDROID\_ID\_AS\_ANALYTICS\_ID”连接标志。
* 不再发送 Friend Count（好友数量）数据。API 在 13.2.0 中已弃用，并将在 14.0.0 中移除。
* 不再发送 User Cohort Variable（用户群组变量）数据。API 在 13.2.0 中已弃用，并将在 14.0.0 中移除。
* 错误修复和改进。

## 13.2.1 (2023-10-05)##13.2.1-(2023-10-05)

* 版本号提升以匹配 iOS。

## 13.2.0 (2023-09-27)##13.2.0-(2023-09-27)

* 移除了对 Android 4.x 的支持。现在最低 API 级别为 21。
* 更新到 Gradle 8。
* 改进了支出/获得货币的方法。
* 现在将在连接失败回调中返回错误消息。已弃用不带参数的回调。
* 新增用于设置最大用户等级的 API。
* 新增用于设置用户细分段的 API。
* 新增用于设置货币余额的 API（仅限自管货币）。
* 新增用于设置货币需求的 API。
* 新增用于设置广告位入口点的 API。
* 向 C++ 接口添加了连接标志。
* 向 C++ 接口添加了 TJStatus。
* 已弃用聚合和视频方法/回调。
* 已弃用推送通知。
* 已弃用 limitedConnect。
* 错误修复。

## 13.1.2 (2023-07-14)##13.1.2-(2023-07-14)

* 修复了与 PrivacyPolicy 值相关的崩溃。
* 错误修复。

## 13.1.1 (2023-06-30)##13.1.1-(2023-06-30)

* 修复了连接时可能发生的与设置 userId 相关的崩溃。

## 13.1.0 (2023-06-28)##13.1.0-(2023-06-28)

* Gradle 更新到 7.5。
* 已将目标 API 更新为 33。
* 添加了 Tapjoy 托管货币回调的错误消息。
* 修复了抛出的 NullPointerException。
* 修复了在 onContentDismiss 内调用 requestContent 时 onContentDismiss 触发两次的问题。
* 更新了[隐私政策](/grow/offerwall/android/advanced/user-privacy.md)界面。
* 向 EasyApp UI 添加了隐私政策设置。
* 修复了在 Android 6 和 7 上观看视频后发生崩溃的问题。
* 修复了广告位崩溃 CalledFromWrongThreadException。

## 13.0.1 (2023-04-18)##13.0.1-(2023-04-18)

* 错误修复。

## 13.0.0 (2023-04-06)##13.0.0-(2023-04-06)

* 使用 logcat 获取新的“测试设备 ID”。
* 改进了 EasyApp。
* 移除了已弃用的隐私接口 - 改用 TJPrivacyPolicy。
* 移除了已弃用的显示乘数接口。
* 移除了已弃用的 AppDataVersion 接口。
* 修复了透明状态栏错误。
* 修复了 WebView 内存泄漏。
* 其他错误修复和性能改进。

## 12.11.1 (2022-12-01)##12.11.1-(2022-12-01)

* 修复了 Android Studio Dolphin 中的 EasyApp 问题。
* 更新了 EasyApp 的 Gradle 版本。
* 性能改进。

## 12.11.0 (2022-10-07)##12.11.0-(2022-10-07)

* 修复了在 Connect 之前调用 optOutAdvertisingID 则无法获取 advertisingID 的错误。
* 移除了 JCenter，并酌情将其替换为 MavenCentral。
* 更新到目标 API 32。

## 12.10.0 (2022-05-03)##12.10.0-(2022-05-03)

* 已弃用 setUserID 方法，改用 setUserId(id, listener)。
* 在 Android 12 上支持推送通知。
* 从 SDK 中移除了对 Push to Earn 的支持。
* 添加了对于在网络请求中启用/禁用 Android advertising\_id 参数的支持。

## 12.9.1 (2022-03-01)##12.9.1-(2022-03-01)

* SDK 在 Android 12 及更高版本中使用 PendingIntent `FLAG_IMMUTABLE`。这样就解决了 Android 12 设备上与推送通知相关的潜在崩溃以及 Play 应用商店警告。
* 在 Android 12 设备上尚不支持推送通知。
* 移除了 `setGcmSender` API。
* 已将 `play-services-ads` 依赖项更新为 18.0.0。
* 移除了 `play-services-ads` 的严格版本要求。

## 12.9.0 (2022-01-13)##12.9.0-(2022-01-13)

* 已将 `play-services-ads` 依赖项更新为 17.1.0（支持的最低版本为 15.0.0）。版本 17.1.0 包含对于 Google Play 家庭计划中的应用来说应该[移除](/grow/offerwall/android/introduction/quickstart.md)的 `AD_ID` 权限。
* 在 SDK 请求中添加了更多参数
* SDK 不再收集 MAC 地址。
* 为 EasyApp 中的启动活动添加了 `android:exported` 属性以支持 API 31。
* 使用 API 31 和 AndroidX 进行构建。

## 12.8.1 (2021-05-25)##12.8.1-(2021-05-25)

* 更新了 EasyApp 示例应用程序项目（面向 API 30 且 Play 服务依赖项已更新为 17.0.0）
* play-services-ads-identifier:17.0.0 现已成为 SDK 的 maven 依赖项
* 现已使用 Android API 30 构建 SDK
* 在 SDK 请求中添加了更多参数
* 错误修复和增强功能

## 12.8.0 (2021-03-16)##12.8.0-(2021-03-16)

* [已从 Bintray 迁移到 Tapjoy 托管 SDK](/grow/offerwall/android/introduction/update-guide.md)（不再通过 Bintray 分发 Offerwall SDK）
* 添加了对[手动 AAR 集成](/grow/offerwall/android/introduction/manual-integration.md)的支持
* [移除了 play services ads 8.3.0](/grow/offerwall/android/introduction/manual-integration.md) 参考（需要手动包含 Play 服务）
* 错误修复和增强功能

## 12.7.1 (2020-11-02)##12.7.1-(2020-11-02)

* 已迁移 InstallReferrer API
* 修复了重复的 onContentDismiss 回调

## 12.7.0 (2020-09-16)##12.7.0-(2020-09-16)

* 在 SDK 请求中添加了更多参数
* 错误修复和增强功能

## 12.6.1 (2020-07-09)##12.6.1-(2020-07-09)

* Tapjoy 广告单元生命周期状态的一些代码进行了重构

## 12.6.0 (2020-06-29)##12.6.0-(2020-06-29)

* 此版本提供了相关功能来帮助发行商遵守《加州消费者隐私法案》(CCPA)。每个平台（iOS、Android、Unity、C++）都有一个新的类“TJPrivacyPolicy”，此类可用于管理所有隐私标志（GDPR、用户同意、低于同意年龄和美国隐私）。

如果从旧版 Offerwall SDK 进行更新并使用旧方法设置了隐私值，新版 SDK 仍会读取先前设置的值，无需您再次手动设置这些值。但是，建议您彻底迁移代码，以便使用新的方法。

* 添加了新的 TJPrivacyPolicy 类以集中处理 GDPR、US Privacy（美国隐私）、Consent（同意）和 Under Consent Age（低于同意年龄）。
  已弃用旧的 GDPR、User Consent 和 Under Consent Age API

## 12.4.2 (2020-02-07)##12.4.2-(2020-02-07)

* 移除与自定义安装归因协议相关的旧功能
* 错误修复

## 12.4.1 (2020-01-07)##12.4.1-(2020-01-07)

* 移除与自定义安装归因协议相关的旧功能
* 视频 UI 更改。
* 错误修复

## 12.4.0 (2019-12-04)##12.4.0-(2019-12-04)

* 在货币回调中支持客户参数（未来产品版本）
* 错误修复

## 12.3.4 (2019-10-09)##12.3.4-(2019-10-09)

* 更新了 IAB Open Measurement SDK

## 12.3.3 (2019-09-20)##12.3.3-(2019-09-20)

* 移除了 MOAT SDK

## 12.3.2 (2019-09-16)##12.3.2-(2019-09-16)

* `DISABLE_ANDROID_ID_AS_ANALYTICS_ID` 连接标志现在默认开启
* 错误修复

## 12.3.1 (2019-06-06)##12.3.1-(2019-06-06)

* 更多视频广告效果增强

## 12.3.0 (2019-05-28)##12.3.0-(2019-05-28)

* 视频广告效果增强。
* 向 TJPlacementListener 添加了 onClick 回调。请注意，在后端服务器支持此回调之前，不会实际调用此回调。预计在 2019 年 6 月中旬左右开始提供这一支持。

```java title="Java"
public interface TJPlacementListener {
    public void onClick(TJPlacement placement);
}
```

* 错误修复。
* 从 .aar 中移除了不必要的 `ACCESS_WIFI_STATE` 权限。

## 12.2.1 (2019-03-14)##12.2.1-(2019-03-14)

* Tapjoy 将改变其使用持久 ID（例如 Android ID）的方式。通常，Tapjoy 会减少使用这类持久 ID。这些更改对大多数发行商而言是透明的，不需要更改任何代码。具体而言：
  * 对于广告，Tapjoy SDK 将尝试使用广告 ID（如果可用）。如果广告 ID 和 MAC 地址（如果允许）不可用，Tapjoy SDK 的旧版本将传递 Android ID。从 SDK 12.2.1 开始，即使广告 ID 不可用，Tapjoy SDK 也不再为广告目的传递 Android ID 或 MAC 地址。
    * 如果发行商希望在广告 ID 不可用时发送 Android ID 以用于广告目的，他们可以使用 ALLOW\_LEGACY\_ID\_FALLBACK 连接标志来覆盖默认的 SDK 行为。
    * 如果发行商希望在广告 ID 不可用时发送 MAC 地址以用于广告目的，他们同样可以使用这个连接标志，并且还必须在清单中包含 ACCESS\_WIFI\_STATE 权限。
  * 对于分析，除非发行商使用 DISABLE\_ANDROID\_ID\_AS\_ANALYTICS\_ID 连接标志来明确退出，否则 Tapjoy SDK 仍会发送 Android ID。
  * 对于分析，Tapjoy SDK 不再使用 MAC 地址。
  * 如果发行商使用 Tapjoy 托管货币且未设置发行商用户 ID，那么对于没有广告 ID 的用户，如果不再发送 Android ID，这些用户可能面临货币余额丢失的风险。对于使用 Tapjoy 托管货币且未设置发行商用户 ID 的发行商，建议在更新到 12.2.1 后使用 ALLOW\_LEGACY\_ID\_FALLBACK 连接标志来确保发送某个 ID，这样他们的用户才不会丢失货币余额。此外，还建议他们设置发行商用户 ID，这样就不再依赖 Android ID 来追踪用户货币余额。
  * 已弃用 DISABLE\_PERSISTENT\_IDS 连接标志，因为 SDK 的默认行为是不将持久 ID 用于广告目的。
* 移除了未使用的代码，因此 SDK 比前一版本小了约 10%。
* 不再需要以下 Android 活动：

```xml
<activity android:name="com.tapjoy.mraid.view.ActionHandler"android:configChanges="orientation|keyboardHidden|screenSize" />
<activity android:name="com.tapjoy.mraid.view.Browser"android:configChanges="orientation|keyboardHidden|screenSize" />
```

错误修复：

* 修复了偶发性的“Fatal Exception: java.lang.RuntimeException: Package manager has died（致命异常：java.lang.RuntimeException：包管理器已停止工作）”崩溃
* 修复了 SDK 密钥为 null 时的崩溃问题
* 修复了 `AppMonitor.getVisibleActivity()` 方法中使用的线程安全机制不足引起的 java.util.ConcurrentModificationException 异常

## 12.2.0 (2018-11-13)##12.2.0-(2018-11-13)

此版本添加了“user is below consent age（用户低于同意年龄）”标志，可帮助发行商进行用户群变现，同时确保符合 COPPA 法规。请注意，发行商需要负责实现此功能；当 Offerwall SDK 集成到应用程序中时，不会自动实现此功能。发行商还需负责在整体上遵守 COPPA 和其他适用的法律法规。

美国儿童网络隐私保护法 (COPPA) 对 (a) 明知连接的用户是 13 周岁以下儿童或 (b) 运营服务（包括应用）面向 13 岁以下儿童的在线服务运营商提出了特定要求。

同样，GDPR 对低于当地规定最低在线同意年龄（每个成员州规定为 13 至 16 周岁不等）的数据主体提出了特定要求。

对于不面向 13 周岁以下儿童但已知用户中仍有少数低于规定最低年龄的应用程序，请使用以下方法访问 Tapjoy 的变现功能。此方法会将 Tapjoy 的 ad\_tracking\_enabled 设置为 false，因此仅向用户展示内容相关广告。对于此用户，不会执行广告追踪。

`public static void belowConsentAge(boolean isBelowConsentAge);`

如果设置为 TRUE，意味着 Offerwall SDK 会将用户视为其设置中的“Opt Out of Ads Personalization（拒绝个性化广告）”开关已开启。这意味着用户仍然会看到 Tapjoy 广告，但不会根据用户行为定向投放广告，Tapjoy 也不会追踪用户的广告行为。

错误修复：

* 修复了偶发性的 `Fatal Exception: java.lang.NullPointerException` 崩溃。

## 12.1.0 (2018-10-11)##12.1.0-(2018-10-11)

* SDK 现支持 Firebase Cloud Messaging (FCM)。使用旧版 Google Cloud Messaging (GCM) 系统的应用应更新到 FCM，因为 FCM 最终将成为 Android 系统的强制要求。如需了解 FCM 与 Tapjoy 结合使用的说明，请参阅 Android 发行商入门指南。

* 已将 SharedPreferences.commit 的几个实例替换为 SharedPreferences.apply 以解决一个罕见的崩溃问题。

* 修复了以下与方向相关的问题：当广告内容仅支持单一方向（纵向或横向）时，在广告开始播放后，如果旋转设备，该广告可能会被强制切换到另一个方向。

* 更新了错误弹窗的 UI。

## 12.0.0 (2018-06-26)##12.0.0-(2018-06-26)

此版本与 Android 9“Pie”兼容。

* 已将 IAB Open Measurement SDK 集成到 Offerwall SDK 中。发行商无需执行任何其他操作或更改任何代码。
* 现在支持的最低 Android 版本是 API 级别 14/Android 4.0/Ice Cream Sandwich。
* 此 SDK 内置了对程序化聚合的支持。稍后将发布服务器和后台对程序化聚合的支持。
* 修复了目标设备为 Android O 设备时的推送通知。

## 11.12.2 (2018-05-18)##11.12.2-(2018-05-18)

此版本提供了相关功能来帮助发行商遵守《一般数据保护条例》(GDPR)。每个平台（iOS、Android、Unity、AIR）都新增了两个函数。Tapjoy 基于“合法权益”原则遵循 GDPR 的规定，因此以下函数并不是必需的函数。但是，我们仍为那些希望将同意信息传递给 Tapjoy 的发行商提供这些函数。如果发行商实现了这些函数且用户选择不同意，则 Tapjoy 将向该用户提供非兴趣导向内容。

这些函数可在应用程序调用 Tapjoy Connect 函数之前调用，且应该在应用程序向 Tapjoy 请求任何内容之前调用：

一个是 setUserConsent 函数，接受“0”（用户不同意）、“1”（用户同意）或更详细的同意字符串。这条更详细的字符串是指 IAB 制定的“透明度和同意框架”中所述的同意字符串。
有一个可选的“受 GDPR 约束”标志，可设置为 YES/TRUE（如果用户受 GDPR 规则约束）或 NO/FALSE（如果用户不受 GDPR 规则约束）。仅当应用程序本身已判定 GDPR 是否适用于用户后，才应调用此函数。 如果未调用此函数，Tapjoy 会认为应用程序尚未进行此类判断，因此 Tapjoy 会自行判定 GDPR 适用性。

### GDPR 常见问题解答##gdpr-faq

**If a user does not consent or withdraws existing consent, will the Offerwall SDK still send advertising identifiers to Tapjoy?:**是的。上面列出的函数专为基于兴趣的广告而设计，这些函数会将基于兴趣的广告的用户同意状态发送给 Tapjoy。因此，同意状态不会禁止 Offerwall SDK 在 SDK 初始化时或广告请求期间发送广告标识符。Tapjoy 的合规法律依据是“合法权益”。但是，发行商的合规法律依据以及他们对广告主标识符收集的要求可能与 Tapjoy 的不同。是否应初始化 Offerwall SDK，由应用程序根据自身的合规性需求决定。例如，如果应用程序收集广告标识符的合法依据是用户同意，那么在用户尚未同意的情况下，不应为这类用户初始化 Offerwall SDK。**If a user from a country that is not covered by GDPR does not consent or withdraws consent, would Tapjoy limit advertising to non-interest-based ads for such a user?:**Offerwall SDK 可灵活处理不同类型的应用程序，包括无法使用应用内方法来判定用户是否受 GDPR 约束的应用程序。
因此，如果应用程序不进行此类判断，例如，未调用 subjectToGDPR 函数，则会由 Tapjoy 服务器判定用户是否受 GDPR 约束。然后，Tapjoy 仅在广告请求被其判定来自受 GDPR 约束的用户时，才会遵循用户的同意偏好设置。
如果希望让所有国家/地区的用户都能够像受 GDPR 约束一样撤回同意，可以通过为所有未同意的用户调用 subjectToGDPR 方法并传入 TRUE 值来实现。在这种情况下，Tapjoy 的服务器将依据 subjectToGDPR 方法调用中指定的内容执行，而不会自行判定用户是否受 GDPR 约束。发行商也可联系 [support@tapjoy.com](mailto:support@tapjoy.com)，请求 Tapjoy 遵循其应用程序内所有用户的同意偏好设置，无论这些用户是否受 GDPR 约束。

```java title="Java"
新增：
public static void setUserConsent(String value);
示例：
Tapjoy.setUserConsent("1"); // user does consent
public static void subjectToGDPR(boolean gdprApplicable);
示例：
Tapjoy.subjectToGDPR(true); // This user is subject to GDP
```

## 11.12.1 (2018-04-30)##11.12.1-(2018-04-30)

* 仅内部更改和修复，无新增功能

## 11.12.0 (2018-03-29)##11.12.0-(2018-03-29)

* Tapjoy SDK 将不再触发以下权限：

```xml
ACCESS_FINE_LOCATION
ACCESS_COARSE_LOCATION
WRITE_EXTERNAL_STORAGE
```

* 移除了已弃用的“Tapjoy 平台聚合”功能。这是一种特殊形式的聚合，Tapjoy 已有将近一年不再提供支持。如果您仍在使用平台聚合，请不要更新到此 SDK 版本，建议切换到行业标准适配器聚合。常规适配器聚合功能（例如 Mopub、ironSource、Fyber、Appodeal 和其他聚合平台提供的视频和插页式广告聚合）不受此更改的影响。
* 移除了从缓存播放 Tapjoy 视频内容且没有网络连接时显示的不当的错误消息。
* 修复了从 Tapjoy 内容返回后 Offerwall 或应用程序会以不正确的方向显示的问题。
