Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 65 additions & 0 deletions Adjust/ADJActivityHandler.m
Original file line number Diff line number Diff line change
Expand Up @@ -411,6 +411,21 @@ - (void)setPushToken:(NSString *)pushToken {
}];
}

- (void)logConversionValueUpdate:(NSNumber *)conversionValue
coarseValue:(NSString *)coarseValue
lockWindow:(NSNumber *)lockWindow
andError:(NSError *)error {
[ADJUtil launchInQueue:self.internalQueue
selfInject:self
block:^(ADJActivityHandler * selfI) {
[selfI logConversionValueUpdateI:selfI
conversionValue:conversionValue
coarseValue:coarseValue
lockWindow:lockWindow
andError:error];
}];
}

- (void)setGdprForgetMe {
[ADJUtil launchInQueue:self.internalQueue
selfInject:self
Expand Down Expand Up @@ -2090,6 +2105,47 @@ - (void)setPushTokenI:(ADJActivityHandler *)selfI
}
}

- (void)logConversionValueUpdateI:(ADJActivityHandler *)selfI
conversionValue:(NSNumber *)conversionValue
coarseValue:(NSString *)coarseValue
lockWindow:(NSNumber *)lockWindow
andError:(NSError *)error {
if (![selfI isEnabledI:selfI]) {
return;
}
if (!selfI.activityState) {
return;
}
if (selfI.activityState.isGdprForgotten) {
return;
}

// send info package
double now = [NSDate.date timeIntervalSince1970];
ADJPackageBuilder *packageBuilder =
[[ADJPackageBuilder alloc] initWithPackageParams:selfI.packageParams
activityState:selfI.activityState
config:selfI.adjustConfig
sessionParameters:selfI.sessionParameters
trackingStatusManager:self.trackingStatusManager
createdAt:now];
NSDictionary *skanParameters = [NSMutableDictionary dictionary];
[skanParameters setValue:conversionValue forKey:@"conversion_value"];
[skanParameters setValue:coarseValue forKey:@"coarse_value"];
[skanParameters setValue:lockWindow forKey:@"lock_window"];
[skanParameters setValue:error forKey:@"error"];
packageBuilder.skanParameters = skanParameters;

ADJActivityPackage *infoPackage = [packageBuilder buildDebugPackage:@"skan"];
[selfI.packageHandler addPackage:infoPackage];

if (selfI.adjustConfig.eventBufferingEnabled) {
[selfI.logger info:@"Buffered info %@", infoPackage.suffix];
} else {
[selfI.packageHandler sendFirstPackage];
}
}

- (void)setGdprForgetMeI:(ADJActivityHandler *)selfI {
if (![selfI isEnabledI:selfI]) {
return;
Expand Down Expand Up @@ -2889,6 +2945,10 @@ - (void)checkConversionValue:(ADJResponseData *)responseData {
completionHandler:^(NSError *error) {
if (error) {
// handle error
[self logConversionValueUpdate:conversionValue
coarseValue:coarseValue
lockWindow:lockWindow
andError:error];
} else {
// ping old callback if implemented
if ([self.adjustDelegate respondsToSelector:@selector(adjustConversionValueUpdated:)]) {
Expand All @@ -2906,6 +2966,11 @@ - (void)checkConversionValue:(ADJResponseData *)responseData {
lockWindow:lockWindow];
}];
}
// log
[self logConversionValueUpdate:conversionValue
coarseValue:coarseValue
lockWindow:lockWindow
andError:nil];
}
}];
}
Expand Down
3 changes: 2 additions & 1 deletion Adjust/ADJActivityKind.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ typedef NS_ENUM(int, ADJActivityKind) {
ADJActivityKindSubscription = 10,
ADJActivityKindThirdPartySharing = 11,
ADJActivityKindMeasurementConsent = 12,
ADJActivityKindPurchaseVerification = 13
ADJActivityKindPurchaseVerification = 13,
ADJActivityKindDebug = 14
};

@interface ADJActivityKindUtil : NSObject
Expand Down
4 changes: 4 additions & 0 deletions Adjust/ADJActivityKind.m
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ + (ADJActivityKind)activityKindFromString:(NSString *)activityKindString {
return ADJActivityKindMeasurementConsent;
} else if ([@"purchase_verification" isEqualToString:activityKindString]) {
return ADJActivityKindPurchaseVerification;
} else if ([@"debug" isEqualToString:activityKindString]) {
return ADJActivityKindDebug;
} else {
return ADJActivityKindUnknown;
}
Expand Down Expand Up @@ -68,6 +70,8 @@ + (NSString *)activityKindToString:(ADJActivityKind)activityKind {
return @"measurement_consent";
case ADJActivityKindPurchaseVerification:
return @"purchase_verification";
case ADJActivityKindDebug:
return @"debug";
default:
return @"unknown";
}
Expand Down
3 changes: 3 additions & 0 deletions Adjust/ADJPackageBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@

@property (nonatomic, strong) NSDictionary * _Nullable deeplinkParameters;

@property (nonatomic, strong) NSDictionary * _Nullable skanParameters;

@property (nonatomic, copy) ADJAttribution * _Nullable attribution;

@property (nonatomic, weak) ADJInternalState * _Nullable internalState;
Expand All @@ -47,6 +49,7 @@
isInDelay:(BOOL)isInDelay;

- (ADJActivityPackage * _Nullable)buildInfoPackage:(NSString * _Nullable)infoSource;
- (ADJActivityPackage * _Nullable)buildDebugPackage:(NSString * _Nullable)infoSource;

- (ADJActivityPackage * _Nullable)buildAdRevenuePackage:(NSString * _Nullable)source
payload:(NSData * _Nullable)payload;
Expand Down
87 changes: 87 additions & 0 deletions Adjust/ADJPackageBuilder.m
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,18 @@ - (ADJActivityPackage *)buildInfoPackage:(NSString *)infoSource {
return infoPackage;
}

- (ADJActivityPackage * _Nullable)buildDebugPackage:(NSString * _Nullable)debugSource{
NSMutableDictionary *parameters = [self getDebugParameters:debugSource];
ADJActivityPackage *debugPackage = [self defaultActivityPackage];
debugPackage.path = @"/sdk_debug";
debugPackage.activityKind = ADJActivityKindDebug;
debugPackage.suffix = @"";
debugPackage.parameters = parameters;
debugPackage.parameters = [ADJUtil deepCopyOfDictionary:debugPackage.parameters];

return debugPackage;
}

- (ADJActivityPackage *)buildAdRevenuePackage:(NSString *)source payload:(NSData *)payload {
NSMutableDictionary *parameters = [self getAdRevenueParameters:source payload:payload];
ADJActivityPackage *adRevenuePackage = [self defaultActivityPackage];
Expand Down Expand Up @@ -546,6 +558,81 @@ - (NSMutableDictionary *)getInfoParameters:(NSString *)source {
return parameters;
}


- (NSMutableDictionary *)getDebugParameters:(NSString *)source {
NSMutableDictionary *parameters = [NSMutableDictionary dictionary];

[ADJPackageBuilder parameters:parameters setString:self.adjustConfig.appSecret forKey:@"app_secret"];
[ADJPackageBuilder parameters:parameters setString:self.adjustConfig.appToken forKey:@"app_token"];
[ADJPackageBuilder parameters:parameters setString:self.packageParams.buildNumber forKey:@"app_version"];
[ADJPackageBuilder parameters:parameters setString:self.packageParams.versionNumber forKey:@"app_version_short"];
[ADJPackageBuilder parameters:parameters setBool:YES forKey:@"attribution_deeplink"];
[ADJPackageBuilder parameters:parameters setString:self.packageParams.bundleIdentifier forKey:@"bundle_id"];
[ADJPackageBuilder parameters:parameters setDictionary:[self.sessionParameters.callbackParameters copy] forKey:@"callback_params"];
[ADJPackageBuilder parameters:parameters setDate:self.clickTime forKey:@"click_time"];
[ADJPackageBuilder parameters:parameters setDate1970:self.createdAt forKey:@"created_at"];
[ADJPackageBuilder parameters:parameters setString:self.deeplink forKey:@"deeplink"];
[ADJPackageBuilder parameters:parameters setString:self.reftag forKey:@"reftag"];
[ADJPackageBuilder parameters:parameters setString:self.adjustConfig.defaultTracker forKey:@"default_tracker"];
[ADJPackageBuilder parameters:parameters setDictionary:self.attributionDetails forKey:@"details"];
[ADJPackageBuilder parameters:parameters setString:self.packageParams.deviceName forKey:@"device_name"];
[ADJPackageBuilder parameters:parameters setString:self.packageParams.deviceType forKey:@"device_type"];
[ADJPackageBuilder parameters:parameters setString:self.adjustConfig.environment forKey:@"environment"];
[ADJPackageBuilder parameters:parameters setString:self.adjustConfig.externalDeviceId forKey:@"external_device_id"];
[ADJPackageBuilder parameters:parameters setString:self.packageParams.fbAnonymousId forKey:@"fb_anon_id"];
[ADJPackageBuilder parameters:parameters setString:self.packageParams.installedAt forKey:@"installed_at"];
[ADJPackageBuilder parameters:parameters setBool:YES forKey:@"needs_response_details"];
[ADJPackageBuilder parameters:parameters setString:self.packageParams.osName forKey:@"os_name"];
[ADJPackageBuilder parameters:parameters setString:self.packageParams.osVersion forKey:@"os_version"];
[ADJPackageBuilder parameters:parameters setDictionary:self.deeplinkParameters forKey:@"params"];
[ADJPackageBuilder parameters:parameters setDictionary:[self.sessionParameters.partnerParameters copy] forKey:@"partner_params"];
[ADJPackageBuilder parameters:parameters setDate:self.purchaseTime forKey:@"purchase_time"];
[ADJPackageBuilder parameters:parameters setString:self.adjustConfig.secretId forKey:@"secret_id"];
[ADJPackageBuilder parameters:parameters setDate:[ADJUserDefaults getSkadRegisterCallTimestamp] forKey:@"skadn_registered_at"];
[ADJPackageBuilder parameters:parameters setDictionary:self.skanParameters forKey:@"skan_debug"];
[ADJPackageBuilder parameters:parameters setString:source forKey:@"source"];
[ADJPackageBuilder parameters:parameters setDate1970:(double)self.packageParams.startedAt forKey:@"started_at"];

if ([self.trackingStatusManager canGetAttStatus]) {
[ADJPackageBuilder parameters:parameters setInt:self.trackingStatusManager.attStatus
forKey:@"att_status"];
} else {
[ADJPackageBuilder parameters:parameters setInt:self.trackingStatusManager.trackingEnabled
forKey:@"tracking_enabled"];
}

if (self.adjustConfig.isDeviceKnown) {
[ADJPackageBuilder parameters:parameters setBool:self.adjustConfig.isDeviceKnown forKey:@"device_known"];
}

if (self.activityState != nil) {
[ADJPackageBuilder parameters:parameters setDuration:self.activityState.lastInterval forKey:@"last_interval"];
[ADJPackageBuilder parameters:parameters setString:self.activityState.deviceToken forKey:@"push_token"];
[ADJPackageBuilder parameters:parameters setInt:self.activityState.sessionCount forKey:@"session_count"];
[ADJPackageBuilder parameters:parameters setDuration:self.activityState.sessionLength forKey:@"session_length"];
[ADJPackageBuilder parameters:parameters setInt:self.activityState.subsessionCount forKey:@"subsession_count"];
[ADJPackageBuilder parameters:parameters setDuration:self.activityState.timeSpent forKey:@"time_spent"];
if (self.activityState.isPersisted) {
[ADJPackageBuilder parameters:parameters setString:self.activityState.dedupeToken forKey:@"primary_dedupe_token"];
} else {
[ADJPackageBuilder parameters:parameters setString:self.activityState.dedupeToken forKey:@"secondary_dedupe_token"];
}
}

if (self.attribution != nil) {
[ADJPackageBuilder parameters:parameters setString:self.attribution.adgroup forKey:@"adgroup"];
[ADJPackageBuilder parameters:parameters setString:self.attribution.campaign forKey:@"campaign"];
[ADJPackageBuilder parameters:parameters setString:self.attribution.creative forKey:@"creative"];
[ADJPackageBuilder parameters:parameters setString:self.attribution.trackerName forKey:@"tracker"];
}

[self addConsentToParameters:parameters forActivityKind:ADJActivityKindInfo];
[self addIdfvIfPossibleToParameters:parameters];
[self injectFeatureFlagsWithParameters:parameters];

return parameters;
}

- (NSMutableDictionary *)getAdRevenueParameters:(NSString *)source payload:(NSData *)payload {
NSMutableDictionary *parameters = [NSMutableDictionary dictionary];

Expand Down