Adjust SDK 包含处理应用用户隐私的功能。
发送删除请求
static void gdprForgetMe()在处理个人数据方面,欧盟的《通用数据保护条例》(GDPR) 和全球类似的隐私法律 (CCPA、LGPD 等) 授予数据主体完全权利,其中包括删除权 (参见 GDPR 第 17条)( 1 )。作为数据处理方,Adjust 有义务支持您 (数据控制方) 处理来自应用用户的此类请求。
您可以通过调用 gdprForgetMe 方法来将用户的删除请求发送至 Adjust 服务器。收到通知后:
- 我们将从内部系统和数据库中永久删除用户的所有历史个人数据;
- 此外,Adjust 将不再通过 Adjust SDK 接收来自该用户/设备的数据。 ( 2 )
Adjust.gdprForgetMe();针对特定用户的第三方分享
您可以使用 Adjust SDK 来记录用户对第三方数据分享设置的变更。请使用 AdjustThirdPartySharing 类配置第三方数据分享设置。
实例化 AdjustThirdPartySharing 对象
AdjustThirdPartySharing(bool? _isEnabled)要启用或禁用 Adjust SDK 第三方数据分享,请实例化一个 AdjustThirdPartySharing 对象。该对象中包含的变量控制 Adjust 处理第三方数据分享的方式。
要实例化第三方数据分享对象,请创建新的 AdjustThirdPartySharing 实例,并传送下列参数:
isEnabled(bool):第三方数据分享是否启用。传送true可启用第三方分享;传送false可禁用第三方分享。
AdjustThirdPartySharing adjustThirdPartySharing = new AdjustThirdPartySharing(true);//...Adjust.trackThirdPartySharing(adjustThirdPartySharing);完成 AdjustThirdPartySharing 对象实例化后,您就能以参数形式使用 AdjustThirdPartySharing 实例调用 Adjust.trackThirdPartySharing 方法,以向 Adjust 发送信息。
AdjustThirdPartySharing adjustThirdPartySharing = new AdjustThirdPartySharing(false);//...Adjust.trackThirdPartySharing(adjustThirdPartySharing);发送精细信息
void addGranularOption(String partnerName, String key, String value)当用户更新第三方数据分享设置时,您可以附加较精细的信息,以此发送用户决定的更多细节。为此,请使用下列参数调用addGranularOption方法:
partnerName(String):使用精细设置的合作伙伴的名称。key(String):选项 key。value(String):选项值。
可用合作伙伴如下:
| 合作伙伴名称 | 字符串值 |
|---|---|
| Apple Ads | apple_ads |
facebook | |
| Google Ads | adwords |
| Google Marketing Platform | google_marketing_platform |
| Snapchat | snapchat |
| 腾讯 | tencent |
| TikTok SAN | tiktok_san |
| X (前 Twitter) | twitter |
| Yahoo Gemini | yahoo_gemini |
| Yahoo Japan Search | yahoo_japan_search |
AdjustThirdPartySharing adjustThirdPartySharing = new AdjustThirdPartySharing(null);//...adjustThirdPartySharing.addGranularOption('PartnerA', 'key', 'value');//...Adjust.trackThirdPartySharing(adjustThirdPartySharing);管理 Facebook “限制数据使用” 功能
为遵守《加州消费者隐私法案》(CCPA) 的规定,Facebook 提供了 “限制数据使用” (LDU) 功能。借助该功能,在有位于美国加利福尼亚州的用户选择拒绝数据出售时,您就能向 Facebook 发送通知。如果您希望将所有用户的默认许可状态设为拒绝,也可以使用该功能。
您可以通过向 addGranularOption 方法传递下列参数来更新 Facebook LDU 状态。
| 参数 | 描述 |
|---|---|
partner_name | 请使用facebook来开启或关闭 LDU。 |
data_processing_options_country | 用户所在的国家/地区
|
data_processing_options_state | 通知 Facebook 用户所处的州。
|
AdjustThirdPartySharing adjustThirdPartySharing = new AdjustThirdPartySharing(null);//...adjustThirdPartySharing.addGranularOption('facebook', 'data_processing_options_country', '1');adjustThirdPartySharing.addGranularOption('facebook', 'data_processing_options_state', '1000');//...Adjust.trackThirdPartySharing(adjustThirdPartySharing);向 Google 提供许可数据 (《数字市场法案》合规)
要符合欧盟的《数字市场法案》(Digital Markets Act,简称 DMA),Google Ads 和 Google Marketing Platform 需要获得明确的用户许可,才能接收 Adjust 向其 API 发送的归因请求。要发送该许可,您需要针对合作伙伴将以下精细选项添加至第三方分享实例google_dma。
| 密钥 | 值 | 描述 |
|---|---|---|
eea | 1 (是) | 0 (否) | 告知 Adjust 安装应用的用户是否位于欧洲经济区。 欧洲经济区包括欧盟成员国、瑞士、挪威、冰岛和斯洛文尼亚。 |
ad_personalization | 1 (是) | 0 (否) | 告知 Adjust 用户是否同意通过 Google Ads 和/或 Google Marketing Platform 接收个性化广告。此参数还为针对 Google Marketing Platform 的npa参数提供信息。 |
ad_user_data | 1 (是) | 0 (否) | 告知 Adjust 用户是否允许其广告主 ID 被用于归因相关目的。 |
AdjustThirdPartySharing adjustThirdPartySharing = new AdjustThirdPartySharing(null);adjustThirdPartySharing.addGranularOption('google_dma', 'eea', '1');adjustThirdPartySharing.addGranularOption('google_dma', 'ad_personalization', '1');adjustThirdPartySharing.addGranularOption('google_dma', 'ad_user_data', '1');Adjust.trackThirdPartySharing(adjustThirdPartySharing);向 Amazon Ads 提供许可数据 (《数字市场法案》合规)
要符合欧盟的《数字市场法案》(Digital Markets Act,简称 DMA),Amazon Ads 需要获得明确的用户许可,才能接收 Adjust 向其 API 发送的归因请求。要发送该许可,您需要针对合作伙伴将以下精细选项添加至第三方分享实例amazon_dma。
| 密钥 | 值 | 描述 |
|---|---|---|
ad_user_data | 1 (是) | 0 (否) | 告知 Amazon Ads 用户是否同意分享个人数据用于监测目的。该许可适用于广告主在 Amazon Ads 用户界面中指定的所有核心平台服务 (CPS)。 |
ad_storage | 1 (是) | 0 (否) | 了解用户是否同意 Amazon Ads 使用营销相关数据存储 |
AdjustThirdPartySharing adjustThirdPartySharing = new AdjustThirdPartySharing(null);adjustThirdPartySharing.addGranularOption('amazon_dma', 'ad_user_data', '1');adjustThirdPartySharing.addGranularOption('amazon_dma', 'ad_storage', '1');Adjust.trackThirdPartySharing(adjustThirdPartySharing);更新合作伙伴分享设置
void addPartnerSharingSetting(String partnerName, String key, bool value)默认情况下,Adjust 会与您在应用设置中配置的合作伙伴分享所有指标。您可以使用 Adjust SDK,为每个合作伙伴分别更新第三方数据分享设置。为此,请使用下列参数调用 addPartnerSharingSetting 方法:
| 参数 | 数据类型 | 描述 |
|---|---|---|
partnerName | String | 合作伙伴 ID。下载可用合作伙伴的完整列表 |
key | String | 与合作伙伴分享的指标 |
value | Boolean | 用户的选择 |
使用 partnerName 参数来选择要禁用或重新启用其指标共享设置的合作伙伴范围:
- 传递
all以更新所有合作伙伴(包括 SAN 合作伙伴、模块合作伙伴和动态回传)的共享设置。 - 传递合作伙伴 ID,以更新特定合作伙伴的共享设置。SAN 和非 SAN 合作伙伴均支持使用合作伙伴 ID,建议使用。
- 传递
dynamic_callbacks以更新动态回传的共享设置。
您可以使用key来指定要禁用或重新启用的指标。如果您想启用/禁用所有指标的分享,可以使用all键。可用指标的完整列表如下:
ad_revenueallupdateatt_updateeventinstallreattributionreattribution_reinstall
reinstallrejected_installrejected_reattributionsdk_clicksdk_infosessionsubscriptionuninstall
指标组
当您针对合作伙伴的指标设置 false 值时,Adjust 将停止与该合作伙伴分享该指标,以及指标组中的所有子级指标。这些嵌套组包括:
- 会话
-
安装
- rejected_install
-
重装
-
再归因
-
rejected_reattribution
-
reattribution_reinstall
-
此处:
- 如果禁用
session分享,那么它的所有子级指标也将被禁用。 - 如果您禁用
session共享,但启用了reattribution共享,那么除reattribution外的所有对应子级指标都将被禁用。 - 如果您禁用
session共享,但启用了install共享,那么除install外的所有session子级指标都将被禁用。install的子级指标将保持启用状态。 - 如果您启用
session共享,但禁用了install共享,那么除install外的所有session子级指标都将被启用。install的子级指标将保持禁用状态。
示例
如果您想停止与特定合作伙伴分享所有指标,请发送带有false值的all键。
AdjustThirdPartySharing adjustThirdPartySharing = new AdjustThirdPartySharing(true);adjustThirdPartySharing.addPartnerSharingSetting('partner_id', 'all', false);Adjust.trackThirdPartySharing(adjustThirdPartySharing);要重新启用针对特定合作伙伴的分享,请发送带有 true 值的 all 键。
AdjustThirdPartySharing adjustThirdPartySharing = new AdjustThirdPartySharing(true);adjustThirdPartySharing.addPartnerSharingSetting('partner_id', 'all', true);Adjust.trackThirdPartySharing(adjustThirdPartySharing);如果您只想与 partner_id 分享数据,请进行下列传送:
all键 (针对all合作伙伴),值为false,以禁用与全部合作伙伴分享所有信息。all键(针对partner_id),值为true,以明确启用与该合作伙伴共享全部信息。
AdjustThirdPartySharing adjustThirdPartySharing = new AdjustThirdPartySharing(true);adjustThirdPartySharing.addPartnerSharingSetting('all', 'all', false);adjustThirdPartySharing.addPartnerSharingSetting('partner_id', 'all', true);Adjust.trackThirdPartySharing(adjustThirdPartySharing);如果您只想与 all 合作伙伴分享 session 数据,那么请进行下列传送:
all键 (针对all合作伙伴),值为false,以禁用与全部合作伙伴分享所有信息。session键 (针对all合作伙伴),值为true,以启用与all合作伙伴的session数据及其全部相关“子级”指标。
AdjustThirdPartySharing adjustThirdPartySharing = new AdjustThirdPartySharing(true);adjustThirdPartySharing.addPartnerSharingSetting('all', 'all', false);adjustThirdPartySharing.addPartnerSharingSetting('all', 'session', true);Adjust.trackThirdPartySharing(adjustThirdPartySharing);如果您只想与 partner_id 分享 session 数据,那么请进行下列传送:
all键 (针对all合作伙伴),值为false,以禁用与全部合作伙伴分享所有信息。session键(针对partner_id),值为true,以启用与该合作伙伴共享session数据及其全部相关“子级”指标。
AdjustThirdPartySharing adjustThirdPartySharing = new AdjustThirdPartySharing(true);adjustThirdPartySharing.addPartnerSharingSetting('all', 'all', false);adjustThirdPartySharing.addPartnerSharingSetting('partner_id', 'session', true);Adjust.trackThirdPartySharing(adjustThirdPartySharing);如果您想禁用 dynamic_callbacks,请发送带有 false 值的 all 键。
AdjustThirdPartySharing adjustThirdPartySharing = new AdjustThirdPartySharing(true);adjustThirdPartySharing.addPartnerSharingSetting('dynamic_callbacks', 'all', false);Adjust.trackThirdPartySharing(adjustThirdPartySharing);您可以使用不同的键多次调用addPartnerSharingSetting方法来停止或开始共享特定指标。例如,如果您只想与合作伙伴分享事件信息,则可以传递:
all值为false以禁用所有信息分享。event值为true以启用事件共享。
AdjustThirdPartySharing adjustThirdPartySharing = new AdjustThirdPartySharing(true);adjustThirdPartySharing.addPartnerSharingSetting('partner_id', 'all', false);adjustThirdPartySharing.addPartnerSharingSetting('partner_id', 'event', true);Adjust.trackThirdPartySharing(adjustThirdPartySharing);获取当前第三方共享设置
向 Adjust 发送 AdjustThirdPartySharing 设置后,Adjust 后端的响应中会包含当前的总体设置。可以通过调用 Getter 方法或配置变更回传来获取这些信息。
带有超时 的第三方共享设置的 Getter 方法
static Future<AdjustThirdPartySharingResult?> getThirdPartySharingSettingsWithTimeout(int timeoutInMilliseconds) async可以通过调用 Adjust.getThirdPartySharingSettingsWithTimeout 并提供以毫秒为单位的超时值请求当前的第三方共享设置。如果 SDK 有可用的设置或在指定的超时时间内收到了设置,就会返回包含第三方共享设置的 AdjustThirdPartySharingResult 对象。否则将返回 null。
Adjust.getThirdPartySharingSettingsWithTimeout(timeoutInMilliseconds).then((thirdPartySharingResult) { if (thirdPartySharingResult != null) { // Read thirdPartySharingResult.thirdPartySharingSettingsJson. }});第三方共享设置更改时触发函数
typedef void ThirdPartySharingSettingsChangedCallback(AdjustThirdPartySharingResult thirdPartySharingResult);ThirdPartySharingSettingsChangedCallback? thirdPartySharingSettingsChangedCallback;SDK 可以监听第三方共享设置更新,并在从后端收到设置变更时调用函数。当收到的设置与最新的缓存设置不同时会触发回传。
如需进行此配置,请在初始化 SDK 之前将您的回传函数赋值给 config 实例的 thirdPartySharingSettingsChangedCallback 属性。
AdjustConfig adjustConfig = new AdjustConfig('{YourAppToken}', AdjustEnvironment.sandbox);
adjustConfig.thirdPartySharingSettingsChangedCallback = (AdjustThirdPartySharingResult thirdPartySharingResult) { // Read thirdPartySharingResult.thirdPartySharingSettingsJson.};
Adjust.initSdk(adjustConfig);设置 URL 策略
void setUrlStrategy(List<string> urlStrategyDomains, bool useSubdomains, bool isDataResidency)通过 URL 策略功能,您可以进行下列设置之一:
- Adjust 储存您数据的国家/地区 (即数据驻留)。
- 接收 Adjust SDK 所发送流量的终端 (即 URL 策略)。
当应用运营的国家拥有严格的隐私规定时,此功能会非常有用。在您设置 URL 策略时,Adjust 会将数据储存在指定数据驻留地区,或将流量发送至选定域名。
要设置数据驻留国家,请在 AdjustConfig 实例上使用下列参数调用 setUrlStrategy 方法:
urlStrategyDomains(List<string>):接收您所发送 SDK 流量的数据驻留国家/地区或终端。useSubdomains(bool): 域名是否应被视为 Adjust 域名。若为true,则 SDK 会为域名添加 Adjust 子域名前缀。若为false,SDK 会使用收到的域名,不添加任何前缀。isDataResidency(bool):域名是否用于数据驻留。
| IR: 策略 | 主要和后备域名 | 使用子域名 | 数据驻留 |
|---|---|---|---|
| 欧盟数据驻留 | 'eu.adjust.com' | true | true |
| 土耳其数据驻留 | 'tr.adjust.com' | true | true |
| 数据驻留 | 'us.adjust.com' | true | true |
| 中国统一 URL 策略 | 'adjust.world', 'adjust.com' | true | false |
| 中国 URL 策略 | 'adjust.cn', 'adjust.com' | true | false |
| 仅限中国地区的 URL 策略 | 'adjust.cn' | true | false |
| 印度 URL 策略 | 'adjust.net.in', 'adjust.com' | true | false |
示例
adjustConfig.setUrlStrategy(new List<string> ['adjust.net.in', 'adjust.com'], true, false);adjustConfig.setUrlStrategy(new List<string> ['adjust.world', 'adjust.com'], true, false);adjustConfig.setUrlStrategy(new List<string> ['adjust.cn'], true, false);adjustConfig.setUrlStrategy(new List<string> ['eu.adjust.com']', true, true);adjustConfig.setUrlStrategy(new List<string> ['tr.adjust.com'], true, true);adjustConfig.setUrlStrategy(new List<string> ['us.adjust.com'], true, true);针对特定用户的许可监测
static void trackMeasurementConsent(bool measurementConsent)如果您正在 Adjust 控制面板中使用数据隐私设置,那么则需要对 Adjust SDK 做出相应设置。这包括设置许可有效期和用户数据留存期。
要开启或关闭该功能,请使用下列参数调用 trackMeasurementConsent 方法:
measurementConsent(bool):许可监测是 (true) 否 (false) 启用。
开启后,SDK 会将数据隐私设置发送至 Adjust 服务器。Adjust 服务器随后会将您的数据隐私规则应用于用户,Adjust SDK 将会继续如常运行。
Adjust.trackMeasurementConsent(true);儿童隐私
Adjust SDK 默认包含 com.google.android.gms.permission.AD_ID 权限。如要确保应用符合 COPPA 的要求或您的应用不针对 Google Play 商店,则可以通过添加一个remove指令来将其移除。
<uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove"/>请查看 Google 的 AdvertisingIdClient.Info documentation 文档,了解更多与该许可相关的信息。
COPPA 合规
bool? isCoppaCompliantEnabled;要让您的应用符合 COPPA (儿童在线隐私保护法) 规定,请为 config 实例 isCoppaCompliantEnabled 属性指定 bool 值。将该属性设为 true。
- 禁止应用在用户首次
session前 与第三方分享数据。 - 防止 SDK 读取设备和广告 ID (例如
gps_adid和android_id)。
AdjustConfig adjustConfig = new AdjustConfig('{YourAppToken}', AdjustEnvironment.sandbox);//...adjustConfig.isCoppaCompliantEnabled = true;//...Adjust.initSdk(adjustConfig);您可以使用 false 参数调用该方法来禁用 COPPA 合规。
Play 商店儿童应用 (仅限安卓)
bool? isPlayStoreKidsAppEnabled;如果您的应用会定向到不满 13 周岁的儿童,且安装地区 不 位于美国,则需要将其标记为儿童应用 (Kids App)。这可以防止 SDK 读取设备和广告 ID (例如gps_adid和android_id)。
要将应用标记为 “儿童应用”,请为 config 实例 isPlayStoreKidsAppEnabled 属性指定一个 bool 值。设为 true,可将应用标记为儿童应用;设为 false,可将应用标记为非儿童应用。
AdjustConfig adjustConfig = new AdjustConfig('{YourAppToken}', AdjustEnvironment.sandbox);//...adjustConfig.isPlayStoreKidsAppEnabled = true;//...Adjust.initSdk(adjustConfig);禁用设备 ID 读取功能
SDK 提供了多种属性,可限制读取和跟踪不同的设备标识符。可以使用这些属性来遵守隐私法规。
禁用 App Set ID 读取功能
bool? isAppSetIdReadingEnabled;默认情况下,Adjust SDK 会使用 Google Play 服务 API(如适用)读取 App Set ID。您可以配置 SDK 来禁用 App Set ID 读取功能。为此,请将 false 赋值给 AdjustConfig 实例上的 isAppSetIdReadingEnabled 属性。
AdjustConfig adjustConfig = new AdjustConfig('{YourAppToken}', AdjustEnvironment.sandbox);//...adjustConfig.isAppSetIdReadingEnabled = false;//...Adjust.initSdk(adjustConfig);禁用 Google 广告 ID 读取功能
bool? isGoogleAdIdReadingEnabled;默认情况下,Adjust SDK 会使用 Google Play 服务 API(如适用)读取 Google 广告 ID。您可以配置 SDK,禁用 Google 广告 ID 读取功能。为此,请将 false 赋值给 AdjustConfig 实例上的 isGoogleAdIdReadingEnabled 属性。
AdjustConfig adjustConfig = new AdjustConfig('{YourAppToken}', AdjustEnvironment.sandbox);//...adjustConfig.isGoogleAdIdReadingEnabled = false;//...Adjust.initSdk(adjustConfig);禁用安卓 ID 读取功能
bool? isAndroidIdReadingEnabled;默认情况下,Adjust SDK 会按需读取安卓 ID。您可以配置 SDK,禁用安卓 ID 读取功能。为此,请将 false 赋值给 AdjustConfig 实例上的 isAndroidIdReadingEnabled 属性。
AdjustConfig adjustConfig = new AdjustConfig('{YourAppToken}', AdjustEnvironment.sandbox);//...adjustConfig.isAndroidIdReadingEnabled = false;//...Adjust.initSdk(adjustConfig);禁用 Facebook ID 读取功能
bool? isFbIdReadingEnabled;默认情况下,Adjust SDK 会读取 Facebook ID(如适用)。您可以配置 SDK,禁用 Facebook ID 读取功能。为此,请将 false 赋值给 AdjustConfig 实例上的 isFbIdReadingEnabled 属性。
AdjustConfig adjustConfig = new AdjustConfig('{YourAppToken}', AdjustEnvironment.sandbox);//...adjustConfig.isFbIdReadingEnabled = false;//...Adjust.initSdk(adjustConfig);禁用 Fire 广告 ID 读取功能
bool? isFireAdIdReadingEnabled;默认情况下,Adjust SDK 会读取 Fire 广告 ID(如适用)。您可以配置 SDK,禁用 Fire 广告 ID 读取功能。为此,请将 false 赋值给 AdjustConfig 实例上的 isFireAdIdReadingEnabled 属性。
AdjustConfig adjustConfig = new AdjustConfig('{YourAppToken}', AdjustEnvironment.sandbox);//...adjustConfig.isFireAdIdReadingEnabled = false;//...Adjust.initSdk(adjustConfig);禁用从插件读取设备 ID 功能
bool? isDeviceIdsFromPluginsReadingEnabled;默认情况下,Adjust SDK 会使用插件读取设备 ID(如适用)。您可以配置 SDK,禁用从插件读取设备 ID 功能。为此,请将 false 赋值给 AdjustConfig 实例上的 isDeviceIdsFromPluginsReadingEnabled 属性。
AdjustConfig adjustConfig = new AdjustConfig('{YourAppToken}', AdjustEnvironment.sandbox);//...adjustConfig.isDeviceIdsFromPluginsReadingEnabled = false;//...Adjust.initSdk(adjustConfig);禁用 IDFA 读取功能
bool? isIdfaReadingEnabled;可以将 AdjustConfig 实例的 isIdfaReadingEnabled 属性设置为 false,以防止 Adjust SDK 读取设备的 IDFA。当您将此属性设置为 false 时,Adjust SDK 将无法读取设备的 IDFA 或将其发送至 Adjust。
AdjustConfig adjustConfig = new AdjustConfig('{YourAppToken}', AdjustEnvironment.sandbox);//...adjustConfig.isIdfaReadingEnabled = false;//...Adjust.initSdk(adjustConfig);禁用 IDFV 读取功能
bool? isIdfvReadingEnabled;可以通过将 false 赋值给 AdjustConfig 实例上的 isIdfvReadingEnabled 属性来阻止 Adjust SDK 读取设备的 IDFV。当您将 false 赋值给此属性时,Adjust SDK 将无法读取设备的 IDFV 或将其发送至 Adjust。
AdjustConfig adjustConfig = new AdjustConfig('{YourAppToken}', AdjustEnvironment.sandbox);//...adjustConfig.isIdfvReadingEnabled = false;//...Adjust.initSdk(adjustConfig);禁用所有设备 ID 读取功能
bool? isDeviceIdsReadingEnabled;您也可以配置 SDK,一次性禁用所有设备 ID 读取功能。为此,请将 false 赋值给 AdjustConfig 实例上的 isDeviceIdsReadingEnabled 属性。
这将禁用 iOS 和 Android 端所有设备 ID 的读取功能。
AdjustConfig adjustConfig = new AdjustConfig('{YourAppToken}', AdjustEnvironment.sandbox);//...adjustConfig.isDeviceIdsReadingEnabled = false;//...Adjust.initSdk(adjustConfig);