# 发行说明

> 查看 Tapjoy Offerwall iOS SDK 变更日志以了解版本更新、错误修复和功能弃用情况。

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

* 增强的用户界面可改善最终用户体验。
* 将构建环境更新为 Xcode 26。

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

* 内部优化。

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

* 使用 Xcode 26.0 进行构建。
* 内部改进。

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

* 添加了对 iPadOS 窗口化模式的支持。
* 已弃用 TJActionRequest。
* 使用 Xcode 16.4 进行构建。

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

* 最低 iOS 版本增加到 iOS 13.0。
* 修复了与会话数据相关的崩溃。

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

* 修复了连接时可能崩溃的错误。

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

* 日志记录改进：
  * 已弃用 `[Tapjoy setDebugEnabled:YES]` 并将其替换为 `[Tapjoy setLoggingLevel:TJLoggerLevelDebug]`。
  * 已弃用 `TJC_OPTION_ENABLE_LOGGING` 并将其替换为 `TJC_OPTION_LOGGING_LEVEL`。
  * 日志级别为：Error（错误）、Warning（警告）、Info（信息）和 Debug（调试）。
* 向 EasyApp 添加了购买和货币值输入。

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

* 版本号提升。

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

* 向隐私清单添加了追踪域。
* 使用 Xcode 16.0 构建 SDK。
* 已弃用 TJPlacement didClick 回调。
* 已弃用 getSupportURL。
* 修复了 EasyApp (Objc) ATT 提示。
* 移除了对 iOS 10 + 11 的支持。

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

* 版本号提升以匹配 Android。

## 14.1.0 (2024-10-02)##14.1.0-(2024-10-02)

* 已弃用 PPE。
* 对 EasyApp 进行了小修复。
* 使用 Xcode 15.4 进行构建。

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

* 修复了动态框架签名问题。

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

* 向隐私清单添加了 NSPrivacyCollectedDataTypeEmailAddress。
* 添加了静态框架支持。Cocoapods 安装默认为静态。
* 添加了 getUserID getter `[Tapjoy getUserID]`。
* 修复了 iOS 17.4+ 上的 SKStoreProductViewController 展示问题。
* 清理了 C++ 头文件。
* 已弃用 userID 属性 `[[Tapjoy sharedTapjoyConnect] userID]`。改用 `[Tapjoy getUserID]`。
* 移除了已弃用的推送通知接口。
* 移除了已弃用的 limitedConnect/广告位接口。
* 移除了已弃用的 UserCohortVariables 接口。
* 移除了已弃用的 InstallReferrer 接口。
* 移除了已弃用的 CustomEvents 接口。
* 移除了已弃用的 PrivacyPolicy 接口。
* 移除了已弃用的 UserFriendCount 接口。
* 移除了已弃用的聚合/广告竞价日期接口。
* 移除了已弃用的 setUserId 接口。
* 移除了已弃用的 store 属性。
* 移除了已弃用的 analyticsApiKey 属性。
* 修复了 Swift EasyApp 不显示 ATT 提示的问题。
* 修复了在 Objective-C EasyApp 中连接之前按下“show offerwall（显示 Offerwall）”按钮时不会启用该按钮的问题。
* 修复了刘海屏设备在 EasyApp 中显示 Offerwall Discover 部分时存在的视觉问题。
* 修复了 Swift EasyApp 在恢复运行时调用 connect 的问题。

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

#### 证书到期##certificate-expiration

* 如果收到 Offerwall SDK 证书已到期的消息，可能需要清除缓存或更新到最新的 SDK 版本。如需了解更多信息，请参阅 [Monetization（变现）常见问题解答](/grow/offerwall/monetization/other/faq.md)。

##### Cocoapods##cocoapods

```text
pod cache clean TapjoySDK --all
```

##### Swift Package Manager##swift-package-manager

```text
rm -rf ~/Library/Caches/org.swift.swiftpm ~/Library/org.swift.swiftpm
```

##### 手动集成##manual-integration

1. 删除 .xcframework。
2. 从后台下载新副本。

#### 捆绑包无效##invalid-bundle

* Cocoapods Dynamic/Swift Package Manager 签名问题。由于捆绑包无效，构建将无法上传到应用商店。更新到 14.0.1 来解决问题。

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

* 修复了设置 AppLaunch 广告位用户 ID 时出现的错误。

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

* 添加了对 Swift Package Manager 的支持。
* 添加了 `onConnectWarning` 回调。
* 移除了推送通知。

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

* 添加了 PrivacyManifest，包括 Nutrition 标签和 Required Reason API。
* 使用 `Tapjoy, Inc.` 证书对 XCFramework 进行签名。
* 从静态框架更改为动态框架。
* 不再发送 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)

* 修复了 modulemap 警告。

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

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

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

* 版本号提升以匹配 Android。

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

* 版本号提升以匹配 Android。

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

* 添加了 Tapjoy 托管货币回调的错误消息。
* 向 C++ 接口添加了 `setUserID withCompletion` 方法。
* 更新了[隐私政策](/grow/offerwall/legal/privacy-policy.md)界面。
* 向 Swift EasyApp 添加了 Offerwall Discover UI。
* 向 EasyApp UI 添加了隐私政策设置。
* 修复了使用 C++ 接口传递 nil 广告位名称时出现的崩溃。
* 修复了在应用恢复运行时再次调用 connect 的问题。
* 修复了 iOS 12 及更低版本上新会话的 `EXC_BAD_ACCESS`。
* 修复了首次初始化货币时不会触发货币收入事件的问题。
* 内存使用情况改进和修复。
* `TJPrivacyPolicy usPrivacy` 现在成为公共属性，因此 Swift 中不再提供 `setUSPrivacy`。使用 `Tapjoy.getPrivacyPolicy().usPrivacy = privacyValue` 进行设置。

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

* 版本号提升以匹配 Android。

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

* Xcode 控制台中记录设备广告 ID。
* Xcode 控制台中记录新的“测试设备 ID”。
* 改进了 EasyApp。
* 新增 Swift EasyApp。
* 不再支持 iOS 9。
* 使用 Xcode 14.1 进行构建，不再支持 32 位设备。
* 移除了已弃用的隐私接口 - 改用 TJPrivacyPolicy。
* 移除了已弃用的显示乘数接口。
* 移除了已弃用的 AppDataVersion 接口。
* 修复了 didClick 回调。
* 修复了 WebView 内存泄漏。
* 错误修复。

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

* 修复了 EasyApp UI 的小问题。

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

* 从 podspec 和 EasyApp 中移除了 PassKit 依赖关系。
* 更新了 EasyApp UI 以支持刘海屏。
* 修复了 iOS 15.7 上的 sceneDisconnected appstore 崩溃。

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

* 已弃用 setUserId 方法，改用 setUserIdWithCompletion()。
* 错误修复。

## 12.9.1 (2022-03-16)##12.9.1-(2022-03-16)

* 未更改代码级别，仅更新了版本号以便与 Android 和 Unity SDK 保持一致。

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

* 执行了各种更改以改进 Swift 支持（包括空值标志和返回类型修复）。
  * 由于返回类型的明确说明，在 Swift 中实例化 TJPlacement 现在使用标准初始化方法 (`TJPlacement(...)`)，而不再使用工厂方法 (`TJPlacement.placement(...)`)。
* 在 SDK 请求中添加了更多参数
* 错误修复。
* 修复了在 EasyApp 中调用 ATT 提示时的问题。
* 使用 Xcode 13 进行构建。

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

* 支持 SKAdNetwork 2.2 和查看归因（适用于使用 Xcode 12.5 构建的应用）
* 支持 MRAID SKAdNetwork
* 在 SDK 请求中添加了更多参数
* 错误修复和增强功能

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

* [采用 XCFramework](/grow/offerwall/ios/introduction/update-guide.md) 分发 Offerwall SDK（至少需要 Xcode 版本 11）
* 移除了必须包含 TapjoyResources.bundle 的要求
* 现在支持的最低 iOS 版本是 iOS 9
* 支持在搭载 Apple Silicon 的 arm64 Mac 计算机上运行模拟器
* 向 EasyApp（下载 SDK 时捆绑的 Tapjoy 示例应用）添加了 AppTrackingTransparency 提示，供发行商参考实现方法
* 错误修复和增强功能

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

* 修复了与 SKAdNetwork 2.0 版相关的问题。
* 支持 iOS14 中的默认浏览器更改
* 错误修复和增强功能

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

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

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

* Offerwall SDK 资源捆绑包现在与 Unity 2019.3x 兼容

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

* 版本号提升以匹配 Android

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

* 在 setUserIDWithCompletion 参数周围添加了防护机制
* 应用商店的错误修复

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

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

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

* 支持 SceneDelegate
* 支持 UIAlertController 而非 UIAlertView

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

* 更新了 IAB Open Measurement SDK 以移除 UIWebView 用例

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

* 移除了 UIWebView 的用例
* iOS 13 支持
* 从 SDK 中移除了未使用的框架
* 错误修复

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

* 更多视频广告效果增强

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

* 视频广告效果增强。
* 移除了基于 Web 的 Offerwall（也称为 tapjoy.com Offerwall 或 TJC Offerwall），确保符合 Apple 的激励安装政策。还移除了直接链接到基于 Web 的 Offerwall 的 SDK 调用。
* 向 TJPlacementDelegate 添加了 didClick 委托方法。请注意，在后端服务器支持此委托之前，不会实际调用此委托。预计在 2019 年 6 月中旬左右开始提供这一支持。

```objective-c title="Objective-C"
@protocol TJPlacementDelegate <NSObject>
@optional
- (void)didClick:(TJPlacement*)placement;
```

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

* 修复了使用 iOS SDK 构建应用时出现的一系列“unable to open object file（无法打开对象文件）”虚假警告。
* 修复了某些 AdMob 聚合集成中出现的方向问题。
* 移除了未使用的代码，因此 SDK 比前一版本小了约 10%。

## 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，因此仅向用户展示内容相关广告。对于此用户，不会执行广告追踪。

`+(void)belowConsentAge:(BOOL)isBelowConsentAge;`

如果设置为 TRUE，意味着 Offerwall SDK 会将用户视为其设置中的“Limit Ad Tracking（限制广告追踪）”开关已开启。这意味着用户仍然会看到 Tapjoy 广告，但不会根据用户行为定向投放广告，Tapjoy 也不会追踪用户的广告行为。

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

请注意，从 2019 年 4 月开始，基于 Web 的 Offerwall 不再可用。现在，您可以直接链接到基于 Web 的 Tapjoy Offerwall，而不是让用户在基于应用的 Offerwall 中选择特别优惠。请注意，要启用基于 Web 的 Offerwall，必须确保在虚拟货币屏幕上选中 Show "More Rewards" banner（显示“更多奖励”横幅广告）复选框，且必须有足够多的每日用户数量 (>100)。如果在未启用基于 Web 的 Offerwall 时尝试获取其 URL，调用将返回错误。示例如下：

```objective-c title="Objective-C"
[Tapjoy getOfferwallURL:placementName completion:^(NSURL *url, NSDate *expires, NSError *error) {
  if (error) {
     // handle the error
    } 
  else {
     [self openURL:url]; //actually open the web-based offerwall in Safari browser 
    }
 }
];
```

还可在 SDK 下载文件夹中的 TapjoyEasyApp 中看到一个实现方式。按“Show Offerwall in Safari（在 Safari 中显示 Offerwall）”按钮将获取 URL，然后会在 Safari 浏览器中启动。

* 移除了所有需要特殊 info.plist 条目才能通过应用审批的代码。从此版本开始，不再需要 NSMotionUsageDescription、NSAppleMusicUsageDescription 和 NSPhotoLibraryUsageDescription 的说明。其他用途说明的要求已经在更早的 SDK 版本中移除，因此在应用程序中集成 Offerwall SDK 不再需要任何说明性的 info.plist 条目。

错误修复：

* 修复了若干与 Tapjoy 广告展示时旋转设备相关的错误。
* 修复了在播放一个 Tapjoy 广告后立即播放另一个广告（使用 contentDidDisappear）有时会失败的错误。
* 移除了 NSUserDefaults 同步调用（此调用会导致罕见的崩溃）。

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

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

* 已将 IAB Open Measurement SDK 集成到 Offerwall SDK 中。发行商无需执行任何其他操作或更改任何代码。
* 现在支持的最低 iOS 版本是 iOS 8。
* 此 SDK 内置了对程序化聚合的支持。稍后将发布服务器和后台对程序化聚合的支持。
* 修复了示例 EasyApp 中的“Get Direct Play Video Ad（获取直接播放的视频广告）”按钮。
* 请注意，由于最近更新了 Bitcode，此 Tapjoy iOS SDK 版本需要与 Xcode 9.3 或更高版本结合使用。

## 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 约束。

```objective-c title="Objective-C"
新增：
+(void)setUserConsent:(NSString*) value;
示例：
[Tapjoy setUserConsent:@"0″]; // user does not consent
+(void)subjectToGDPR:(BOOL) gdprApplicability;
示例：
[Tapjoy subjectToGDPR:NO];   // This user is not subject to GDPR
```

* 请注意，由于最近更新了 Bitcode，此 Tapjoy iOS SDK 版本需要与 Xcode 9.3 或更高版本结合使用。

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

* 对应用商店结束页体验进行了设计上的更新。
* 对某些 Offerwall 任务类型的操作说明显示方式进行了设计上的更新。
* 请注意，由于最近更新了 Bitcode，此 Tapjoy iOS SDK 版本需要与 Xcode 9.3 或更高版本结合使用。

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

* 移除了对 CoreLocation 框架的要求。
* 移除了已弃用的“Tapjoy 平台聚合”功能。这是一种特殊形式的聚合，Tapjoy 已有将近一年不再提供支持。如果您仍在使用平台聚合，请不要更新到此 SDK 版本，建议切换到行业标准适配器聚合。常规适配器聚合功能（例如 Mopub、ironSource、Fyber、Appodeal 和其他聚合平台提供的视频和插页式广告聚合）不受此更改的影响。

错误修复：

* 修复了因耳机拔出、Siri 唤醒或弹出通知导致视频中断时出现的画面冻结的一些错误。
* 修复了涉及 UIColor colorFromHexString 的偶发性崩溃。
* 修复了从后台恢复应用后 Tapjoy 视频中的音频可能会播放几秒钟的偶发性问题。
