diff --git a/Adjust.podspec b/Adjust.podspec index 2d5853b25..83cd9bc0b 100644 --- a/Adjust.podspec +++ b/Adjust.podspec @@ -1,11 +1,11 @@ Pod::Spec.new do |s| s.name = "Adjust" - s.version = "4.36.0" + s.version = "4.37.0" s.summary = "This is the iOS SDK of adjust. You can read more about it at http://adjust.com." s.homepage = "https://github.com/adjust/ios_sdk" s.license = { :type => 'MIT', :file => 'MIT-LICENSE' } s.author = { "Adjust" => "sdk@adjust.com" } - s.source = { :git => "https://github.com/adjust/ios_sdk.git", :tag => "v4.36.0" } + s.source = { :git => "https://github.com/adjust/ios_sdk.git", :tag => "v4.37.0" } s.ios.deployment_target = '9.0' s.tvos.deployment_target = '9.0' s.framework = 'SystemConfiguration' diff --git a/Adjust.xcodeproj/project.pbxproj b/Adjust.xcodeproj/project.pbxproj index cb43483ba..8ba87afc7 100644 --- a/Adjust.xcodeproj/project.pbxproj +++ b/Adjust.xcodeproj/project.pbxproj @@ -826,8 +826,6 @@ dstPath = "include/$(PRODUCT_NAME)"; dstSubfolderSpec = 16; files = ( - 0ABE89EB2A8E4AA60099CCF5 /* ADJPurchase.h in CopyFiles */, - 0ABE89EC2A8E4AA60099CCF5 /* ADJPurchaseVerificationResult.h in CopyFiles */, 0AB1C97627DD450D00509231 /* AdjustSdk.h in CopyFiles */, 0AB1C9BA27DD4D7C00509231 /* Adjust.h in CopyFiles */, 0AB1C9BB27DD4D7C00509231 /* ADJLogger.h in CopyFiles */, @@ -839,9 +837,11 @@ 0AB1C9C127DD4D7C00509231 /* ADJEventSuccess.h in CopyFiles */, 0AB1C9C227DD4D7C00509231 /* ADJEventFailure.h in CopyFiles */, 0AB1C9C327DD4D7C00509231 /* ADJSubscription.h in CopyFiles */, - 0AB1C9C427DD4D7C00509231 /* ADJThirdPartySharing.h in CopyFiles */, 0AB1C9C527DD4D7C00509231 /* ADJAdRevenue.h in CopyFiles */, 0AB1C9C627DD4D7C00509231 /* ADJLinkResolution.h in CopyFiles */, + 0AB1C9C427DD4D7C00509231 /* ADJThirdPartySharing.h in CopyFiles */, + 0ABE89EB2A8E4AA60099CCF5 /* ADJPurchase.h in CopyFiles */, + 0ABE89EC2A8E4AA60099CCF5 /* ADJPurchaseVerificationResult.h in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -851,8 +851,6 @@ dstPath = "include/$(PRODUCT_NAME)"; dstSubfolderSpec = 16; files = ( - 0ABE89ED2A8E4AB70099CCF5 /* ADJPurchase.h in CopyFiles */, - 0ABE89EE2A8E4AB70099CCF5 /* ADJPurchaseVerificationResult.h in CopyFiles */, 0AB1CA2A27DF462200509231 /* AdjustSdkTv.h in CopyFiles */, 0AB1CA5227DF4A2B00509231 /* Adjust.h in CopyFiles */, 0AB1CA5327DF4A2B00509231 /* ADJLogger.h in CopyFiles */, @@ -864,9 +862,11 @@ 0AB1CA5927DF4A2B00509231 /* ADJEventSuccess.h in CopyFiles */, 0AB1CA5A27DF4A2B00509231 /* ADJEventFailure.h in CopyFiles */, 0AB1CA5B27DF4A2B00509231 /* ADJSubscription.h in CopyFiles */, - 0AB1CA5C27DF4A2B00509231 /* ADJThirdPartySharing.h in CopyFiles */, 0AB1CA5D27DF4A2B00509231 /* ADJAdRevenue.h in CopyFiles */, 0AB1CA5E27DF4A2B00509231 /* ADJLinkResolution.h in CopyFiles */, + 0AB1CA5C27DF4A2B00509231 /* ADJThirdPartySharing.h in CopyFiles */, + 0ABE89ED2A8E4AB70099CCF5 /* ADJPurchase.h in CopyFiles */, + 0ABE89EE2A8E4AB70099CCF5 /* ADJPurchaseVerificationResult.h in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -876,8 +876,6 @@ dstPath = "include/$(PRODUCT_NAME)"; dstSubfolderSpec = 16; files = ( - 0ABE89EF2A8E4AF90099CCF5 /* ADJPurchase.h in CopyFiles */, - 0ABE89F02A8E4AF90099CCF5 /* ADJPurchaseVerificationResult.h in CopyFiles */, 0AB1CA6D27DF5D3200509231 /* AdjustSdkIm.h in CopyFiles */, 0AB1CA9527DF621D00509231 /* Adjust.h in CopyFiles */, 0AB1CA9627DF621D00509231 /* ADJLogger.h in CopyFiles */, @@ -889,9 +887,11 @@ 0AB1CA9C27DF621D00509231 /* ADJEventFailure.h in CopyFiles */, 0AB1CA9D27DF621D00509231 /* ADJSubscription.h in CopyFiles */, 0AB1CAA127DF626000509231 /* ADJAttribution.h in CopyFiles */, - 0AB1CA9E27DF621D00509231 /* ADJThirdPartySharing.h in CopyFiles */, 0AB1CA9F27DF621D00509231 /* ADJAdRevenue.h in CopyFiles */, 0AB1CAA027DF621D00509231 /* ADJLinkResolution.h in CopyFiles */, + 0AB1CA9E27DF621D00509231 /* ADJThirdPartySharing.h in CopyFiles */, + 0ABE89EF2A8E4AF90099CCF5 /* ADJPurchase.h in CopyFiles */, + 0ABE89F02A8E4AF90099CCF5 /* ADJPurchaseVerificationResult.h in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -901,9 +901,12 @@ dstPath = "include/$(PRODUCT_NAME)"; dstSubfolderSpec = 16; files = ( - 0ABE89F12A8E4B060099CCF5 /* ADJPurchase.h in CopyFiles */, - 0ABE89F22A8E4B060099CCF5 /* ADJPurchaseVerificationResult.h in CopyFiles */, + 0AB1CB3E27DF69B700509231 /* AdjustBridge.h in CopyFiles */, + 0AB1CB3F27DF69B700509231 /* AdjustBridgeRegister.h in CopyFiles */, 0AB1CADA27DF671300509231 /* AdjustSdkWebBridge.h in CopyFiles */, + 0AB1CB4027DF69B700509231 /* WebViewJavascriptBridge_JS.h in CopyFiles */, + 0AB1CB4127DF69B700509231 /* WebViewJavascriptBridgeBase.h in CopyFiles */, + 0AB1CB4227DF69B700509231 /* WKWebViewJavascriptBridge.h in CopyFiles */, 0AB1CB3127DF699E00509231 /* Adjust.h in CopyFiles */, 0AB1CB3227DF699E00509231 /* ADJLogger.h in CopyFiles */, 0AB1CB3327DF699E00509231 /* ADJEvent.h in CopyFiles */, @@ -914,14 +917,11 @@ 0AB1CB3827DF699E00509231 /* ADJEventSuccess.h in CopyFiles */, 0AB1CB3927DF699E00509231 /* ADJEventFailure.h in CopyFiles */, 0AB1CB3A27DF699E00509231 /* ADJSubscription.h in CopyFiles */, - 0AB1CB3B27DF699E00509231 /* ADJThirdPartySharing.h in CopyFiles */, 0AB1CB3C27DF699E00509231 /* ADJAdRevenue.h in CopyFiles */, 0AB1CB3D27DF699E00509231 /* ADJLinkResolution.h in CopyFiles */, - 0AB1CB3E27DF69B700509231 /* AdjustBridge.h in CopyFiles */, - 0AB1CB3F27DF69B700509231 /* AdjustBridgeRegister.h in CopyFiles */, - 0AB1CB4027DF69B700509231 /* WebViewJavascriptBridge_JS.h in CopyFiles */, - 0AB1CB4127DF69B700509231 /* WebViewJavascriptBridgeBase.h in CopyFiles */, - 0AB1CB4227DF69B700509231 /* WKWebViewJavascriptBridge.h in CopyFiles */, + 0AB1CB3B27DF699E00509231 /* ADJThirdPartySharing.h in CopyFiles */, + 0ABE89F12A8E4B060099CCF5 /* ADJPurchase.h in CopyFiles */, + 0ABE89F22A8E4B060099CCF5 /* ADJPurchaseVerificationResult.h in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1787,79 +1787,79 @@ 9D0E2E16210B575600133B4F /* Adjust */ = { isa = PBXGroup; children = ( - 9D0E2E17210B575600133B4F /* ADJConfig.h */, - 9D0E2E19210B575600133B4F /* ADJTimerOnce.m */, - 9D0E2E1A210B575600133B4F /* ADJAttributionHandler.m */, - 9D0E2E1B210B575600133B4F /* Adjust.h */, - 9D0E2E1C210B575600133B4F /* ADJActivityPackage.h */, - 9D0E2E1D210B575600133B4F /* ADJRequestHandler.m */, - 9D0E2E1F210B575600133B4F /* ADJAttribution.h */, - 9D0E2E21210B575600133B4F /* ADJSdkClickHandler.m */, - 9D0E2E22210B575600133B4F /* ADJActivityKind.h */, - 9D0E2E23210B575600133B4F /* ADJEvent.m */, - 9D0E2E24210B575600133B4F /* ADJPackageHandler.h */, - 9D0E2E25210B575600133B4F /* ADJPackageBuilder.h */, - 9D0E2E26210B575600133B4F /* ADJResponseData.h */, - 9D0E2E27210B575600133B4F /* ADJSessionSuccess.m */, - 9D0E2E28210B575600133B4F /* ADJEventFailure.m */, - 9D0E2E29210B575600133B4F /* ADJAdjustFactory.h */, - 9D0E2E2A210B575600133B4F /* ADJEventSuccess.m */, - 9D0E2E2B210B575600133B4F /* ADJActivityState.m */, - 9D0E2E2C210B575600133B4F /* ADJSessionFailure.m */, - 9D0E2E2D210B575600133B4F /* ADJUtil.h */, + 9D0E2E3F210B575600133B4F /* ADJAdditions */, 9D0E2E2F210B575600133B4F /* ADJActivityHandler.h */, - 9D0E2E30210B575600133B4F /* ADJTimerCycle.m */, - 9D0E2E31210B575600133B4F /* ADJSessionParameters.m */, - 9D0E2E32210B575600133B4F /* ADJLogger.m */, - 9D0E2E33210B575600133B4F /* ADJBackoffStrategy.m */, - 9D0E2E34210B575600133B4F /* ADJUserDefaults.h */, - 9D0E2E35210B575600133B4F /* Adjust.m */, - 9D0E2E36210B575600133B4F /* ADJAttributionHandler.h */, - 9D0E2E37210B575600133B4F /* ADJTimerOnce.h */, - 9D0E2E39210B575600133B4F /* ADJConfig.m */, - 9D0E2E3A210B575600133B4F /* ADJPackageHandler.m */, - 9D0E2E3B210B575600133B4F /* ADJEvent.h */, - 9D0E2E3C210B575600133B4F /* ADJSdkClickHandler.h */, + 9D0E2E59210B575600133B4F /* ADJActivityHandler.m */, + 9D0E2E22210B575600133B4F /* ADJActivityKind.h */, 9D0E2E3D210B575600133B4F /* ADJActivityKind.m */, - 9D0E2E3F210B575600133B4F /* ADJAdditions */, - 9D0E2E46210B575600133B4F /* ADJAttribution.m */, - 9D0E2E48210B575600133B4F /* ADJRequestHandler.h */, + 9D0E2E1C210B575600133B4F /* ADJActivityPackage.h */, 9D0E2E49210B575600133B4F /* ADJActivityPackage.m */, - 9D0E2E4A210B575600133B4F /* ADJUtil.m */, - 9D0E2E4B210B575600133B4F /* ADJSessionFailure.h */, 9D0E2E4C210B575600133B4F /* ADJActivityState.h */, + 9D0E2E2B210B575600133B4F /* ADJActivityState.m */, + 9D0E2E29210B575600133B4F /* ADJAdjustFactory.h */, 9D0E2E4D210B575600133B4F /* ADJAdjustFactory.m */, - 9D0E2E4E210B575600133B4F /* ADJEventSuccess.h */, - 9D0E2E4F210B575600133B4F /* ADJEventFailure.h */, - 9D0E2E50210B575600133B4F /* ADJResponseData.m */, - 9D0E2E51210B575600133B4F /* ADJSessionSuccess.h */, - 9D0E2E52210B575600133B4F /* ADJPackageBuilder.m */, - 9D0E2E53210B575600133B4F /* ADJUserDefaults.m */, - 9D0E2E54210B575600133B4F /* ADJBackoffStrategy.h */, - 9D0E2E55210B575600133B4F /* ADJLogger.h */, - 9D0E2E56210B575600133B4F /* ADJSessionParameters.h */, - 9D0E2E58210B575600133B4F /* ADJTimerCycle.h */, - 9D0E2E59210B575600133B4F /* ADJActivityHandler.m */, - 9D2F24032447DD6000B7CA90 /* ADJSubscription.h */, - 9D2F24022447DD6000B7CA90 /* ADJSubscription.m */, - 6FBEE93224E4232800FEF3F1 /* ADJUrlStrategy.h */, - 6FBEE93324E4232800FEF3F1 /* ADJUrlStrategy.m */, - 6F84511025B1B1380004C7C0 /* ADJThirdPartySharing.h */, - 6F84512325B1B1380004C7C0 /* ADJThirdPartySharing.m */, 9D3A2ACF262650C300BD6E44 /* ADJAdRevenue.h */, 9D3A2AD0262650C300BD6E44 /* ADJAdRevenue.m */, - 9DF92D8E2630ED7B000FC3FC /* ADJPackageParams.h */, - 9DF92D8D2630ED7B000FC3FC /* ADJPackageParams.m */, + 9D0E2E1F210B575600133B4F /* ADJAttribution.h */, + 9D0E2E46210B575600133B4F /* ADJAttribution.m */, + 9D0E2E36210B575600133B4F /* ADJAttributionHandler.h */, + 9D0E2E1A210B575600133B4F /* ADJAttributionHandler.m */, + 9D0E2E54210B575600133B4F /* ADJBackoffStrategy.h */, + 9D0E2E33210B575600133B4F /* ADJBackoffStrategy.m */, + 9D0E2E17210B575600133B4F /* ADJConfig.h */, + 9D0E2E39210B575600133B4F /* ADJConfig.m */, + 9D0E2E3B210B575600133B4F /* ADJEvent.h */, + 9D0E2E23210B575600133B4F /* ADJEvent.m */, + 9D0E2E4F210B575600133B4F /* ADJEventFailure.h */, + 9D0E2E28210B575600133B4F /* ADJEventFailure.m */, + 9D0E2E4E210B575600133B4F /* ADJEventSuccess.h */, + 9D0E2E2A210B575600133B4F /* ADJEventSuccess.m */, 6FAB78912636DCE700773869 /* ADJLinkResolution.h */, 6FAB78902636DCE700773869 /* ADJLinkResolution.m */, - 9D49D168290FEBD100042345 /* ADJSKAdNetwork.h */, - 9D49D169290FEBD100042345 /* ADJSKAdNetwork.m */, + 9D0E2E55210B575600133B4F /* ADJLogger.h */, + 9D0E2E32210B575600133B4F /* ADJLogger.m */, + 9D0E2E25210B575600133B4F /* ADJPackageBuilder.h */, + 9D0E2E52210B575600133B4F /* ADJPackageBuilder.m */, + 9D0E2E24210B575600133B4F /* ADJPackageHandler.h */, + 9D0E2E3A210B575600133B4F /* ADJPackageHandler.m */, + 9DF92D8E2630ED7B000FC3FC /* ADJPackageParams.h */, + 9DF92D8D2630ED7B000FC3FC /* ADJPackageParams.m */, 0ABE89E02A8E49D40099CCF5 /* ADJPurchase.h */, 0ABE89E12A8E49D40099CCF5 /* ADJPurchase.m */, 0ABE89E22A8E49D40099CCF5 /* ADJPurchaseVerificationHandler.h */, 0ABE89E32A8E49D40099CCF5 /* ADJPurchaseVerificationHandler.m */, 0ABE89E42A8E49D40099CCF5 /* ADJPurchaseVerificationResult.h */, 0ABE89DF2A8E49D40099CCF5 /* ADJPurchaseVerificationResult.m */, + 9D0E2E48210B575600133B4F /* ADJRequestHandler.h */, + 9D0E2E1D210B575600133B4F /* ADJRequestHandler.m */, + 9D0E2E26210B575600133B4F /* ADJResponseData.h */, + 9D0E2E50210B575600133B4F /* ADJResponseData.m */, + 9D0E2E3C210B575600133B4F /* ADJSdkClickHandler.h */, + 9D0E2E21210B575600133B4F /* ADJSdkClickHandler.m */, + 9D0E2E4B210B575600133B4F /* ADJSessionFailure.h */, + 9D0E2E2C210B575600133B4F /* ADJSessionFailure.m */, + 9D0E2E56210B575600133B4F /* ADJSessionParameters.h */, + 9D0E2E31210B575600133B4F /* ADJSessionParameters.m */, + 9D0E2E51210B575600133B4F /* ADJSessionSuccess.h */, + 9D0E2E27210B575600133B4F /* ADJSessionSuccess.m */, + 9D49D168290FEBD100042345 /* ADJSKAdNetwork.h */, + 9D49D169290FEBD100042345 /* ADJSKAdNetwork.m */, + 9D2F24032447DD6000B7CA90 /* ADJSubscription.h */, + 9D2F24022447DD6000B7CA90 /* ADJSubscription.m */, + 6F84511025B1B1380004C7C0 /* ADJThirdPartySharing.h */, + 6F84512325B1B1380004C7C0 /* ADJThirdPartySharing.m */, + 9D0E2E58210B575600133B4F /* ADJTimerCycle.h */, + 9D0E2E30210B575600133B4F /* ADJTimerCycle.m */, + 9D0E2E37210B575600133B4F /* ADJTimerOnce.h */, + 9D0E2E19210B575600133B4F /* ADJTimerOnce.m */, + 6FBEE93224E4232800FEF3F1 /* ADJUrlStrategy.h */, + 6FBEE93324E4232800FEF3F1 /* ADJUrlStrategy.m */, + 9D0E2E34210B575600133B4F /* ADJUserDefaults.h */, + 9D0E2E53210B575600133B4F /* ADJUserDefaults.m */, + 9D0E2E1B210B575600133B4F /* Adjust.h */, + 9D0E2E35210B575600133B4F /* Adjust.m */, + 9D0E2E2D210B575600133B4F /* ADJUtil.h */, + 9D0E2E4A210B575600133B4F /* ADJUtil.m */, ); path = Adjust; sourceTree = SOURCE_ROOT; @@ -1979,79 +1979,79 @@ 9DEAF0B0210072BC005CAEDB /* Adjust */ = { isa = PBXGroup; children = ( - 9DEAF0B1210072BC005CAEDB /* ADJConfig.h */, - 9DEAF0B3210072BC005CAEDB /* ADJTimerOnce.m */, - 9DEAF0B4210072BC005CAEDB /* ADJAttributionHandler.m */, - 9DEAF0B5210072BC005CAEDB /* Adjust.h */, - 9DEAF0B6210072BC005CAEDB /* ADJActivityPackage.h */, - 9DEAF0B7210072BC005CAEDB /* ADJRequestHandler.m */, - 9DEAF0B9210072BC005CAEDB /* ADJAttribution.h */, - 9DEAF0BB210072BC005CAEDB /* ADJSdkClickHandler.m */, - 9DEAF0BC210072BC005CAEDB /* ADJActivityKind.h */, - 9DEAF0BD210072BC005CAEDB /* ADJEvent.m */, - 9DEAF0BE210072BC005CAEDB /* ADJPackageHandler.h */, - 9DEAF0BF210072BC005CAEDB /* ADJPackageBuilder.h */, - 9DEAF0C0210072BC005CAEDB /* ADJResponseData.h */, - 9DEAF0C1210072BC005CAEDB /* ADJSessionSuccess.m */, - 9DEAF0C2210072BC005CAEDB /* ADJEventFailure.m */, - 9DEAF0C3210072BC005CAEDB /* ADJAdjustFactory.h */, - 9DEAF0C4210072BC005CAEDB /* ADJEventSuccess.m */, - 9DEAF0C5210072BC005CAEDB /* ADJActivityState.m */, - 9DEAF0C6210072BC005CAEDB /* ADJSessionFailure.m */, - 9DEAF0C7210072BC005CAEDB /* ADJUtil.h */, + 9DEAF0D9210072BC005CAEDB /* ADJAdditions */, 9DEAF0C9210072BC005CAEDB /* ADJActivityHandler.h */, - 9DEAF0CA210072BC005CAEDB /* ADJTimerCycle.m */, - 9DEAF0CB210072BC005CAEDB /* ADJSessionParameters.m */, - 9DEAF0CC210072BC005CAEDB /* ADJLogger.m */, - 9DEAF0CD210072BC005CAEDB /* ADJBackoffStrategy.m */, - 9DEAF0CE210072BC005CAEDB /* ADJUserDefaults.h */, - 9DEAF0CF210072BC005CAEDB /* Adjust.m */, - 9DEAF0D0210072BC005CAEDB /* ADJAttributionHandler.h */, - 9DEAF0D1210072BC005CAEDB /* ADJTimerOnce.h */, - 9DEAF0D3210072BC005CAEDB /* ADJConfig.m */, - 9DEAF0D4210072BC005CAEDB /* ADJPackageHandler.m */, - 9DEAF0D5210072BC005CAEDB /* ADJEvent.h */, - 9DEAF0D6210072BC005CAEDB /* ADJSdkClickHandler.h */, + 9DEAF0F3210072BC005CAEDB /* ADJActivityHandler.m */, + 9DEAF0BC210072BC005CAEDB /* ADJActivityKind.h */, 9DEAF0D7210072BC005CAEDB /* ADJActivityKind.m */, - 9DEAF0D9210072BC005CAEDB /* ADJAdditions */, - 9DEAF0E0210072BC005CAEDB /* ADJAttribution.m */, - 9DEAF0E2210072BC005CAEDB /* ADJRequestHandler.h */, + 9DEAF0B6210072BC005CAEDB /* ADJActivityPackage.h */, 9DEAF0E3210072BC005CAEDB /* ADJActivityPackage.m */, - 9DEAF0E4210072BC005CAEDB /* ADJUtil.m */, - 9DEAF0E5210072BC005CAEDB /* ADJSessionFailure.h */, 9DEAF0E6210072BC005CAEDB /* ADJActivityState.h */, + 9DEAF0C5210072BC005CAEDB /* ADJActivityState.m */, + 9DEAF0C3210072BC005CAEDB /* ADJAdjustFactory.h */, 9DEAF0E7210072BC005CAEDB /* ADJAdjustFactory.m */, - 9DEAF0E8210072BC005CAEDB /* ADJEventSuccess.h */, - 9DEAF0E9210072BC005CAEDB /* ADJEventFailure.h */, - 9DEAF0EA210072BC005CAEDB /* ADJResponseData.m */, - 9DEAF0EB210072BC005CAEDB /* ADJSessionSuccess.h */, - 9DEAF0EC210072BC005CAEDB /* ADJPackageBuilder.m */, - 9DEAF0ED210072BC005CAEDB /* ADJUserDefaults.m */, - 9DEAF0EE210072BC005CAEDB /* ADJBackoffStrategy.h */, - 9DEAF0EF210072BC005CAEDB /* ADJLogger.h */, - 9DEAF0F0210072BC005CAEDB /* ADJSessionParameters.h */, - 9DEAF0F2210072BC005CAEDB /* ADJTimerCycle.h */, - 9DEAF0F3210072BC005CAEDB /* ADJActivityHandler.m */, - 9D2F23FA2447DD2500B7CA90 /* ADJSubscription.h */, - 9D2F23FB2447DD2500B7CA90 /* ADJSubscription.m */, - 6FBEE92A24E4230700FEF3F1 /* ADJUrlStrategy.h */, - 6FBEE92B24E4230700FEF3F1 /* ADJUrlStrategy.m */, - 9D651C8625B26DF4006D69D6 /* ADJThirdPartySharing.h */, - 9D651C8725B26DF5006D69D6 /* ADJThirdPartySharing.m */, 9D3A2AC72626505800BD6E44 /* ADJAdRevenue.h */, 9D3A2AC82626505800BD6E44 /* ADJAdRevenue.m */, - 9DF92D892630ED59000FC3FC /* ADJPackageParams.h */, - 9DF92D8A2630ED59000FC3FC /* ADJPackageParams.m */, + 9DEAF0B9210072BC005CAEDB /* ADJAttribution.h */, + 9DEAF0E0210072BC005CAEDB /* ADJAttribution.m */, + 9DEAF0D0210072BC005CAEDB /* ADJAttributionHandler.h */, + 9DEAF0B4210072BC005CAEDB /* ADJAttributionHandler.m */, + 9DEAF0EE210072BC005CAEDB /* ADJBackoffStrategy.h */, + 9DEAF0CD210072BC005CAEDB /* ADJBackoffStrategy.m */, + 9DEAF0B1210072BC005CAEDB /* ADJConfig.h */, + 9DEAF0D3210072BC005CAEDB /* ADJConfig.m */, + 9DEAF0D5210072BC005CAEDB /* ADJEvent.h */, + 9DEAF0BD210072BC005CAEDB /* ADJEvent.m */, + 9DEAF0E9210072BC005CAEDB /* ADJEventFailure.h */, + 9DEAF0C2210072BC005CAEDB /* ADJEventFailure.m */, + 9DEAF0E8210072BC005CAEDB /* ADJEventSuccess.h */, + 9DEAF0C4210072BC005CAEDB /* ADJEventSuccess.m */, 6FAB78762636DCB600773869 /* ADJLinkResolution.h */, 6FAB78772636DCB600773869 /* ADJLinkResolution.m */, - 9D49D160290FEBB200042345 /* ADJSKAdNetwork.h */, - 9D49D161290FEBB200042345 /* ADJSKAdNetwork.m */, + 9DEAF0EF210072BC005CAEDB /* ADJLogger.h */, + 9DEAF0CC210072BC005CAEDB /* ADJLogger.m */, + 9DEAF0BF210072BC005CAEDB /* ADJPackageBuilder.h */, + 9DEAF0EC210072BC005CAEDB /* ADJPackageBuilder.m */, + 9DEAF0BE210072BC005CAEDB /* ADJPackageHandler.h */, + 9DEAF0D4210072BC005CAEDB /* ADJPackageHandler.m */, + 9DF92D892630ED59000FC3FC /* ADJPackageParams.h */, + 9DF92D8A2630ED59000FC3FC /* ADJPackageParams.m */, 0ABE89C72A8E49B50099CCF5 /* ADJPurchase.h */, 0ABE89CA2A8E49B50099CCF5 /* ADJPurchase.m */, 0ABE89CC2A8E49B50099CCF5 /* ADJPurchaseVerificationHandler.h */, 0ABE89C82A8E49B50099CCF5 /* ADJPurchaseVerificationHandler.m */, 0ABE89C92A8E49B50099CCF5 /* ADJPurchaseVerificationResult.h */, 0ABE89CB2A8E49B50099CCF5 /* ADJPurchaseVerificationResult.m */, + 9DEAF0E2210072BC005CAEDB /* ADJRequestHandler.h */, + 9DEAF0B7210072BC005CAEDB /* ADJRequestHandler.m */, + 9DEAF0C0210072BC005CAEDB /* ADJResponseData.h */, + 9DEAF0EA210072BC005CAEDB /* ADJResponseData.m */, + 9DEAF0D6210072BC005CAEDB /* ADJSdkClickHandler.h */, + 9DEAF0BB210072BC005CAEDB /* ADJSdkClickHandler.m */, + 9DEAF0E5210072BC005CAEDB /* ADJSessionFailure.h */, + 9DEAF0C6210072BC005CAEDB /* ADJSessionFailure.m */, + 9DEAF0F0210072BC005CAEDB /* ADJSessionParameters.h */, + 9DEAF0CB210072BC005CAEDB /* ADJSessionParameters.m */, + 9DEAF0EB210072BC005CAEDB /* ADJSessionSuccess.h */, + 9DEAF0C1210072BC005CAEDB /* ADJSessionSuccess.m */, + 9D49D160290FEBB200042345 /* ADJSKAdNetwork.h */, + 9D49D161290FEBB200042345 /* ADJSKAdNetwork.m */, + 9D2F23FA2447DD2500B7CA90 /* ADJSubscription.h */, + 9D2F23FB2447DD2500B7CA90 /* ADJSubscription.m */, + 9D651C8625B26DF4006D69D6 /* ADJThirdPartySharing.h */, + 9D651C8725B26DF5006D69D6 /* ADJThirdPartySharing.m */, + 9DEAF0F2210072BC005CAEDB /* ADJTimerCycle.h */, + 9DEAF0CA210072BC005CAEDB /* ADJTimerCycle.m */, + 9DEAF0D1210072BC005CAEDB /* ADJTimerOnce.h */, + 9DEAF0B3210072BC005CAEDB /* ADJTimerOnce.m */, + 6FBEE92A24E4230700FEF3F1 /* ADJUrlStrategy.h */, + 6FBEE92B24E4230700FEF3F1 /* ADJUrlStrategy.m */, + 9DEAF0CE210072BC005CAEDB /* ADJUserDefaults.h */, + 9DEAF0ED210072BC005CAEDB /* ADJUserDefaults.m */, + 9DEAF0B5210072BC005CAEDB /* Adjust.h */, + 9DEAF0CF210072BC005CAEDB /* Adjust.m */, + 9DEAF0C7210072BC005CAEDB /* ADJUtil.h */, + 9DEAF0E4210072BC005CAEDB /* ADJUtil.m */, ); path = Adjust; sourceTree = SOURCE_ROOT; @@ -2324,8 +2324,6 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 0ABE89EA2A8E49D40099CCF5 /* ADJPurchaseVerificationResult.h in Headers */, - 0ABE89E62A8E49D40099CCF5 /* ADJPurchase.h in Headers */, 9D0E2E06210B570600133B4F /* AdjustSdkWebBridge.h in Headers */, 9D0E2EBA210B575600133B4F /* AdjustBridge.h in Headers */, 9D0E2EAF210B575600133B4F /* AdjustBridgeRegister.h in Headers */, @@ -2343,11 +2341,13 @@ 9D0E2E9E210B575600133B4F /* ADJSessionFailure.h in Headers */, 9D0E2EA4210B575600133B4F /* ADJSessionSuccess.h in Headers */, 9D0E2EA8210B575600133B4F /* ADJLogger.h in Headers */, + 9D3A2AD1262650C300BD6E44 /* ADJAdRevenue.h in Headers */, + 6FAB78932636DCE700773869 /* ADJLinkResolution.h in Headers */, 6F84512425B1B1380004C7C0 /* ADJThirdPartySharing.h in Headers */, 0ABE89E82A8E49D40099CCF5 /* ADJPurchaseVerificationHandler.h in Headers */, + 0ABE89E62A8E49D40099CCF5 /* ADJPurchase.h in Headers */, + 0ABE89EA2A8E49D40099CCF5 /* ADJPurchaseVerificationResult.h in Headers */, 9D49D16A290FEBD100042345 /* ADJSKAdNetwork.h in Headers */, - 6FAB78932636DCE700773869 /* ADJLinkResolution.h in Headers */, - 9D3A2AD1262650C300BD6E44 /* ADJAdRevenue.h in Headers */, 9D0E2E7D210B575600133B4F /* ADJAdjustFactory.h in Headers */, 9D0E2E76210B575600133B4F /* ADJActivityKind.h in Headers */, 9D0E2E88210B575600133B4F /* ADJUserDefaults.h in Headers */, @@ -2376,8 +2376,6 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 0ABE89CF2A8E49B50099CCF5 /* ADJPurchaseVerificationResult.h in Headers */, - 0ABE89CD2A8E49B50099CCF5 /* ADJPurchase.h in Headers */, 9DE354D62100726300D211C9 /* AdjustSdkIm.h in Headers */, 9DEAF0F9210072BC005CAEDB /* Adjust.h in Headers */, 6FBEE92C24E4230800FEF3F1 /* ADJUrlStrategy.h in Headers */, @@ -2390,10 +2388,12 @@ 9DEAF12C210072BC005CAEDB /* ADJEventFailure.h in Headers */, 9DEAF128210072BC005CAEDB /* ADJSessionFailure.h in Headers */, 9DEAF12B210072BC005CAEDB /* ADJEventSuccess.h in Headers */, - 9D651C8825B26DF5006D69D6 /* ADJThirdPartySharing.h in Headers */, + 9D3A2AC92626505800BD6E44 /* ADJAdRevenue.h in Headers */, 6FAB78782636DCB600773869 /* ADJLinkResolution.h in Headers */, + 9D651C8825B26DF5006D69D6 /* ADJThirdPartySharing.h in Headers */, + 0ABE89CD2A8E49B50099CCF5 /* ADJPurchase.h in Headers */, + 0ABE89CF2A8E49B50099CCF5 /* ADJPurchaseVerificationResult.h in Headers */, 9DF92D8B2630ED59000FC3FC /* ADJPackageParams.h in Headers */, - 9D3A2AC92626505800BD6E44 /* ADJAdRevenue.h in Headers */, 9DEAF107210072BC005CAEDB /* ADJAdjustFactory.h in Headers */, 9DEAF100210072BC005CAEDB /* ADJActivityKind.h in Headers */, 9DEAF112210072BC005CAEDB /* ADJUserDefaults.h in Headers */, @@ -2423,8 +2423,6 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 0ABE89C42A8E49500099CCF5 /* ADJPurchase.h in Headers */, - 0ABE89C22A8E49500099CCF5 /* ADJPurchaseVerificationResult.h in Headers */, 9DFA37B71C0F21D600782607 /* AdjustSdk.h in Headers */, 9DF9C9431D6F3CA5008E362F /* Adjust.h in Headers */, 9DF9C9231D6F3CA5008E362F /* ADJEvent.h in Headers */, @@ -2437,10 +2435,12 @@ 9DF9C9271D6F3CA5008E362F /* ADJEventSuccess.h in Headers */, 9DF9C9391D6F3CA5008E362F /* ADJSessionSuccess.h in Headers */, 9DF9C9371D6F3CA5008E362F /* ADJSessionFailure.h in Headers */, - 6FBE0C6E2577CDAC00EC2CE0 /* ADJThirdPartySharing.h in Headers */, + 9D3A2AC62626501D00BD6E44 /* ADJAdRevenue.h in Headers */, 6FAB786B2636DC8400773869 /* ADJLinkResolution.h in Headers */, + 6FBE0C6E2577CDAC00EC2CE0 /* ADJThirdPartySharing.h in Headers */, + 0ABE89C42A8E49500099CCF5 /* ADJPurchase.h in Headers */, + 0ABE89C22A8E49500099CCF5 /* ADJPurchaseVerificationResult.h in Headers */, 9DF92D872630ED3D000FC3FC /* ADJPackageParams.h in Headers */, - 9D3A2AC62626501D00BD6E44 /* ADJAdRevenue.h in Headers */, 9DDF24431F7BE4BA001C1A70 /* ADJUserDefaults.h in Headers */, 9DF9C9111D6F3CA5008E362F /* NSData+ADJAdditions.h in Headers */, 9DF9C9131D6F3CA5008E362F /* NSString+ADJAdditions.h in Headers */, @@ -2470,8 +2470,6 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 0ABE89DD2A8E49C20099CCF5 /* ADJPurchaseVerificationResult.h in Headers */, - 0ABE89DA2A8E49C20099CCF5 /* ADJPurchase.h in Headers */, 9DFB06131D747070006D48FC /* AdjustSdkTv.h in Headers */, 9DFB06941D7470C0006D48FC /* Adjust.h in Headers */, 9DFB06741D7470C0006D48FC /* ADJEvent.h in Headers */, @@ -2484,9 +2482,11 @@ 9DFB06781D7470C0006D48FC /* ADJEventSuccess.h in Headers */, 9DFB068A1D7470C0006D48FC /* ADJSessionSuccess.h in Headers */, 9DFB06881D7470C0006D48FC /* ADJSessionFailure.h in Headers */, - 9D651C9625B26E1B006D69D6 /* ADJThirdPartySharing.h in Headers */, - 6FAB78852636DCCD00773869 /* ADJLinkResolution.h in Headers */, 9D3A2ACD2626508F00BD6E44 /* ADJAdRevenue.h in Headers */, + 6FAB78852636DCCD00773869 /* ADJLinkResolution.h in Headers */, + 9D651C9625B26E1B006D69D6 /* ADJThirdPartySharing.h in Headers */, + 0ABE89DA2A8E49C20099CCF5 /* ADJPurchase.h in Headers */, + 0ABE89DD2A8E49C20099CCF5 /* ADJPurchaseVerificationResult.h in Headers */, 9DDF24451F7BE4E7001C1A70 /* ADJUserDefaults.h in Headers */, 9DFB06621D7470C0006D48FC /* NSData+ADJAdditions.h in Headers */, 9DFB06641D7470C0006D48FC /* NSString+ADJAdditions.h in Headers */, diff --git a/Adjust/ADJActivityHandler.h b/Adjust/ADJActivityHandler.h index 384c2fbe5..efb6ba6d8 100644 --- a/Adjust/ADJActivityHandler.h +++ b/Adjust/ADJActivityHandler.h @@ -65,7 +65,8 @@ - (NSString *_Nullable)adid; - (id _Nullable)initWithConfig:(ADJConfig *_Nullable)adjustConfig - savedPreLaunch:(ADJSavedPreLaunch * _Nullable)savedPreLaunch; + savedPreLaunch:(ADJSavedPreLaunch * _Nullable)savedPreLaunch + deeplinkResolutionCallback:(AdjustResolvedDeeplinkBlock _Nullable)deepLinkResolutionCallback; - (void)applicationDidBecomeActive; - (void)applicationWillResignActive; @@ -83,6 +84,9 @@ - (void)appWillOpenUrl:(NSURL * _Nullable)url withClickTime:(NSDate * _Nullable)clickTime; +- (void)processDeeplink:(NSURL * _Nullable)deeplink + clickTime:(NSDate * _Nullable)clickTime + completionHandler:(AdjustResolvedDeeplinkBlock _Nullable)completionHandler; - (void)setDeviceToken:(NSData * _Nullable)deviceToken; - (void)setPushToken:(NSString * _Nullable)deviceToken; - (void)setGdprForgetMe; @@ -128,8 +132,9 @@ @interface ADJActivityHandler : NSObject -- (id _Nullable)initWithConfig:(ADJConfig * _Nullable)adjustConfig - savedPreLaunch:(ADJSavedPreLaunch * _Nullable)savedPreLaunch; +- (id _Nullable)initWithConfig:(ADJConfig *_Nullable)adjustConfig + savedPreLaunch:(ADJSavedPreLaunch * _Nullable)savedPreLaunch + deeplinkResolutionCallback:(AdjustResolvedDeeplinkBlock _Nullable)deepLinkResolutionCallback; - (void)addSessionCallbackParameterI:(ADJActivityHandler * _Nullable)selfI key:(NSString * _Nullable)key diff --git a/Adjust/ADJActivityHandler.m b/Adjust/ADJActivityHandler.m index 191f4bcd8..f6ad60f23 100644 --- a/Adjust/ADJActivityHandler.m +++ b/Adjust/ADJActivityHandler.m @@ -106,6 +106,7 @@ @interface ADJActivityHandler() @property (nonatomic, copy) NSString* gdprPath; @property (nonatomic, copy) NSString* subscriptionPath; @property (nonatomic, copy) NSString* purchaseVerificationPath; +@property (nonatomic, copy) AdjustResolvedDeeplinkBlock cachedDeeplinkResolutionCallback; - (void)prepareDeeplinkI:(ADJActivityHandler *_Nullable)selfI responseData:(ADJAttributionResponseData *_Nullable)attributionResponseData NS_EXTENSION_UNAVAILABLE_IOS(""); @@ -118,9 +119,9 @@ @implementation ADJActivityHandler @synthesize attribution = _attribution; @synthesize trackingStatusManager = _trackingStatusManager; -- (id)initWithConfig:(ADJConfig *)adjustConfig - savedPreLaunch:(ADJSavedPreLaunch *)savedPreLaunch -{ +- (id)initWithConfig:(ADJConfig *_Nullable)adjustConfig + savedPreLaunch:(ADJSavedPreLaunch * _Nullable)savedPreLaunch + deeplinkResolutionCallback:(AdjustResolvedDeeplinkBlock _Nullable)deepLinkResolutionCallback { self = [super init]; if (self == nil) return nil; @@ -151,6 +152,7 @@ - (id)initWithConfig:(ADJConfig *)adjustConfig self.adjustConfig = adjustConfig; self.savedPreLaunch = savedPreLaunch; self.adjustDelegate = adjustConfig.delegate; + self.cachedDeeplinkResolutionCallback = deepLinkResolutionCallback; // init logger to be available everywhere self.logger = ADJAdjustFactory.logger; @@ -382,6 +384,17 @@ - (void)appWillOpenUrl:(NSURL *)url withClickTime:(NSDate *)clickTime { }]; } +- (void)processDeeplink:(NSURL * _Nullable)deeplink + clickTime:(NSDate * _Nullable)clickTime + completionHandler:(AdjustResolvedDeeplinkBlock _Nullable)completionHandler { + [ADJUtil launchInQueue:self.internalQueue + selfInject:self + block:^(ADJActivityHandler * selfI) { + selfI.cachedDeeplinkResolutionCallback = completionHandler; + [selfI appWillOpenUrlI:selfI url:deeplink clickTime:clickTime]; + }]; +} + - (void)setDeviceToken:(NSData *)deviceToken { [ADJUtil launchInQueue:self.internalQueue selfInject:self @@ -1556,6 +1569,16 @@ - (void)launchSdkClickResponseTasksI:(ADJActivityHandler *)selfI selector:@selector(adjustAttributionChanged:) withObject:sdkClickResponseData.attribution]; } + + // check if we got resolved deep link in the response + if (sdkClickResponseData.resolvedDeeplink != nil) { + if (selfI.cachedDeeplinkResolutionCallback != nil) { + [ADJUtil launchInMainThread:^{ + selfI.cachedDeeplinkResolutionCallback(sdkClickResponseData.resolvedDeeplink); + selfI.cachedDeeplinkResolutionCallback = nil; + }]; + } + } } - (void)launchAttributionResponseTasksI:(ADJActivityHandler *)selfI @@ -2862,6 +2885,7 @@ - (void)updateAttStatusFromUserCallback:(int)newAttStatusFromUser { [self.trackingStatusManager updateAttStatusFromUserCallback:newAttStatusFromUser]; } + - (void)processCoppaComplianceI:(ADJActivityHandler *)selfI { if (!selfI.adjustConfig.coppaCompliantEnabled) { [self resetThirdPartySharingCoppaActivityStateI:selfI]; diff --git a/Adjust/ADJConfig.h b/Adjust/ADJConfig.h index d07993a54..e9b916e85 100644 --- a/Adjust/ADJConfig.h +++ b/Adjust/ADJConfig.h @@ -291,4 +291,9 @@ */ @property (nonatomic, assign) BOOL coppaCompliantEnabled; +/** + * @brief Enables caching of device ids to read it only once + */ +@property (nonatomic, assign) BOOL readDeviceInfoOnceEnabled; + @end diff --git a/Adjust/ADJConfig.m b/Adjust/ADJConfig.m index 35ec5c49b..2da00ec87 100644 --- a/Adjust/ADJConfig.m +++ b/Adjust/ADJConfig.m @@ -214,6 +214,7 @@ - (id)copyWithZone:(NSZone *)zone { copy->_isSKAdNetworkHandlingActive = self.isSKAdNetworkHandlingActive; copy->_urlStrategy = [self.urlStrategy copyWithZone:zone]; copy.linkMeEnabled = self.linkMeEnabled; + copy.readDeviceInfoOnceEnabled = self.readDeviceInfoOnceEnabled; // adjust delegate not copied } diff --git a/Adjust/ADJPackageBuilder.h b/Adjust/ADJPackageBuilder.h index 76241c8da..bfaf1b9a2 100644 --- a/Adjust/ADJPackageBuilder.h +++ b/Adjust/ADJPackageBuilder.h @@ -96,7 +96,8 @@ + (void)addIdfaToParameters:(NSMutableDictionary * _Nullable)parameters withConfig:(ADJConfig * _Nullable)adjConfig - logger:(id _Nullable)logger; + logger:(id _Nullable)logger + packageParams:(ADJPackageParams * _Nullable)packageParams; @end // TODO change to ADJ... extern NSString * _Nullable const ADJAttributionTokenParameter; diff --git a/Adjust/ADJPackageBuilder.m b/Adjust/ADJPackageBuilder.m index 5ea8f9461..c0dd198df 100644 --- a/Adjust/ADJPackageBuilder.m +++ b/Adjust/ADJPackageBuilder.m @@ -43,8 +43,7 @@ - (id)initWithPackageParams:(ADJPackageParams * _Nullable)packageParams config:(ADJConfig * _Nullable)adjustConfig sessionParameters:(ADJSessionParameters * _Nullable)sessionParameters trackingStatusManager:(ADJTrackingStatusManager * _Nullable)trackingStatusManager - createdAt:(double)createdAt -{ + createdAt:(double)createdAt { self = [super init]; if (self == nil) { return nil; @@ -1237,8 +1236,9 @@ - (NSMutableDictionary *)getPurchaseVerificationParameters { - (void)addIdfaIfPossibleToParameters:(NSMutableDictionary *)parameters { [ADJPackageBuilder addIdfaToParameters:parameters - withConfig:self.adjustConfig - logger:[ADJAdjustFactory logger]]; + withConfig:self.adjustConfig + logger:[ADJAdjustFactory logger] + packageParams:self.packageParams]; } - (void)addIdfvIfPossibleToParameters:(NSMutableDictionary *)parameters { @@ -1374,25 +1374,33 @@ + (BOOL)isAdServicesPackage:(ADJActivityPackage *)activityPackage { + (void)addIdfaToParameters:(NSMutableDictionary * _Nullable)parameters withConfig:(ADJConfig * _Nullable)adjConfig - logger:(id _Nullable)logger { - - if (! adjConfig.allowIdfaReading) { + logger:(id _Nullable)logger + packageParams:(ADJPackageParams *)packageParams { + if (!adjConfig.allowIdfaReading) { + [logger info:@"Cannot read IDFA because it's forbidden by ADJConfig setting"]; return; } - if (adjConfig.coppaCompliantEnabled) { [logger info:@"Cannot read IDFA with COPPA enabled"]; return; } - NSString *idfa = [ADJUtil idfa]; - if (idfa == nil - || idfa.length == 0 - || [idfa isEqualToString:@"00000000-0000-0000-0000-000000000000"]) - { + // read once && IDFA not cached + if (adjConfig.readDeviceInfoOnceEnabled && packageParams.idfaCached != nil) { + [ADJPackageBuilder parameters:parameters setString:packageParams.idfaCached forKey:@"idfa"]; return; } + // read IDFA + NSString *idfa = [ADJUtil idfa]; + if (idfa == nil || + idfa.length == 0 || + [idfa isEqualToString:@"00000000-0000-0000-0000-000000000000"]) { + return; + } + // cache IDFA + packageParams.idfaCached = idfa; + // add IDFA to payload [ADJPackageBuilder parameters:parameters setString:idfa forKey:@"idfa"]; } diff --git a/Adjust/ADJPackageHandler.m b/Adjust/ADJPackageHandler.m index 056031db5..366ce2403 100644 --- a/Adjust/ADJPackageHandler.m +++ b/Adjust/ADJPackageHandler.m @@ -309,7 +309,8 @@ - (void)updatePackagesWithIdfaAndAttStatusI:(ADJPackageHandler *)selfI { [ADJPackageBuilder parameters:activityPackage.parameters setInt:attStatus forKey:@"att_status"]; [ADJPackageBuilder addIdfaToParameters:activityPackage.parameters withConfig:self.activityHandler.adjustConfig - logger:[ADJAdjustFactory logger]]; + logger:[ADJAdjustFactory logger] + packageParams:self.activityHandler.packageParams]; // add to copy queue [packageQueueCopy addObject:activityPackage]; } diff --git a/Adjust/ADJPackageParams.h b/Adjust/ADJPackageParams.h index 6413d0cbe..da48a008c 100644 --- a/Adjust/ADJPackageParams.h +++ b/Adjust/ADJPackageParams.h @@ -22,6 +22,7 @@ @property (nonatomic, copy) NSString *osVersion; @property (nonatomic, copy) NSString *installedAt; @property (nonatomic, assign) NSUInteger startedAt; +@property (nonatomic, copy) NSString *idfaCached; - (id)initWithSdkPrefix:(NSString *)sdkPrefix; diff --git a/Adjust/ADJPurchaseVerificationHandler.m b/Adjust/ADJPurchaseVerificationHandler.m index d60c0eb92..08e997df6 100644 --- a/Adjust/ADJPurchaseVerificationHandler.m +++ b/Adjust/ADJPurchaseVerificationHandler.m @@ -181,7 +181,8 @@ - (void)updatePackagesWithIdfaAndAttStatusI:(ADJPurchaseVerificationHandler *)se forKey:@"att_status"]; [ADJPackageBuilder addIdfaToParameters:activityPackage.parameters withConfig:self.activityHandler.adjustConfig - logger:[ADJAdjustFactory logger]]; + logger:[ADJAdjustFactory logger] + packageParams:self.activityHandler.packageParams]; } } diff --git a/Adjust/ADJResponseData.h b/Adjust/ADJResponseData.h index 7006d5aa5..ee62b6587 100644 --- a/Adjust/ADJResponseData.h +++ b/Adjust/ADJResponseData.h @@ -60,6 +60,9 @@ typedef NS_ENUM(int, ADJTrackingState) { @end @interface ADJSdkClickResponseData : ADJResponseData + +@property (nonatomic, copy) NSString *resolvedDeeplink; + @end @interface ADJPurchaseVerificationResponseData : ADJResponseData diff --git a/Adjust/ADJSdkClickHandler.m b/Adjust/ADJSdkClickHandler.m index a91f1cc79..a35c5ac9e 100644 --- a/Adjust/ADJSdkClickHandler.m +++ b/Adjust/ADJSdkClickHandler.m @@ -203,7 +203,8 @@ - (void)updatePackagesWithIdfaAndAttStatusI:(ADJSdkClickHandler *)selfI { forKey:@"att_status"]; [ADJPackageBuilder addIdfaToParameters:activityPackage.parameters withConfig:self.activityHandler.adjustConfig - logger:[ADJAdjustFactory logger]]; + logger:[ADJAdjustFactory logger] + packageParams:self.activityHandler.packageParams]; } } @@ -237,6 +238,9 @@ - (void)responseCallback:(ADJResponseData *)responseData { [self.logger info:@"Received Apple Ads click response"]; } + // in case there's resolved_click_url in the response + ((ADJSdkClickResponseData *)responseData).resolvedDeeplink = [responseData.jsonResponse objectForKey:@"resolved_click_url"]; + [self.activityHandler finishedTracking:responseData]; } diff --git a/Adjust/ADJUtil.m b/Adjust/ADJUtil.m index 188293fe0..e45785bba 100644 --- a/Adjust/ADJUtil.m +++ b/Adjust/ADJUtil.m @@ -35,7 +35,7 @@ static NSRegularExpression *shortUniversalLinkRegex = nil; static NSRegularExpression *excludedDeeplinkRegex = nil; -static NSString * const kClientSdk = @"ios4.36.0"; +static NSString * const kClientSdk = @"ios4.37.0"; static NSString * const kDeeplinkParam = @"deep_link="; static NSString * const kSchemeDelimiter = @"://"; static NSString * const kDefaultScheme = @"AdjustUniversalScheme"; diff --git a/Adjust/Adjust.h b/Adjust/Adjust.h index 361cd830e..1bc08856e 100644 --- a/Adjust/Adjust.h +++ b/Adjust/Adjust.h @@ -2,7 +2,7 @@ // Adjust.h // Adjust SDK // -// V4.36.0 +// V4.37.0 // Created by Christian Wellenbrock (@wellle) on 23rd July 2013. // Copyright (c) 2012-2021 Adjust GmbH. All rights reserved. // @@ -17,6 +17,8 @@ #import "ADJPurchase.h" #import "ADJPurchaseVerificationResult.h" +typedef void(^AdjustResolvedDeeplinkBlock)(NSString * _Nonnull resolvedLink); + @interface AdjustTestOptions : NSObject @property (nonatomic, copy, nullable) NSString *baseUrl; @@ -137,6 +139,15 @@ extern NSString * __nonnull const ADJDataResidencyUS; */ + (void)appWillOpenUrl:(nonnull NSURL *)url; +/** + * @brief Process the deep link that has opened an app and potentially get a resolved link. + * + * @param deeplink URL object which contains info about adjust deep link. + * @param completionHandler Completion handler where either resolved or echoed deep link will be sent. + */ ++ (void)processDeeplink:(nonnull NSURL *)deeplink + completionHandler:(void (^_Nonnull)(NSString * _Nonnull resolvedLink))completionHandler; + /** * @brief Set the device token used by push notifications. * @@ -407,6 +418,9 @@ extern NSString * __nonnull const ADJDataResidencyUS; - (void)appWillOpenUrl:(nonnull NSURL *)url; +- (void)processDeeplink:(nonnull NSURL *)deeplink + completionHandler:(void (^_Nonnull)(NSString * _Nonnull resolvedLink))completionHandler; + - (void)setOfflineMode:(BOOL)enabled; - (void)setDeviceToken:(nonnull NSData *)deviceToken; diff --git a/Adjust/Adjust.m b/Adjust/Adjust.m index bac53576f..68e93aae8 100644 --- a/Adjust/Adjust.m +++ b/Adjust/Adjust.m @@ -53,6 +53,8 @@ @interface Adjust() @property (nonatomic, strong) ADJSavedPreLaunch *savedPreLaunch; +@property (nonatomic) AdjustResolvedDeeplinkBlock cachedResolvedDeeplinkBlock; + @end @implementation Adjust @@ -78,6 +80,7 @@ - (instancetype)init { self.activityHandler = nil; self.logger = [ADJAdjustFactory logger]; self.savedPreLaunch = [[ADJSavedPreLaunch alloc] init]; + self.cachedResolvedDeeplinkBlock = nil; return self; } @@ -126,6 +129,13 @@ + (void)appWillOpenUrl:(NSURL *)url { } } ++ (void)processDeeplink:(nonnull NSURL *)deeplink + completionHandler:(void (^_Nonnull)(NSString * _Nonnull resolvedLink))completionHandler { + @synchronized (self) { + [[Adjust getInstance] processDeeplink:deeplink completionHandler:completionHandler]; + } +} + + (void)setDeviceToken:(NSData *)deviceToken { @synchronized (self) { [[Adjust getInstance] setDeviceToken:[deviceToken copy]]; @@ -356,9 +366,9 @@ - (void)appDidLaunch:(ADJConfig *)adjustConfig { [self.logger error:@"Adjust already initialized"]; return; } - self.activityHandler = [[ADJActivityHandler alloc] - initWithConfig:adjustConfig - savedPreLaunch:self.savedPreLaunch]; + self.activityHandler = [[ADJActivityHandler alloc] initWithConfig:adjustConfig + savedPreLaunch:self.savedPreLaunch + deeplinkResolutionCallback:self.cachedResolvedDeeplinkBlock]; } - (void)trackEvent:(ADJEvent *)event { @@ -409,6 +419,27 @@ - (void)appWillOpenUrl:(NSURL *)url { [self.activityHandler appWillOpenUrl:url withClickTime:clickTime]; } +- (void)processDeeplink:(nonnull NSURL *)deeplink + completionHandler:(void (^_Nonnull)(NSString * _Nonnull resolvedLink))completionHandler { + // if resolution result is not wanted, fallback to default method + if (completionHandler == nil) { + [self appWillOpenUrl:deeplink]; + return; + } + // if deep link processing is triggered prior to SDK being initialized + [ADJUserDefaults cacheDeeplinkUrl:deeplink]; + NSDate *clickTime = [NSDate date]; + if (![self checkActivityHandler]) { + [ADJUserDefaults saveDeeplinkUrl:deeplink andClickTime:clickTime]; + self.cachedResolvedDeeplinkBlock = completionHandler; + return; + } + // if deep link processing was triggered with SDK being initialized + [self.activityHandler processDeeplink:deeplink + clickTime:clickTime + completionHandler:completionHandler]; +} + - (void)setDeviceToken:(NSData *)deviceToken { [ADJUserDefaults savePushTokenData:deviceToken]; diff --git a/AdjustBridge/AdjustBridge.m b/AdjustBridge/AdjustBridge.m index 515ab63e3..d533c00f6 100644 --- a/AdjustBridge/AdjustBridge.m +++ b/AdjustBridge/AdjustBridge.m @@ -212,6 +212,7 @@ - (void)loadWKWebViewBridge:(WKWebView *)wkWebView NSString *sessionFailureCallback = [data objectForKey:@"sessionFailureCallback"]; NSString *deferredDeeplinkCallback = [data objectForKey:@"deferredDeeplinkCallback"]; NSString *urlStrategy = [data objectForKey:@"urlStrategy"]; + NSNumber *readDeviceInfoOnceEnabled = [data objectForKey:@"readDeviceInfoOnceEnabled"]; ADJConfig *adjustConfig; if ([self isFieldValid:allowSuppressLogLevel]) { @@ -330,6 +331,9 @@ - (void)loadWKWebViewBridge:(WKWebView *)wkWebView if ([self isFieldValid:urlStrategy]) { [adjustConfig setUrlStrategy:urlStrategy]; } + if ([self isFieldValid:readDeviceInfoOnceEnabled]) { + [adjustConfig setReadDeviceInfoOnceEnabled:[readDeviceInfoOnceEnabled boolValue]]; + } [Adjust appDidLaunch:adjustConfig]; [Adjust trackSubsessionStart]; diff --git a/AdjustBridge/AdjustBridgeRegister.m b/AdjustBridge/AdjustBridgeRegister.m index c4824c59b..f28657f2a 100644 --- a/AdjustBridge/AdjustBridgeRegister.m +++ b/AdjustBridge/AdjustBridgeRegister.m @@ -280,7 +280,7 @@ + (NSString *)adjust_js { if (this.sdkPrefix) { return this.sdkPrefix; } else { - return 'web-bridge4.36.0'; + return 'web-bridge4.37.0'; } }, setTestOptions: function(testOptions) { @@ -387,6 +387,7 @@ + (NSString *)adjust_js { this.sessionFailureCallback = null; this.deferredDeeplinkCallback = null; this.urlStrategy = null; + this.readDeviceInfoOnceEnabled = null; }; AdjustConfig.EnvironmentSandbox = 'sandbox'; @@ -514,7 +515,9 @@ + (NSString *)adjust_js { AdjustConfig.prototype.setUrlStrategy = function(urlStrategy) { this.urlStrategy = urlStrategy; }; - + AdjustConfig.prototype.setReadDeviceInfoOnceEnabled = function(readDeviceInfoOnceEnabled) { + this.readDeviceInfoOnceEnabled = readDeviceInfoOnceEnabled; + }; })();); // END preprocessorJSCode //, augmentedSection]; #undef __adj_js_func__ diff --git a/AdjustSdk/AdjustSdk.h b/AdjustSdk/AdjustSdk.h index 4def26924..dbd6162d1 100644 --- a/AdjustSdk/AdjustSdk.h +++ b/AdjustSdk/AdjustSdk.h @@ -29,3 +29,5 @@ FOUNDATION_EXPORT const unsigned char AdjustSdkVersionString[]; #import #import #import +#import +#import diff --git a/AdjustSdkIm/AdjustSdkIm.h b/AdjustSdkIm/AdjustSdkIm.h index a2d6dadcc..b5cb053d3 100644 --- a/AdjustSdkIm/AdjustSdkIm.h +++ b/AdjustSdkIm/AdjustSdkIm.h @@ -29,3 +29,5 @@ FOUNDATION_EXPORT const unsigned char AdjustSdkImVersionString[]; #import #import #import +#import +#import diff --git a/AdjustSdkImStatic/AdjustSdkIm.h b/AdjustSdkImStatic/AdjustSdkIm.h index 17130f4ab..95e44b334 100644 --- a/AdjustSdkImStatic/AdjustSdkIm.h +++ b/AdjustSdkImStatic/AdjustSdkIm.h @@ -21,3 +21,5 @@ #import #import #import +#import +#import diff --git a/AdjustSdkStatic/AdjustSdk.h b/AdjustSdkStatic/AdjustSdk.h index c046f2c77..b89156ac5 100644 --- a/AdjustSdkStatic/AdjustSdk.h +++ b/AdjustSdkStatic/AdjustSdk.h @@ -21,3 +21,5 @@ #import #import #import +#import +#import diff --git a/AdjustSdkTv/AdjustSdkTv.h b/AdjustSdkTv/AdjustSdkTv.h index ea4cee8a1..a89cfdfde 100644 --- a/AdjustSdkTv/AdjustSdkTv.h +++ b/AdjustSdkTv/AdjustSdkTv.h @@ -29,3 +29,5 @@ FOUNDATION_EXPORT const unsigned char AdjustSdkTvVersionString[]; #import #import #import +#import +#import diff --git a/AdjustSdkTvStatic/AdjustSdkTv.h b/AdjustSdkTvStatic/AdjustSdkTv.h index 6ce5fbb6b..7a674f5e0 100644 --- a/AdjustSdkTvStatic/AdjustSdkTv.h +++ b/AdjustSdkTvStatic/AdjustSdkTv.h @@ -21,3 +21,5 @@ #import #import #import +#import +#import diff --git a/AdjustSdkWebBridge/AdjustSdkWebBridge.h b/AdjustSdkWebBridge/AdjustSdkWebBridge.h index 91c39ba26..bd1ba368b 100644 --- a/AdjustSdkWebBridge/AdjustSdkWebBridge.h +++ b/AdjustSdkWebBridge/AdjustSdkWebBridge.h @@ -30,6 +30,8 @@ FOUNDATION_EXPORT const unsigned char AdjustSdkWebBridgeVersionString[]; #import #import #import +#import +#import // Exposing entire WebViewJavascriptBridge framework #import diff --git a/AdjustSdkWebBridgeStatic/AdjustSdkWebBridge.h b/AdjustSdkWebBridgeStatic/AdjustSdkWebBridge.h index fb37cda2a..7cf6e445a 100644 --- a/AdjustSdkWebBridgeStatic/AdjustSdkWebBridge.h +++ b/AdjustSdkWebBridgeStatic/AdjustSdkWebBridge.h @@ -23,6 +23,8 @@ #import #import #import +#import +#import // Exposing entire WebViewJavascriptBridge framework #import diff --git a/AdjustTests/AdjustTestApp/AdjustTestApp/ATAAdjustCommandExecutor.m b/AdjustTests/AdjustTestApp/AdjustTestApp/ATAAdjustCommandExecutor.m index bc4f9bc83..6273946b9 100644 --- a/AdjustTests/AdjustTestApp/AdjustTestApp/ATAAdjustCommandExecutor.m +++ b/AdjustTests/AdjustTestApp/AdjustTestApp/ATAAdjustCommandExecutor.m @@ -103,6 +103,8 @@ - (void)executeCommand:(NSString *)className [self getLastDeeplink:parameters]; } else if ([methodName isEqualToString:@"verifyPurchase"]) { [self verifyPurchase:parameters]; + } else if ([methodName isEqualToString:@"processDeeplink"]) { + [self processDeeplink:parameters]; } } @@ -797,4 +799,13 @@ - (void)verifyPurchase:(NSDictionary *)parameters { }]; } +- (void)processDeeplink:(NSDictionary *)parameters { + NSString *deeplinkS = [parameters objectForKey:@"deeplink"][0]; + NSURL *deeplink = [NSURL URLWithString:deeplinkS]; + [Adjust processDeeplink:deeplink completionHandler:^(NSString * _Nonnull resolvedLink) { + [self.testLibrary addInfoToSend:@"resolved_link" value:resolvedLink]; + [self.testLibrary sendInfoToServer:self.extraPath]; + }]; +} + @end diff --git a/CHANGELOG.md b/CHANGELOG.md index f9c8dd3ca..30b541256 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,16 @@ +### Version 4.37.0 (21st December 2023) +#### Added +- Added ability to instruct to SDK to read device IDs just once upon initialization. You can set this by calling `setReadDeviceInfoOnceEnabled` method of the `ADJConfig` instance. +- Added ability to process shortened deep links and provide the unshortened link back as a response. You can achieve this by invoking `processDeeplink:completionHandler:` method of the `Adjust` instance. + +#### Fixed +- Added missing purchase verification related headers into the umbrella headers of the various framework targets. + +--- + ### Version 4.36.0 (21st November 2023) #### Added -- Added `idfv` method on Adjust instance to get access to device's IDFV value. +- Added `idfv` method to `Adjust` instance to get access to device's IDFV value. #### Fixed - Fixed the issue with CocoaPods installation for v4.35.3, where incorrect version was set as the source in podspec. diff --git a/VERSION b/VERSION index 05ca23e88..69c427627 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -4.36.0 +4.37.0 diff --git a/examples/AdjustExample-ObjC/AdjustExample-ObjC/AppDelegate.m b/examples/AdjustExample-ObjC/AdjustExample-ObjC/AppDelegate.m index 82dd3c5ba..3f546d6f1 100644 --- a/examples/AdjustExample-ObjC/AdjustExample-ObjC/AppDelegate.m +++ b/examples/AdjustExample-ObjC/AdjustExample-ObjC/AppDelegate.m @@ -23,7 +23,7 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( // Change the log level. [adjustConfig setLogLevel:ADJLogLevelVerbose]; - + // Enable event buffering. // [adjustConfig setEventBufferingEnabled:YES]; diff --git a/examples/AdjustExample-Swift/Podfile.lock b/examples/AdjustExample-Swift/Podfile.lock index 677925178..3134ce024 100644 --- a/examples/AdjustExample-Swift/Podfile.lock +++ b/examples/AdjustExample-Swift/Podfile.lock @@ -1,7 +1,7 @@ PODS: - - Adjust (4.36.0): - - Adjust/Core (= 4.36.0) - - Adjust/Core (4.36.0) + - Adjust (4.37.0): + - Adjust/Core (= 4.37.0) + - Adjust/Core (4.37.0) DEPENDENCIES: - Adjust (from `../../`) @@ -11,7 +11,7 @@ EXTERNAL SOURCES: :path: "../../" SPEC CHECKSUMS: - Adjust: f2a3a162ae458dd9e5b5f432542ca75a68bb985b + Adjust: 86a6935688251ca6cea371f9b284578ccf3d981b PODFILE CHECKSUM: 4c79da456db9adb90cdd42adc7f721c7bb6490cd