Skip to content

Commit 8838e7b

Browse files
committed
feat: add first session delay feature
1 parent bb5c584 commit 8838e7b

File tree

6 files changed

+281
-14
lines changed

6 files changed

+281
-14
lines changed

Assets/Adjust/Native/iOS/AdjustUnity.mm

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ void _AdjustInitSdk(
103103
int isCostDataInAttributionEnabled,
104104
int isDeviceIdsReadingOnceEnabled,
105105
int isAppTrackingTransparencyUsageEnabled,
106+
int isFirstSessionDelayEnabled,
106107
int isDeferredDeeplinkOpeningEnabled,
107108
AdjustDelegateAttributionCallback attributionCallback,
108109
AdjustDelegateEventSuccessCallback eventSuccessCallback,
@@ -209,6 +210,13 @@ void _AdjustInitSdk(
209210
}
210211
}
211212

213+
// first session delay
214+
if (isFirstSessionDelayEnabled != -1) {
215+
if ((BOOL)isFirstSessionDelayEnabled == YES) {
216+
[adjustConfig enableFirstSessionDelay];
217+
}
218+
}
219+
212220
// deduplication IDs max number
213221
if (eventDeduplicationIdsMaxSize != -1) {
214222
[adjustConfig setEventDeduplicationIdsMaxSize:eventDeduplicationIdsMaxSize];
@@ -827,6 +835,25 @@ void _AdjustVerifyAndTrackAppStorePurchase(
827835
}];
828836
}
829837

838+
void _AdjustEndFirstSessionDelay() {
839+
[Adjust endFirstSessionDelay];
840+
}
841+
842+
void _AdjustEnableCoppaComplianceInDelay() {
843+
[Adjust enableCoppaComplianceInDelay];
844+
}
845+
846+
void _AdjustDisableCoppaComplianceInDelay() {
847+
[Adjust disableCoppaComplianceInDelay];
848+
}
849+
850+
void _AdjustSetExternalDeviceIdInDelay(const char* externalDeviceId) {
851+
if (externalDeviceId != NULL) {
852+
NSString *strExternalDeviceId = [NSString stringWithUTF8String:externalDeviceId];
853+
[Adjust setExternalDeviceIdInDelay:strExternalDeviceId];
854+
}
855+
}
856+
830857
void _AdjustSetTestOptions(const char* overwriteUrl,
831858
const char* extraPath,
832859
long timerIntervalInMilliseconds,

Assets/Adjust/Scripts/Adjust.cs

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -714,6 +714,102 @@ public static void VerifyAndTrackPlayStorePurchase(
714714
#endif
715715
}
716716

717+
public static void EndFirstSessionDelay()
718+
{
719+
if (IsEditor())
720+
{
721+
return;
722+
}
723+
724+
#if UNITY_IOS
725+
AdjustiOS.EndFirstSessionDelay();
726+
#elif UNITY_ANDROID
727+
AdjustAndroid.EndFirstSessionDelay();
728+
#else
729+
Debug.Log(errorMsgPlatform);
730+
#endif
731+
}
732+
733+
public static void EnableCoppaComplianceInDelay()
734+
{
735+
if (IsEditor())
736+
{
737+
return;
738+
}
739+
740+
#if UNITY_IOS
741+
AdjustiOS.EnableCoppaComplianceInDelay();
742+
#elif UNITY_ANDROID
743+
AdjustAndroid.EnableCoppaComplianceInDelay();
744+
#else
745+
Debug.Log(errorMsgPlatform);
746+
#endif
747+
}
748+
749+
public static void DisableCoppaComplianceInDelay()
750+
{
751+
if (IsEditor())
752+
{
753+
return;
754+
}
755+
756+
#if UNITY_IOS
757+
AdjustiOS.DisableCoppaComplianceInDelay();
758+
#elif UNITY_ANDROID
759+
AdjustAndroid.DisableCoppaComplianceInDelay();
760+
#else
761+
Debug.Log(errorMsgPlatform);
762+
#endif
763+
}
764+
765+
public static void EnablePlayStoreKidsComplianceInDelay()
766+
{
767+
if (IsEditor())
768+
{
769+
return;
770+
}
771+
772+
#if UNITY_IOS
773+
Debug.Log("[Adjust]: Play Store kids feature is only supported for Android platform.");
774+
#elif UNITY_ANDROID
775+
AdjustAndroid.EnablePlayStoreKidsComplianceInDelay();
776+
#else
777+
Debug.Log(errorMsgPlatform);
778+
#endif
779+
}
780+
781+
public static void DisablePlayStoreKidsComplianceInDelay()
782+
{
783+
if (IsEditor())
784+
{
785+
return;
786+
}
787+
788+
#if UNITY_IOS
789+
Debug.Log("[Adjust]: Play Store kids feature is only supported for Android platform.");
790+
#elif UNITY_ANDROID
791+
AdjustAndroid.DisablePlayStoreKidsComplianceInDelay();
792+
#else
793+
Debug.Log(errorMsgPlatform);
794+
#endif
795+
}
796+
797+
public static void SetExternalDeviceIdInDelay(string externalDeviceId)
798+
{
799+
if (IsEditor())
800+
{
801+
return;
802+
}
803+
804+
#if UNITY_IOS
805+
AdjustiOS.SetExternalDeviceIdInDelay(externalDeviceId);
806+
#elif UNITY_ANDROID
807+
AdjustAndroid.SetExternalDeviceIdInDelay(externalDeviceId);
808+
#else
809+
Debug.Log(errorMsgPlatform);
810+
#endif
811+
}
812+
717813
private static bool IsEditor()
718814
{
719815
#if UNITY_EDITOR

Assets/Adjust/Scripts/AdjustAndroid.cs

Lines changed: 65 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,15 @@ public static void InitSdk(AdjustConfig adjustConfig)
127127
}
128128
}
129129

130+
// check if first session delay has been enabled
131+
if (adjustConfig.IsFirstSessionDelayEnabled != null)
132+
{
133+
if (adjustConfig.IsFirstSessionDelayEnabled == true)
134+
{
135+
ajoAdjustConfig.Call("enableFirstSessionDelay");
136+
}
137+
}
138+
130139
// check if user has set custom preinstall file path
131140
if (adjustConfig.PreinstallFilePath != null)
132141
{
@@ -396,10 +405,14 @@ public static void ProcessDeeplink(AdjustDeeplink deeplink)
396405
using (AndroidJavaObject ajoUri = ajcUri.CallStatic<AndroidJavaObject>("parse", deeplink.Deeplink))
397406
using (AndroidJavaObject ajoAdjustDeeplink = new AndroidJavaObject("com.adjust.sdk.AdjustDeeplink", ajoUri))
398407
{
399-
using (AndroidJavaObject ajoReferrer = ajcUri.CallStatic<AndroidJavaObject>("parse", deeplink.Referrer))
408+
if (deeplink.Referrer != null)
400409
{
401-
ajoAdjustDeeplink.Call("setReferrer", ajoReferrer);
410+
using (AndroidJavaObject ajoReferrer = ajcUri.CallStatic<AndroidJavaObject>("parse", deeplink.Referrer))
411+
{
412+
ajoAdjustDeeplink.Call("setReferrer", ajoReferrer);
413+
}
402414
}
415+
403416
ajcAdjust.CallStatic("processDeeplink", ajoAdjustDeeplink, ajoCurrentActivity);
404417
}
405418
}
@@ -580,6 +593,38 @@ public static void GetAttribution(Action<AdjustAttribution> onAttributionRead)
580593
ajcAdjust.CallStatic("getAttribution", onAttributionReadProxy);
581594
}
582595

596+
public static void GetSdkVersion(Action<string> onSdkVersionRead)
597+
{
598+
SdkVersionReadListener onSdkVersionReadProxy = new SdkVersionReadListener(onSdkVersionRead, sdkPrefix);
599+
ajcAdjust.CallStatic("getSdkVersion", onSdkVersionReadProxy);
600+
}
601+
602+
public static void GetLastDeeplink(Action<string> onLastDeeplinkRead)
603+
{
604+
LastDeeplinkListener onLastDeeplinkReadProxy = new LastDeeplinkListener(onLastDeeplinkRead);
605+
ajcAdjust.CallStatic("getLastDeeplink", ajoCurrentActivity, onLastDeeplinkReadProxy);
606+
}
607+
608+
public static void EndFirstSessionDelay()
609+
{
610+
ajcAdjust.CallStatic("endFirstSessionDelay");
611+
}
612+
613+
public static void EnableCoppaComplianceInDelay()
614+
{
615+
ajcAdjust.CallStatic("enableCoppaComplianceInDelay");
616+
}
617+
618+
public static void DisableCoppaComplianceInDelay()
619+
{
620+
ajcAdjust.CallStatic("disableCoppaComplianceInDelay");
621+
}
622+
623+
public static void SetExternalDeviceIdInDelay(string externalDeviceId)
624+
{
625+
ajcAdjust.CallStatic("setExternalDeviceIdInDelay", externalDeviceId);
626+
}
627+
583628
// android specific methods
584629
public static void GetGoogleAdId(Action<string> onDeviceIdsRead)
585630
{
@@ -593,18 +638,6 @@ public static void GetAmazonAdId(Action<string> onAmazonAdIdRead)
593638
ajcAdjust.CallStatic("getAmazonAdId", ajoCurrentActivity, onAmazonAdIdReadProxy);
594639
}
595640

596-
public static void GetSdkVersion(Action<string> onSdkVersionRead)
597-
{
598-
SdkVersionReadListener onSdkVersionReadProxy = new SdkVersionReadListener(onSdkVersionRead, sdkPrefix);
599-
ajcAdjust.CallStatic("getSdkVersion", onSdkVersionReadProxy);
600-
}
601-
602-
public static void GetLastDeeplink(Action<string> onLastDeeplinkRead)
603-
{
604-
LastDeeplinkListener onLastDeeplinkReadProxy = new LastDeeplinkListener(onLastDeeplinkRead);
605-
ajcAdjust.CallStatic("getLastDeeplink", ajoCurrentActivity, onLastDeeplinkReadProxy);
606-
}
607-
608641
public static void VerifyPlayStorePurchase(
609642
AdjustPlayStorePurchase purchase,
610643
Action<AdjustPurchaseVerificationResult> verificationInfoCallback)
@@ -625,6 +658,14 @@ public static void ProcessAndResolveDeeplink(AdjustDeeplink deeplink, Action<str
625658
using (AndroidJavaObject ajoUri = ajcUri.CallStatic<AndroidJavaObject>("parse", deeplink.Deeplink))
626659
using (AndroidJavaObject ajoAdjustDeeplink = new AndroidJavaObject("com.adjust.sdk.AdjustDeeplink", ajoUri))
627660
{
661+
if (deeplink.Referrer != null)
662+
{
663+
using (AndroidJavaObject ajoReferrer = ajcUri.CallStatic<AndroidJavaObject>("parse", deeplink.Referrer))
664+
{
665+
ajoAdjustDeeplink.Call("setReferrer", ajoReferrer);
666+
}
667+
}
668+
628669
ajcAdjust.CallStatic(
629670
"processAndResolveDeeplink",
630671
ajoAdjustDeeplink,
@@ -697,6 +738,16 @@ public static void VerifyAndTrackPlayStorePurchase(
697738
}
698739
}
699740

741+
public static void EnablePlayStoreKidsComplianceInDelay()
742+
{
743+
ajcAdjust.CallStatic("enablePlayStoreKidsComplianceInDelay");
744+
}
745+
746+
public static void DisablePlayStoreKidsComplianceInDelay()
747+
{
748+
ajcAdjust.CallStatic("disablePlayStoreKidsComplianceInDelay");
749+
}
750+
700751
// used for testing only
701752
public static void SetTestOptions(Dictionary<string, string> testOptions)
702753
{

Assets/Adjust/Scripts/AdjustConfig.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public class AdjustConfig
1414
public bool? IsDeviceIdsReadingOnceEnabled { get; set; }
1515
public bool? IsDeferredDeeplinkOpeningEnabled { get; set; }
1616
public bool? IsAppTrackingTransparencyUsageEnabled { get; set; }
17+
public bool? IsFirstSessionDelayEnabled { get; set; }
1718
public bool? AllowSuppressLogLevel { get; private set; }
1819
public bool? IsDataResidency { get; private set; }
1920
public bool? ShouldUseSubdomains { get; private set; }

Assets/Adjust/Scripts/AdjustiOS.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ private static extern void _AdjustInitSdk(
6464
int isCostDataInAttributionEnabled,
6565
int isDeviceIdsReadingOnceEnabled,
6666
int isAppTrackingTransparencyUsageEnabled,
67+
int isFirstSessionDelayEnabled,
6768
int isDeferredDeeplinkOpeningEnabled,
6869
AdjustDelegateAttributionCallback attributionCallback,
6970
AdjustDelegateEventSuccessCallback eventSuccessCallback,
@@ -246,6 +247,18 @@ private static extern void _AdjustVerifyAndTrackAppStorePurchase(
246247
string jsonPartnerParameters,
247248
AdjustDelegatePurchaseVerificationCallback callback);
248249

250+
[DllImport("__Internal")]
251+
private static extern void _AdjustEndFirstSessionDelay();
252+
253+
[DllImport("__Internal")]
254+
private static extern void _AdjustEnableCoppaComplianceInDelay();
255+
256+
[DllImport("__Internal")]
257+
private static extern void _AdjustDisableCoppaComplianceInDelay();
258+
259+
[DllImport("__Internal")]
260+
private static extern void _AdjustSetExternalDeviceIdInDelay(string externalDeviceId);
261+
249262
// public API
250263
public AdjustiOS() {}
251264

@@ -271,6 +284,7 @@ public static void InitSdk(AdjustConfig adjustConfig)
271284
int isCostDataInAttributionEnabled = AdjustUtils.ConvertBool(adjustConfig.IsCostDataInAttributionEnabled);
272285
int isDeviceIdsReadingOnceEnabled = AdjustUtils.ConvertBool(adjustConfig.IsDeviceIdsReadingOnceEnabled);
273286
int isAppTrackingTransparencyUsageEnabled = AdjustUtils.ConvertBool(adjustConfig.IsAppTrackingTransparencyUsageEnabled);
287+
int isFirstSessionDelayEnabled = AdjustUtils.ConvertBool(adjustConfig.IsFirstSessionDelayEnabled);
274288
int shouldUseSubdomains = AdjustUtils.ConvertBool(adjustConfig.ShouldUseSubdomains);
275289
int isDataResidency = AdjustUtils.ConvertBool(adjustConfig.IsDataResidency);
276290
appAttributionCallback = adjustConfig.AttributionChangedDelegate;
@@ -303,6 +317,7 @@ public static void InitSdk(AdjustConfig adjustConfig)
303317
isCostDataInAttributionEnabled,
304318
isDeviceIdsReadingOnceEnabled,
305319
isAppTrackingTransparencyUsageEnabled,
320+
isFirstSessionDelayEnabled,
306321
isDeferredDeeplinkOpeningEnabled,
307322
AttributionCallbackMonoPInvoke,
308323
EventSuccessCallbackMonoPInvoke,
@@ -611,6 +626,26 @@ public static void VerifyAndTrackAppStorePurchase(
611626
VerifyAndTrackCallbackMonoPInvoke);
612627
}
613628

629+
public static void EndFirstSessionDelay()
630+
{
631+
_AdjustEndFirstSessionDelay();
632+
}
633+
634+
public static void EnableCoppaComplianceInDelay()
635+
{
636+
_AdjustEnableCoppaComplianceInDelay();
637+
}
638+
639+
public static void DisableCoppaComplianceInDelay()
640+
{
641+
_AdjustDisableCoppaComplianceInDelay();
642+
}
643+
644+
public static void SetExternalDeviceIdInDelay(string externalDeviceId)
645+
{
646+
_AdjustSetExternalDeviceIdInDelay(externalDeviceId);
647+
}
648+
614649
// used for testing only (don't use this in your app)
615650
public static void SetTestOptions(Dictionary<string, string> testOptions)
616651
{

0 commit comments

Comments
 (0)