adjust-icon

SDK v5 迁移指南

操作前须知

在更新到 SDK v5 之前,您需要进行以下操作:

  1. SDK v5 支持SDK 签名验证。如果您正在使用 SDK 签名库,请先从应用中移除签名库。

  2. SDK v5 支持的最低 API 版本已更新。如果您的应用目标版本较低,请先进行更新。

    • iOS: 12.0
    • 安卓: 21

安装 SDK

要开始使用 SDK v5,您需要将其添加为项目的依赖。为此,请按照以下步骤操作:

  1. 使用以下方法之一下载 React Native 库。

在您的终端运行以下指令:

Terminal window
$ npm install react-native-adjust@5.0.3 --save
  1. 在您的终端运行以下指令来为您的 iOS 应用安装 CocoaPods 依赖:
Terminal window
$ cd ios && pod install

更新初始化方法

于 v5 中变更

在 SDK v4 中,初始化方法为Adjust.create 。在 SDK v5 中,该方法已变为Adjust.initSdk

Adjust.create(adjustConfig); // v4
Adjust.initSdk(adjustConfig); // v5

变更 API

于 v5 中变更

SDK v5 中变更了下列 API。

禁用或启用 SDK

在 SDK v4 中,您可以通过调用带bool值的Adjust.setEnabled来启用和禁用 SDK。

Adjust.setEnabled(false); // disable SDK
Adjust.setEnabled(true); // enable SDK

在 SDK v5 中,为清晰起见,此功能被分成单独的命令。

  • 调用Adjust.disable来禁用 SDK。
  • 调用Adjust.enable来启用 SDK。
Adjust.disable();
Adjust.enable();

在后台发送信息

在 SDK v4 中,您可以使用bool值调用adjustConfig实例上的setSendInBackground方法,以此允许 SDK 在应用后台运行时向 Adjust 发送信息。

adjustConfig.setSendInBackground(true);

在 SDK v5 中,您需要在adjustConfig实例上调用enableSendingInBackground方法,以此允许 SDK 在应用后台运行时向 Adjust 发送信息。默认状态为false

adjustConfig.enableSendingInBackground();

预安装应用监测

在 SDK v4 中,您可以使用true值在adjustConfig实例上调用setPreinstallTrackingEnabled方法,以此来监测预安装应用。

adjustConfig.setPreinstallTrackingEnabled(true);

在 SDK v5 中,您需要调用adjustConfig实例的enablePreinstallTracking方法来启用预安装应用监测。默认状态为false

adjustConfig.enablePreinstallTracking();

禁用 AdServices 信息读取

在 SDK v4 中,您可以使用false值在adjustConfig上调用setAllowAdServicesInfoReading方法,阻止 Adjust SDK 读取 AdServices 信息。

adjustConfig.setAllowAdServicesInfoReading(false);

在 SDK v5 中,您需要在adjustConfig实例上调用disableAdServices方法,以防止 Adjust SDK 读取 AdServices 信息。默认状态为true

adjustConfig.disableAdServices();

禁用 IDFA 读取

在 SDK v4 中,您可以使用false值在adjustConfig实例上调用setAllowIdfaReading方法,以防止 Adjust SDK 读取设备的 IDFA。

adjustConfig.setAllowIdfaReading(false);

在 SDK v5 中,您需要在adjustConfig实例上调用disableIdfaReading方法,以防止 Adjust SDK 读取设备的 IDFA。默认状态为true

adjustConfig.disableIdfaReading();

在归因中启用成本数据

在 SDK v4 中,您可以将adjustConfig实例的setNeedsCost属性设置为true,在设备的归因信息中包含成本数据。

adjustConfig.setNeedsCost(true);

在 SDK v5 中,您需要在adjustConfig实例上调用enableCostDataInAttribution方法,在设备的归因信息中包含成本数据。默认状态为false

adjustConfig.enableCostDataInAttribution();

设置归因回传

在 SDK v4 中,您可以在AdjustConfig实例上调用setAttributionCallbackListener方法来设置委托回传函数,在用户归因数据发生变化时触发。

adjustConfig.setAttributionCallbackListener(function (attribution) {});

在 SDK v5 中,该方法已重命名为setAttributionCallback 。所有参数不变。

adjustConfig.setAttributionCallback(function (attribution) {});

启用 LinkMe

在 SDK v4 中,您可以使用true值在adjustConfig实例上调用setLinkMeEnabled方法,以此来启用 Adjust LinkMe

adjustConfig.setLinkMeEnabled(true);

在 SDK v5 中,您需要在adjustConfig实例上调用enableLinkMe方法,启用 Adjust LinkMe。默认状态为false

adjustConfig.enableLinkMe();

只读取设备 ID 一次

在 SDK v4 中,您可以使用true值在adjustConfig实例上调用setReadDeviceInfoOnceEnabled方法,指示 SDK 只读取设备 ID 一次。

adjustConfig.setReadDeviceInfoOnceEnabled(true);

在 SDK v5 中,您需要在adjustConfig实例上调用enableDeviceIdsReadingOnce方法,指示 SDK 只读取设备 ID 一次。默认状态为false

adjustConfig.enableDeviceIdsReadingOnce();

离线模式

在 SDK v4 中,您可以通过调用带bool参数的Adjust.setOfflineMode来启用和禁用 SDK 离线模式。

Adjust.setOfflineMode(true);
Adjust.setOfflineMode(false);

在 SDK v5 中,为清晰起见,此功能被分成单独的命令。

  • 调用Adjust.switchToOfflineMode将 SDK 设为离线模式。
  • 调用Adjust.switchBackToOnlineMode将 SDK 重新设为在线模式。
Adjust.switchToOfflineMode(); // Put the SDK in offline mode
Adjust.switchBackToOnlineMode(); // Put the SDK back in online mode

会话回传参数

在 SDK v4 中,您可以通过传递键值对至Adjust.addSessionCallbackParameter方法来添加会话参数,也可以使用Adjust.removeSessionCallbackParameter方法移除单个参数。

Adjust.addSessionCallbackParameter("key", "value");
Adjust.removeSessionCallbackParameter("key");
Adjust.resetSessionCallbackParameters();

在 SDK v5 中,会话参数被重命名为统一参数。

Adjust.addGlobalCallbackParameter("key", "value");
Adjust.removeGlobalCallbackParameter("key");
Adjust.removeGlobalCallbackParameters();

会话合作伙伴参数

在 SDK v4 中,您可以通过传递键值对至Adjust.addSessionPartnerParameter方法来添加会话合作伙伴参数,也可以使用Adjust.removeSessionPartnerParameter方法移除单个参数。

Adjust.addSessionPartnerParameter("key", "value");
Adjust.removeSessionPartnerParameter("key");
Adjust.resetSessionPartnerParameters();

在 SDK v5 中,会话合作伙伴参数被重命名为统一合作伙伴参数。

Adjust.addGlobalPartnerParameter("key", "value");
Adjust.removeGlobalPartnerParameter("key");
Adjust.removeGlobalPartnerParameters();

去重

在 SDK v4 中,事件去重与事件transaction ID同时进行且唯一 ID 的数量上限为 10 个。

adjustEvent.setTransactionId(orderId);

在 SDK v5 中,该功能与transaction ID分离。事件去重添加了名为deduplicationId的新 ID 字段。

adjustEvent.setDeduplicationId(deduplicationId);

用户可以自定义可添加到已识别重复事件列表中的去重 ID 数量。默认情况下上限为 10。

adjustConfig.setEventDeduplicationIdsMaxSize(20);

会话成功回传

在 SDK v4 中,您可以调用setSessionTrackingSucceededCallbackListener来注册 SDK 的成功会话记录。

adjustConfig.setSessionTrackingSucceededCallbackListener(
function (sessionSuccess) {
// Printing all session success properties.
console.log("Session recording succeeded!");
console.log(sessionSuccess.message);
console.log(sessionSuccess.timestamp);
console.log(sessionSuccess.adid);
console.log(sessionSuccess.jsonResponse);
},
);

在 SDK v5 中,该方法已重命名为setSessionTrackingSucceededCallback

adjustConfig.setSessionTrackingSucceededCallback(function (sessionSuccess) {
// Printing all session success properties.
console.log("Session recording succeeded!");
console.log(sessionSuccess.message);
console.log(sessionSuccess.timestamp);
console.log(sessionSuccess.adid);
console.log(sessionSuccess.jsonResponse);
});

会话失败回传

在 SDK v4 中,您可以调用setSessionTrackingFailedCallbackListener来注册 SDK 的失败会话记录。

adjustConfig.setSessionTrackingFailedCallbackListener(
function (sessionFailure) {
console.log(sessionFailure.message);
},
);

在 SDK v5 中,该方法已重命名为setSessionTrackingFailedCallback

adjustConfig.setSessionTrackingFailedCallback(function (sessionFailure) {
console.log(sessionFailure.message);
});

事件成功回传

在 SDK v4 中,您可以调用setEventTrackingSucceededCallbackListener来注册 SDK 的成功事件记录。

adjustConfig.setEventTrackingSucceededCallbackListener(function (eventSuccess) {
// Printing all event success properties.
console.log("Event recording succeeded!");
console.log(eventSuccess.message);
console.log(eventSuccess.timestamp);
console.log(eventSuccess.eventToken);
console.log(eventSuccess.callbackId);
console.log(eventSuccess.adid);
console.log(eventSuccess.jsonResponse);
});

在 SDK v5 中,该方法已重命名为setEventTrackingSucceededCallback

adjustConfig.setEventTrackingSucceededCallback(function (eventSuccess) {
// Printing all event success properties.
console.log("Event recording succeeded!");
console.log(eventSuccess.message);
console.log(eventSuccess.timestamp);
console.log(eventSuccess.eventToken);
console.log(eventSuccess.callbackId);
console.log(eventSuccess.adid);
console.log(eventSuccess.jsonResponse);
});

事件失败回传

在 SDK v4 中,您可以调用setEventTrackingFailedCallbackListener来注册 SDK 的成功事件记录。

adjustConfig.setEventTrackingFailedCallbackListener(function (eventFailure) {
// Printing all event failure properties.
console.log("Event recording failed!");
console.log(eventFailure.message);
console.log(eventFailure.timestamp);
console.log(eventFailure.eventToken);
console.log(eventFailure.callbackId);
console.log(eventFailure.adid);
console.log(eventFailure.willRetry);
console.log(eventFailure.jsonResponse);
});

在 SDK v5 中,该方法已重命名为setEventTrackingFailedCallback

adjustConfig.setEventTrackingFailedCallback(function (eventFailure) {
// Printing all event failure properties.
console.log("Event recording failed!");
console.log(eventFailure.message);
console.log(eventFailure.timestamp);
console.log(eventFailure.eventToken);
console.log(eventFailure.callbackId);
console.log(eventFailure.adid);
console.log(eventFailure.willRetry);
console.log(eventFailure.jsonResponse);
});

App Store 订阅

在 SDK v4 中,您可以通过配置AdjustAppStoreSubscription对象来设置新的订阅。该对象使用四个参数进行初始化:pricecurrencytransactionIdreceipt

var subscription = new AdjustAppStoreSubscription(
price,
currency,
transactionId,
receipt,
);

在SDK v5 中,您无需发送receipt参数,因为收入验证不再需要此参数。

var subscription = new AdjustAppStoreSubscription(
price,
currency,
transactionId,
);

在 SDK v4 中,您可以将深度链接信息传递至Adjust.appWillOpenUrl方法。

Adjust.appWillOpenUrl("url");

为清晰起见,在 SDK v5 中,该方法已重命名为Adjust.processDeeplink 。其中添加了新的AdjustDeeplink类用于构建深度链接。要处理深度链接,请使用您的深度链接 URL 实例化AdjustDeeplink对象并将其传递至Adjust.processDeeplink方法。

Adjust.processDeeplink(new AdjustDeeplink("url"));

在 SDK v4 中,您可以使用true值来在adjustConfig实例上调用setShouldlaunchDeeplink方法,允许 SDK 打开深度链接或使用false来禁止深度链接打开功能。

adjustConfig.setShouldLaunchDeeplink(true);

在 SDK v5 中,深度链接会默认打开。您需要在adjustConfig实例上调用isDeferredDeeplinkOpeningEnabled方法来允许 SDK 打开深度链接。

adjustConfig.disableDeferredDeeplinkOpening();

在 SDK v4 中,您可以通过将url传递至processDeeplink方法来解析缩短的深度链接。

Adjust.processDeeplink("url", function (resolvedLink) {
console.log("Resolved link: " + resolvedLink);
});

在 SDK v5 中,您需要发送使用深度链接url初始化的AdjustDeeplink对象。此操作会返回未缩短的原始深度链接。

Adjust.processAndResolveDeeplink(new AdjustDeeplink("url"), function(resolvedLink) {
console.log("Resolved link: " + resolvedLink);
};

在 SDK v4 中,您可以通过在AdjustConfig实例上调用setDeferredDeeplinkCallbackListener方法来配置监听器函数,在接收到深度链接时触发。

adjustConfig.setDeferredDeeplinkCallbackListener(function (deeplink) {});

在 SDK v5 中,该方法已重命名为setDeferredDeeplinkCallback 。所有参数不变。

adjustConfig.setDeferredDeeplinkCallback(function (deeplink) {});

COPPA 合规

在 SDK v4 中,您可以使用true值在adjustConfig实例上调用coppaCompliantEnabled方法,启用 COPPA 合规。

adjustConfig.setCoppaCompliantEnabled(true);

在 SDK v5 中,您需要在adjustConfig实例上调用isCoppaComplianceEnabled方法,启用 COPPA 合规。默认状态为false

adjustConfig.enableCoppaCompliance();

Play Store 儿童应用

在 SDK v4 中,您可以使用true值在adjustConfig实例上调用setPlayStoreKidsAppEnabled方法,将应用标记为Play 商店儿童应用。该属性会在 SDK 初始化期间读取,也就是说 SDK 初始化后该值将无法更新。

adjustConfig.setPlayStoreKidsAppEnabled(true);

在 SDK v5 中,您需要调用adjustConfig实例的enablePlayStoreKidsCompliance方法来启用合规。默认状态为false

adjustConfig.enablePlayStoreKidsCompliance();

设置数据驻留和 URL 策略

在 SDK v4 中,URL 策略和数据驻留域名在adjustConfig类中被定义为常量。

adjustConfig.setUrlStrategy(AdjustConfig.DataResidencyEU);

在 SDK v5 中,您需要将选定的一个或多个域名以数组的形式发送。您还需要进行下列设置:

  • useSubdomains (bool): 域名是否应被视为 Adjust 域名。若为 true,则 SDK 会为域名添加 Adjust 子域名前缀。若为 false,SDK 会使用收到的域名,不添加任何前缀。
  • isDataResidency ( bool ):域名是否用于数据驻留。
adjustConfig.setUrlStrategy(["eu.adjust.com"], true, true);

请查看下方表格,了解如何在 SDK v5 中配置 URL 策略。

v4v5 - 主要和后备域名v5 - 使用子域名v5 - 数据驻留
adjustConfig.DataResidencyEU"eu.adjust.com"truetrue
adjustConfig.DataResidencyTR"tr.adjust.com"truetrue
adjustConfig.DataResidencyUS"us.adjust.com"truetrue
adjustConfig.UrlStrategyChina"adjust.world""adjust.com"truefalse
adjustConfig.UrlStrategyCn"adjust.cn""adjust.com"truefalse
adjustConfig.UrlStrategyCnOnly"adjust.cn"truefalse
adjustConfig.UrlStrategyIndia"adjust.net.in""adjust.com"truefalse

记录广告收入

在 SDK v4 中,您可以通过调用trackAdRevenue方法并传递sourcepayload作为参数来记录广告收入。

Adjust.trackAdRevenue("source", "payload");

通过 SDK v4 中的新方法,您可以创建带有source的新AdjustAdRevenue对象并将该对象传递至trackAdRevenueNew方法来记录广告收入。

var adRevenue = new AdjustAdRevenue("source");
adRevenue.setRevenue(6, "CAD");
Adjust.trackAdRevenueNew(adRevenue);

在 SDK v5 中,您需要使用source来创建新的AdjustAdRevenue对象并通过将此对象传递至trackAdRevenue方法来记录广告收入。

var adRevenue = new AdjustAdRevenue("source");
adRevenue.setRevenue(6, "CAD");
Adjust.trackAdRevenue(adRevenue);

发送特定来源的广告收入

在 SDK v4 中,广告收入来源被定义为adjustConfig类中的常量。在 SDK v5 中,广告收入来源需要以字符串形式传递。

var adRevenue = new AdjustAdRevenue(AdjustConfig.AdRevenueSourceAppLovinMAX);
var adRevenue = new AdjustAdRevenue("applovin_max_sdk");
v4v5
adjustConfig.AdRevenueAppLovinMAX"applovin_max_sdk"
adjustConfig.AdRevenueSourceAdMob"admob_sdk"
adjustConfig.AdRevenueSourceIronSource"ironsource_sdk"
adjustConfig.AdRevenueSourceAdMost"admost_sdk"
adjustConfig.AdRevenueSourceUnity"unity_sdk"
adjustConfig.AdRevenueSourceHeliumChartboost"helium_chartboost_sdk"
adjustConfig.AdRevenueSourceADX"adx_sdk"
adjustConfig.AdRevenueSourcePublisher"publisher_sdk"
adjustConfig.AdRevenueSourceTradplus"tradplus_sdk"
adjustConfig.AdRevenueSourceTopOn"topon_sdk"
adjustConfig.AdRevenueSourceMopub不再支持

关闭 SKAdNetwork 通讯

在 SDK v4 中,您可以通过调用adjustConfig.deactivateSKAdNetworkHandling方法来阻止 SDK 与 SKAdNetwork 通讯。

adjustConfig.deactivateSKAdNetworkHandling();

在 SDK v5 中,您需要在adjustConfig实例上调用disableSkanAttribution方法,以此禁用 SKAdNetwork 通讯。默认状态为true

adjustConfig.disableSkanAttribution();

监听转化值更新

在 SDK v4 中,您可以在adjustConfig实例上调用setSkad4ConversionValueUpdatedCallbackListener方法来监听转化值更新。在 SKAN4 之前,您可以使用setConversionValueUpdatedCallbackListener方法。

// pre-SKAN4 callback
adjustConfig.setConversionValueUpdatedCallbackListener(
function (conversionValue) {
console.log("Conversion value updated callback received");
console.log("Conversion value: " + conversionValue.conversionValue);
},
);
// SKAN4 callback
adjustConfig.setSkad4ConversionValueUpdatedCallbackListener(
function (conversionValue) {
console.log("Conversion value updated callback received");
console.log("Conversion value: " + conversionValue.conversionValue);
},
);

在 SDK v5 中,您需要为adjustConfig对象的setSkanUpdatedCallback方法指定一个回传函数。

adjustConfig.setSkanUpdatedCallback(function (skanData) {
console.log("Conversion value: " + skanData.conversionValue);
console.log("Coarse value: " + skanData.coarseValue);
console.log("Lock window: " + skanData.lockWindow);
console.log("Error: " + skanData.error);
});

更新转化值

在 SDK v4 中,您可以使用以下方法之一向 Adjust 发送更新后转化值:

Adjust.updateConversionValue(6);
Adjust.updateConversionValueWithErrorCallback(6, function(error) {
// error is present in case it happened
});
Adjust.updateConversionValueWithSkad4ErrorCallback(6, 'coarse-value', ‘true’, function(error) {
// error is present in case it happened
});

如需更新 SDK v5 中的转化值,请使用带下列参数的updateSkanConversionValue方法:

  • conversionValue ( int ):更新后的转化值
  • coarseValue ( string ):更新后的粗粒度转化值
  • lockWindow (bool):是否在转化窗口结束前发送回调
Adjust.updateSkanConversionValue(6, "coarse-value", true, function (error) {
// error is present in case it happened
});

App Tracking Transparency 授权包装器

在 SDK v4 中,您可以使用Adjust.requestTrackingAuthorizationWithCompletionHandler方法处理用户 ATT 授权状态变更。

Adjust.requestTrackingAuthorizationWithCompletionHandler(function (status) {
print("[Adjust]: Authorization status update!");
switch (status) {
case 0:
print(
"[Adjust]: Authorization status update: ATTrackingManagerAuthorizationStatusNotDetermined",
);
break;
case 1:
print(
"[Adjust]: Authorization status update: ATTrackingManagerAuthorizationStatusRestricted",
);
break;
case 2:
print(
"[Adjust]: Authorization status update: ATTrackingManagerAuthorizationStatusDenied",
);
break;
case 3:
print(
"[Adjust]: Authorization status update: ATTrackingManagerAuthorizationStatusAuthorized",
);
break;
}
});

为清晰起见,该参数在 SDK v5 中被重命名为Adjust.requestAppTrackingAuthorization

Adjust.requestAppTrackingAuthorization(function (status) {
print("[Adjust]: Authorization status update!");
switch (status) {
case 0:
print(
"[Adjust]: Authorization status update: ATTrackingManagerAuthorizationStatusNotDetermined",
);
break;
case 1:
print(
"[Adjust]: Authorization status update: ATTrackingManagerAuthorizationStatusRestricted",
);
break;
case 2:
print(
"[Adjust]: Authorization status update: ATTrackingManagerAuthorizationStatusDenied",
);
break;
case 3:
print(
"[Adjust]: Authorization status update: ATTrackingManagerAuthorizationStatusAuthorized",
);
break;
}
});

移除 API

于 v5 中删除

SDK v5 中移除了下列 API。

事件缓冲

SDK v4 支持事件缓冲。该功能可将请求事件、广告收入、推送标签 (Push token) 和其他信息存储在本地缓冲区中以便在之后发送。

adjustConfig.setEventBufferingEnabled(true);

该方法在 SDK v5 中已被移除。

自定义用户代理字符串

SDK v4 支持通过向 adjustConfig 实例上的 setUserAgent 方法传递用户字符串代理来设置自定义用户代理。

adjustConfig.setUserAgent("custom-user-agent");

该方法在 SDK v5 中已被移除。

设置设备是否已知

在 SDK v4 中,您可以在adjustConfig实例上调用setDeviceKnown方法,手动告知 SDK 设备是否为已知设备。

adjustConfig.setDeviceKnown(true);

该方法在 SDK v5 中已被移除。

延迟 SDK 启动

SDK v4 支持通过在adjustConfig实例上调用setDelayStart方法来延迟 SDK 启动。您最多可以设置 10 秒 的延迟。

adjustConfig.setDelayStart(10);

该方法在 SDK v5 中已被移除。中断此延迟的Adjust.sendFirstPackages方法也已被移除。

检查是否有新的 ATT 状态

SDK v4 支持Adjust.checkForNewAttStatus方法。调用该方法会使 SDK 停止延迟,继续工作。

Adjust.checkForNewAttStatus();

该方法在 SDK v5 中已被移除。

最终安卓归因

在 SDK v4 中,您可以用true值在adjustConfig实例上调用setFinalAndroidAttributionEnabled方法,发送最终安卓归因。

adjustConfig.setFinalAndroidAttributionEnabled(true);

在 SDK v5 中,该设置已被移除,因为安卓平台上只有最终归因会通过归因回传发送。

设置 referrer

在 SDK v4 中,您可以调用setReferrer方法,在 SDK 启动时通过自定义点击 ID 触发 SDK 点击。

Adjust.setReferrer("referrer");

该方法在 SDK v5 中已被移除。Google 已弃用用于向 Google Play 服务传递 referrer 信息的INSTALL_REFERRER intent 方法。如果您当前正在使用此方法,请迁移至 Google Play Referrer API。

在 SDK v4 中,您可以调用convertUniversalLink方法。

Adjust.convertUniversalLink(function (url, scheme, callback) {});

该方法在 SDK v5 中已被移除。

AdjustEvent 变更

在 SDK v4 中,您可以将receipt 发送到adjustEvent.setReceipt 上的adjustEvent 方法以进行订阅和购买监测。

adjustEvent.setReceipt("receipt");

SDK v5 中已移除该参数,因为该参数已不再用于收入验证。

收入验证

在 SDK v4 中,您必须实例化带有receipt属性的AdjustAppStorePurchase对象。该属性用于收入验证。

var appStorePurchase = new AdjustAppStorePurchase(
"receipt",
"product-id",
"transaction-id",
);

该方法在 SDK v5 中已被移除。如果您使用的是AdjustAppStorePurchase类收入验证,则必须从构造调用中移除该参数。

var appStorePurchase = new AdjustAppStorePurchase(
"product-id",
"transaction-id",
);

全局禁用第三方分享

在 SDK v4 中,您可以调用Adjust.disableThirdPartySharing方法来全面禁用第三方信息分享。

Adjust.disableThirdPartySharing();

SDK v5 中已删除该功能。在 SDK v5 中,使用Adjust.trackThirdPartySharing方法来启用或禁用第三方共享。

var thirdPartySharing = new AdjustThirdPartySharing(false);
Adjust.trackThirdPartySharing(thirdPartySharing);