# 用户隐私

> 使用 TJPrivacyPolicy 类和 Objective-C/Swift 示例代码在 iOS User Privacy（用户隐私）页面上实现建议的隐私设置，包括 GDPR、CCPA 和 COPPA 标志。

## GDPR##gdpr

使用了 Tapjoy Offerwall 和相关 Unity Technologies SF 服务（如 Unity Rewards Offerwall）的发行商应确保通过同意机制征求用户对这些服务和数据处理的同意。这些措施必须符合所有相关法律要求，并遵循与 Tapjoy 签署的适用《数据保护附录》中的规定。

使用了 Unity Rewards Offerwall 的发行商必须确保根据 Unity 的[游戏玩家和应用用户隐私政策](https://unity.com/legal/game-player-and-app-user-privacy-policy)通过同意机制征求用户对此类服务和数据处理的同意。

## CCPA##ccpa

Tapjoy 提供了相关功能来帮助发行商遵守《加州消费者隐私法案》(CCPA)。您可以使用 `TJPrivacyPolicy` 类管理所有隐私标志（GDPR、用户同意、低于同意年龄和美国隐私）。

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

## 实现##implementation

要设置隐私标志，首先创建一个 TJPrivacyPolicy 实例：

1. **Objective-C**

   ```objective-c
   TJPrivacyPolicy *privacyPolicy = [Tapjoy getPrivacyPolicy];
   ```

2. **Swift**

   ```swift
   let privacyPolicy = TJPrivacyPolicy()
   ```

setUserConsent 函数的 `TJStatus` 值为 `TJStatusFalse`（用户不同意）或 `TJStatusTrue`（用户同意）。默认值为 `TJStatusUnknown`。

“受 GDPR 约束”标志（可选）的 `TJStatus` 值为 `TJStatusTrue`（如果用户受 GDPR 规则约束）或 `TJStatusFalse`（如果用户不受 GDPR 规则约束）。默认值为 `TJStatusUnknown`。仅当应用程序本身已判定 GDPR 是否适用于用户后，才应调用此函数。 如果未调用此函数，Tapjoy 会认为应用程序尚未进行此类判断，因此 Tapjoy 会自行判定 GDPR 适用性。

belowConsentAge 标志的 `TJStatus` 值为 `TJStatusTrue` 或 `TJStatusFalse`，默认值为 `TJStatusUnknown`。 此标志可用于了解 COPPA 合规性和/或其他适用法律的合规性（例如 GDPR 年龄合规性）。此外，还可以通过此标志了解 Tapjoy 的广告追踪政策。

最后是 USPrivacy 标志。此标志接受字符串值。此标志所接受的字符串根据 IAB 的“美国隐私字符串格式”生成，并以枚举形式对字符串进行编码。

`1YNN`，其中 1 以字符串形式表示版本，Y = 是，N = 否，– = 不适用

如需了解更多信息，请参阅 [IAB 文档中关于建议的美国隐私字符串格式的内容](https://github.com/InteractiveAdvertisingBureau/USPrivacy/blob/master/CCPA/US%20Privacy%20String.md)。

以下示例显示了所有隐私标志的设置：

1. **Objective-C**

   ```objective-c title="Objective-C"
   TJPrivacyPolicy *privacyPolicy = [Tapjoy getPrivacyPolicy];
   [privacyPolicy setSubjectToGDPRStatus：TJStatusTrue];
   [privacyPolicy setUserConsentStatus: TJStatusFalse];
   [privacyPolicy setBelowConsentAgeStatus:TJStatusTrue];
   [privacyPolicy setUSPrivacy: @"1YYY"];
   ```

2. **Swift**

   ```swift
   let privacyPolicy = TJPrivacyPolicy()
   privacyPolicy.subjectToGDPRStatus = TJStatus.true
   privacyPolicy.userConsentStatus = TJStatus.false
   privacyPolicy.belowConsentAgeStatus = TJStatus.true
   privacyPolicy.usPrivacy = "1YYY"
   ```

以下示例显示了如何获取隐私标志的当前值：

1. **Objective-C**

   ```objective-c
   TJStatus subjectToGdprStatus = [privacyPolicy subjectToGDPRStatus];
   TJStatus userConsentStatus = [privacyPolicy userConsentStatus];
   TJStatus belowAgeConsentStatus = [privacyPolicy belowConsentAgeStatus];
   NSString* usPrivacy = [privacyPolicy USPrivacy];
   ```

2. **Swift**

   ```swift
   let subjectToGdprStatus = privacyPolicy.subjectToGDPRStatus
   let userConsentStatus = privacyPolicy.userConsentStatus
   let belowAgeConsentStatus = privacyPolicy.belowConsentAgeStatus
   let usPrivacy = privacyPolicy.usPrivacy
   ```

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