Skip to content

Commit

Permalink
Merge pull request #401 from adjust/v4190
Browse files Browse the repository at this point in the history
Version 4.19.0
  • Loading branch information
uerceg authored Dec 9, 2019
2 parents 46cddba + 6c6608f commit c20f299
Show file tree
Hide file tree
Showing 31 changed files with 302 additions and 31 deletions.
4 changes: 2 additions & 2 deletions Adjust.podspec
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
Pod::Spec.new do |s|
s.name = "Adjust"
s.version = "4.18.3"
s.version = "4.19.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 = { "Christian Wellenbrock" => "[email protected]" }
s.source = { :git => "https://github.com/adjust/ios_sdk.git", :tag => "v4.18.3" }
s.source = { :git => "https://github.com/adjust/ios_sdk.git", :tag => "v4.19.0" }
s.ios.deployment_target = '6.0'
s.tvos.deployment_target = '9.0'
s.framework = 'SystemConfiguration'
Expand Down
1 change: 1 addition & 0 deletions Adjust/ADJActivityHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@
- (void)resetSessionCallbackParameters;
- (void)resetSessionPartnerParameters;
- (void)trackAdRevenue:(NSString *)soruce payload:(NSData *)payload;
- (void)disableThirdPartySharing;
- (NSString *)getBasePath;
- (NSString *)getGdprPath;

Expand Down
65 changes: 62 additions & 3 deletions Adjust/ADJActivityHandler.m
Original file line number Diff line number Diff line change
Expand Up @@ -573,6 +573,14 @@ - (void)trackAdRevenue:(NSString *)source payload:(NSData *)payload {
}];
}

- (void)disableThirdPartySharing {
[ADJUtil launchInQueue:self.internalQueue
selfInject:self
block:^(ADJActivityHandler * selfI) {
[selfI disableThirdPartySharingI:selfI];
}];
}

- (NSString *)getBasePath {
return _basePath;
}
Expand Down Expand Up @@ -790,11 +798,15 @@ - (void)processSessionI:(ADJActivityHandler *)selfI {
// track the first session package only if it's enabled
if ([selfI.internalState isEnabled]) {
// If user chose to be forgotten before install has ever tracked, don't track it.
if (![ADJUserDefaults getGdprForgetMe]) {
if ([ADJUserDefaults getGdprForgetMe]) {
[selfI setGdprForgetMeI:selfI];
} else {
// check if disable third party sharing request came, then send it first
if ([ADJUserDefaults getDisableThirdPartySharing]) {
[selfI disableThirdPartySharingI:selfI];
}
selfI.activityState.sessionCount = 1; // this is the first session
[selfI transferSessionPackageI:selfI now:now];
} else {
[selfI setGdprForgetMeI:selfI];
}
}

Expand All @@ -804,6 +816,7 @@ - (void)processSessionI:(ADJActivityHandler *)selfI {

[selfI writeActivityStateI:selfI];
[ADJUserDefaults removePushToken];
[ADJUserDefaults removeDisableThirdPartySharing];

return;
}
Expand Down Expand Up @@ -973,6 +986,50 @@ - (void)adRevenueI:(ADJActivityHandler *)selfI
[selfI.packageHandler sendFirstPackage];
}

- (void)disableThirdPartySharingI:(ADJActivityHandler *)selfI {
// cache the disable third party sharing request, so that the request order maintains
// even this call returns before making server request
[ADJUserDefaults setDisableThirdPartySharing];

if (!selfI.activityState) {
return;
}
if (![selfI isEnabledI:selfI]) {
return;
}
if (selfI.activityState.isGdprForgotten) {
return;
}
if (selfI.activityState.isThirdPartySharingDisabled) {
return;
}

selfI.activityState.isThirdPartySharingDisabled = YES;
[selfI writeActivityStateI:selfI];

double now = [NSDate.date timeIntervalSince1970];

// build package
ADJPackageBuilder *dtpsBuilder = [[ADJPackageBuilder alloc]
initWithDeviceInfo:selfI.deviceInfo
activityState:selfI.activityState
config:selfI.adjustConfig
sessionParameters:selfI.sessionParameters
createdAt:now];

ADJActivityPackage *dtpsPackage = [dtpsBuilder buildDisableThirdPartySharingPackage];

[selfI.packageHandler addPackage:dtpsPackage];

[ADJUserDefaults removeDisableThirdPartySharing];

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

- (void)launchEventResponseTasksI:(ADJActivityHandler *)selfI
eventResponseData:(ADJEventResponseData *)eventResponseData {
[selfI updateAdidI:selfI adid:eventResponseData.adid];
Expand Down Expand Up @@ -1191,6 +1248,8 @@ - (void)setEnabledI:(ADJActivityHandler *)selfI enabled:(BOOL)enabled {
}
if ([ADJUserDefaults getGdprForgetMe]) {
[selfI setGdprForgetMe];
} else if ([ADJUserDefaults getDisableThirdPartySharing]) {
[selfI disableThirdPartySharing];
}
[[UIDevice currentDevice] adjSetIad:selfI triesV3Left:kTryIadV3];
}
Expand Down
3 changes: 2 additions & 1 deletion Adjust/ADJActivityKind.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ typedef NS_ENUM(int, ADJActivityKind) {
ADJActivityKindAttribution = 5,
ADJActivityKindInfo = 6,
ADJActivityKindGdpr = 7,
ADJActivityKindAdRevenue = 8
ADJActivityKindAdRevenue = 8,
ADJActivityKindDisableThirdPartySharing = 9
};

@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 @@ -27,6 +27,8 @@ + (ADJActivityKind)activityKindFromString:(NSString *)activityKindString {
return ADJActivityKindGdpr;
} else if ([@"ad_revenue" isEqualToString:activityKindString]) {
return ADJActivityKindAdRevenue;
} else if ([@"disable_third_party_sharing" isEqualToString:activityKindString]) {
return ADJActivityKindDisableThirdPartySharing;
} else {
return ADJActivityKindUnknown;
}
Expand All @@ -48,6 +50,8 @@ + (NSString *)activityKindToString:(ADJActivityKind)activityKind {
return @"gdpr";
case ADJActivityKindAdRevenue:
return @"ad_revenue";
case ADJActivityKindDisableThirdPartySharing:
return @"disable_third_party_sharing";
default:
return @"unknown";
}
Expand Down
1 change: 1 addition & 0 deletions Adjust/ADJActivityState.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
@property (nonatomic, assign) BOOL enabled;
@property (nonatomic, assign) BOOL isGdprForgotten;
@property (nonatomic, assign) BOOL askingAttribution;
@property (nonatomic, assign) BOOL isThirdPartySharingDisabled;

@property (nonatomic, copy) NSString *uuid;
@property (nonatomic, copy) NSString *deviceToken;
Expand Down
17 changes: 14 additions & 3 deletions Adjust/ADJActivityState.m
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ - (id)init {
self.enabled = YES;
self.isGdprForgotten = NO;
self.askingAttribution = NO;
self.isThirdPartySharingDisabled = NO;
self.deviceToken = nil;
self.transactionIds = [NSMutableArray arrayWithCapacity:kTransactionIdCount];
self.updatePackages = NO;
Expand Down Expand Up @@ -119,9 +120,11 @@ - (NSString *)generateUniqueKey {
}

- (NSString *)description {
return [NSString stringWithFormat:@"ec:%d sc:%d ssc:%d ask:%d sl:%.1f ts:%.1f la:%.1f dt:%@ gdprf:%d",
self.eventCount, self.sessionCount, self.subsessionCount, self.askingAttribution, self.sessionLength,
self.timeSpent, self.lastActivity, self.deviceToken, self.isGdprForgotten];
return [NSString stringWithFormat:@"ec:%d sc:%d ssc:%d ask:%d sl:%.1f ts:%.1f la:%.1f dt:%@ gdprf:%d dtps:%d",
self.eventCount, self.sessionCount,
self.subsessionCount, self.askingAttribution, self.sessionLength,
self.timeSpent, self.lastActivity, self.deviceToken,
self.isGdprForgotten, self.isThirdPartySharingDisabled];
}

#pragma mark - NSCoding protocol methods
Expand Down Expand Up @@ -172,6 +175,12 @@ - (id)initWithCoder:(NSCoder *)decoder {
self.askingAttribution = NO;
}

if ([decoder containsValueForKey:@"isThirdPartySharingDisabled"]) {
self.isThirdPartySharingDisabled = [decoder decodeBoolForKey:@"isThirdPartySharingDisabled"];
} else {
self.isThirdPartySharingDisabled = NO;
}

if ([decoder containsValueForKey:@"deviceToken"]) {
self.deviceToken = [decoder decodeObjectForKey:@"deviceToken"];
}
Expand Down Expand Up @@ -207,6 +216,7 @@ - (void)encodeWithCoder:(NSCoder *)encoder {
[encoder encodeBool:self.enabled forKey:@"enabled"];
[encoder encodeBool:self.isGdprForgotten forKey:@"isGdprForgotten"];
[encoder encodeBool:self.askingAttribution forKey:@"askingAttribution"];
[encoder encodeBool:self.isThirdPartySharingDisabled forKey:@"isThirdPartySharingDisabled"];
[encoder encodeObject:self.deviceToken forKey:@"deviceToken"];
[encoder encodeBool:self.updatePackages forKey:@"updatePackages"];
[encoder encodeObject:self.adid forKey:@"adid"];
Expand All @@ -231,6 +241,7 @@ - (id)copyWithZone:(NSZone *)zone {
copy.isGdprForgotten = self.isGdprForgotten;
copy.lastActivity = self.lastActivity;
copy.askingAttribution = self.askingAttribution;
copy.isThirdPartySharingDisabled = self.isThirdPartySharingDisabled;
copy.deviceToken = [self.deviceToken copyWithZone:zone];
copy.updatePackages = self.updatePackages;
}
Expand Down
2 changes: 2 additions & 0 deletions Adjust/ADJPackageBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@

- (ADJActivityPackage *)buildGdprPackage;

- (ADJActivityPackage *)buildDisableThirdPartySharingPackage;

+ (void)parameters:(NSMutableDictionary *)parameters
setDictionary:(NSDictionary *)dictionary
forKey:(NSString *)key;
Expand Down
78 changes: 78 additions & 0 deletions Adjust/ADJPackageBuilder.m
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,16 @@ - (ADJActivityPackage *)buildGdprPackage {
return gdprPackage;
}

- (ADJActivityPackage *)buildDisableThirdPartySharingPackage {
NSMutableDictionary *parameters = [self getDisableThirdPartySharingParameters];
ADJActivityPackage *dtpsPackage = [self defaultActivityPackage];
dtpsPackage.path = @"/disable_third_party_sharing";
dtpsPackage.activityKind = ADJActivityKindDisableThirdPartySharing;
dtpsPackage.suffix = @"";
dtpsPackage.parameters = parameters;
return dtpsPackage;
}

+ (void)parameters:(NSMutableDictionary *)parameters setDictionary:(NSDictionary *)dictionary forKey:(NSString *)key {
if (dictionary == nil) {
return;
Expand Down Expand Up @@ -516,6 +526,74 @@ - (NSMutableDictionary *)getGdprParameters {
return parameters;
}

- (NSMutableDictionary *)getDisableThirdPartySharingParameters {
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:[ADJUtil getUpdateTime] forKey:@"app_updated_at"];
[ADJPackageBuilder parameters:parameters setString:self.deviceInfo.bundleVersion forKey:@"app_version"];
[ADJPackageBuilder parameters:parameters setString:self.deviceInfo.bundleShortVersion forKey:@"app_version_short"];
[ADJPackageBuilder parameters:parameters setBool:YES forKey:@"attribution_deeplink"];
[ADJPackageBuilder parameters:parameters setString:self.deviceInfo.bundeIdentifier forKey:@"bundle_id"];
[ADJPackageBuilder parameters:parameters setDictionary:self.sessionParameters.callbackParameters forKey:@"callback_params"];
[ADJPackageBuilder parameters:parameters setDate:self.clickTime forKey:@"click_time"];
[ADJPackageBuilder parameters:parameters setNumberInt:[ADJUtil readReachabilityFlags] forKey:@"connectivity_type"];
[ADJPackageBuilder parameters:parameters setString:self.deviceInfo.countryCode forKey:@"country"];
[ADJPackageBuilder parameters:parameters setString:self.deviceInfo.cpuSubtype forKey:@"cpu_type"];
[ADJPackageBuilder parameters:parameters setDate1970:self.createdAt forKey:@"created_at"];
[ADJPackageBuilder parameters:parameters setString:self.deeplink forKey:@"deeplink"];
[ADJPackageBuilder parameters:parameters setString:self.adjustConfig.defaultTracker forKey:@"default_tracker"];
[ADJPackageBuilder parameters:parameters setDictionary:self.attributionDetails forKey:@"details"];
[ADJPackageBuilder parameters:parameters setString:self.deviceInfo.deviceName forKey:@"device_name"];
[ADJPackageBuilder parameters:parameters setString:self.deviceInfo.deviceType forKey:@"device_type"];
[ADJPackageBuilder parameters:parameters setString:self.adjustConfig.environment forKey:@"environment"];
[ADJPackageBuilder parameters:parameters setBool:self.adjustConfig.eventBufferingEnabled forKey:@"event_buffering_enabled"];
[ADJPackageBuilder parameters:parameters setString:self.deviceInfo.fbAnonymousId forKey:@"fb_anon_id"];
[ADJPackageBuilder parameters:parameters setString:self.deviceInfo.machineModel forKey:@"hardware_name"];
[ADJPackageBuilder parameters:parameters setString:UIDevice.currentDevice.adjIdForAdvertisers forKey:@"idfa"];
[ADJPackageBuilder parameters:parameters setString:self.deviceInfo.vendorId forKey:@"idfv"];
[ADJPackageBuilder parameters:parameters setString:self.deviceInfo.installReceiptBase64 forKey:@"install_receipt"];
[ADJPackageBuilder parameters:parameters setString:[ADJUtil getInstallTime] forKey:@"installed_at"];
[ADJPackageBuilder parameters:parameters setString:self.deviceInfo.languageCode forKey:@"language"];
[ADJPackageBuilder parameters:parameters setBool:YES forKey:@"needs_response_details"];
[ADJPackageBuilder parameters:parameters setString:self.deviceInfo.osBuild forKey:@"os_build"];
[ADJPackageBuilder parameters:parameters setString:self.deviceInfo.osName forKey:@"os_name"];
[ADJPackageBuilder parameters:parameters setString:self.deviceInfo.systemVersion forKey:@"os_version"];
[ADJPackageBuilder parameters:parameters setDictionary:self.deeplinkParameters forKey:@"params"];
[ADJPackageBuilder parameters:parameters setDictionary:self.sessionParameters.partnerParameters 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 setInt:UIDevice.currentDevice.adjTrackingEnabled 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.uuid forKey:@"persistent_ios_uuid"];
} else {
[ADJPackageBuilder parameters:parameters setString:self.activityState.uuid forKey:@"ios_uuid"];
}
}

#if !TARGET_OS_TV
[ADJPackageBuilder parameters:parameters setString:[ADJUtil readMCC] forKey:@"mcc"];
[ADJPackageBuilder parameters:parameters setString:[ADJUtil readMNC] forKey:@"mnc"];
[ADJPackageBuilder parameters:parameters setString:[ADJUtil readCurrentRadioAccessTechnology] forKey:@"network_type"];
#endif

return parameters;
}


- (ADJActivityPackage *)defaultActivityPackage {
ADJActivityPackage *activityPackage = [[ADJActivityPackage alloc] init];
activityPackage.clientSdk = self.deviceInfo.clientSdk;
Expand Down
6 changes: 6 additions & 0 deletions Adjust/ADJUserDefaults.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,12 @@

+ (void)removeDeeplink;

+ (void)setDisableThirdPartySharing;

+ (BOOL)getDisableThirdPartySharing;

+ (void)removeDisableThirdPartySharing;

+ (void)clearAdjustStuff;

@end
16 changes: 16 additions & 0 deletions Adjust/ADJUserDefaults.m
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
static NSString * const PREFS_KEY_INSTALL_TRACKED = @"adj_install_tracked";
static NSString * const PREFS_KEY_DEEPLINK_URL = @"adj_deeplink_url";
static NSString * const PREFS_KEY_DEEPLINK_CLICK_TIME = @"adj_deeplink_click_time";
static NSString * const PREFS_KEY_DISABLE_THIRD_PARTY_SHARING = @"adj_disable_third_party_sharing";

@implementation ADJUserDefaults

Expand Down Expand Up @@ -86,13 +87,28 @@ + (void)removeDeeplink {
[[NSUserDefaults standardUserDefaults] synchronize];
}

+ (void)setDisableThirdPartySharing {
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:PREFS_KEY_DISABLE_THIRD_PARTY_SHARING];
[[NSUserDefaults standardUserDefaults] synchronize];
}

+ (BOOL)getDisableThirdPartySharing {
return [[NSUserDefaults standardUserDefaults] boolForKey:PREFS_KEY_DISABLE_THIRD_PARTY_SHARING];
}

+ (void)removeDisableThirdPartySharing {
[[NSUserDefaults standardUserDefaults] removeObjectForKey:PREFS_KEY_DISABLE_THIRD_PARTY_SHARING];
[[NSUserDefaults standardUserDefaults] synchronize];
}

+ (void)clearAdjustStuff {
[[NSUserDefaults standardUserDefaults] removeObjectForKey:PREFS_KEY_PUSH_TOKEN_DATA];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:PREFS_KEY_PUSH_TOKEN_STRING];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:PREFS_KEY_INSTALL_TRACKED];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:PREFS_KEY_GDPR_FORGET_ME];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:PREFS_KEY_DEEPLINK_URL];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:PREFS_KEY_DEEPLINK_CLICK_TIME];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:PREFS_KEY_DISABLE_THIRD_PARTY_SHARING];
[[NSUserDefaults standardUserDefaults] synchronize];
}

Expand Down
2 changes: 1 addition & 1 deletion Adjust/ADJUtil.m
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
static CTTelephonyNetworkInfo *networkInfo = nil;
#endif

static NSString * const kClientSdk = @"ios4.18.3";
static NSString * const kClientSdk = @"ios4.19.0";
static NSString * const kDeeplinkParam = @"deep_link=";
static NSString * const kSchemeDelimiter = @"://";
static NSString * const kDefaultScheme = @"AdjustUniversalScheme";
Expand Down
7 changes: 6 additions & 1 deletion Adjust/Adjust.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// Adjust.h
// Adjust
//
// V4.18.3
// V4.19.0
// Created by Christian Wellenbrock (wellle) on 23rd July 2013.
// Copyright © 2012-2017 Adjust GmbH. All rights reserved.
//
Expand Down Expand Up @@ -259,6 +259,11 @@ extern NSString * __nonnull const ADJAdRevenueSourceTapdaq;
*/
+ (void)trackAdRevenue:(nonnull NSString *)source payload:(nonnull NSData *)payload;

/**
* @brief Give right user to disable sharing data to any third-party.
*/
+ (void)disableThirdPartySharing;

/**
* Obtain singleton Adjust object.
*/
Expand Down
Loading

0 comments on commit c20f299

Please sign in to comment.