Skip to content

Commit 8a1d1c8

Browse files
committed
Merge pull request #45 from adjust/deep_link
Added deep link parameters
2 parents bdda238 + 87a30bc commit 8a1d1c8

15 files changed

+245
-59
lines changed

Adjust.podspec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
Pod::Spec.new do |s|
22
s.name = "Adjust"
3-
s.version = "3.2.1"
3+
s.version = "3.3.0"
44
s.summary = "This is the iOS SDK of Adjust. You can read more about it at http://adjust.io."
55
s.homepage = "http://adjust.io"
66
s.license = { :type => 'MIT', :file => 'MIT-LICENSE' }
77
s.author = { "Christian Wellenbrock" => "[email protected]" }
8-
s.source = { :git => "https://github.com/adeven/adjust_ios_sdk.git", :tag => "v3.2.1" }
8+
s.source = { :git => "https://github.com/adeven/adjust_ios_sdk.git", :tag => "v3.3.0" }
99
s.platform = :ios, '4.3'
1010
s.framework = 'SystemConfiguration'
1111
s.weak_framework = 'AdSupport'

Adjust/AIActivityHandler.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
- (void)finishedTrackingWithResponse:(AIResponseData *)response;
3333
- (void)setEnabled:(BOOL)enabled;
3434
- (BOOL)isEnabled;
35+
- (void)readOpenUrl:(NSURL*)url;
3536

3637
@end
3738

Adjust/AIActivityHandler.m

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@
1919
#import "AIAdjustFactory.h"
2020

2121
static NSString * const kActivityStateFilename = @"AdjustIoActivityState";
22+
static NSString * const kAdjustPrefix = @"adjust_";
2223
static const char * const kInternalQueueName = "io.adjust.ActivityQueue";
2324

24-
static const uint64_t kTimerInterval = 60 * NSEC_PER_SEC; // 1 minute
25-
static const uint64_t kTimerLeeway = 1 * NSEC_PER_SEC; // 1 second
25+
static const uint64_t kTimerInterval = 60 * NSEC_PER_SEC; // 1 minute
26+
static const uint64_t kTimerLeeway = 1 * NSEC_PER_SEC; // 1 second
2627

2728

2829
#pragma mark -
@@ -141,6 +142,12 @@ - (BOOL)isEnabled {
141142
}
142143
}
143144

145+
- (void)readOpenUrl:(NSURL*)url {
146+
dispatch_async(self.internalQueue, ^{
147+
[self readOpenUrlInternal:url];
148+
});
149+
}
150+
144151
#pragma mark - internal
145152
- (void)initInternal:(NSString *)yourAppToken {
146153
if (![self checkAppTokenNotNil:yourAppToken]) return;
@@ -309,6 +316,40 @@ - (void)revenueInternal:(double)amount
309316
[self.logger debug:@"Event %d (revenue)", self.activityState.eventCount];
310317
}
311318

319+
- (void) readOpenUrlInternal:(NSURL *)url {
320+
NSArray* queryArray = [url.query componentsSeparatedByString:@"&"];
321+
NSMutableDictionary* adjustDeepLinks = [NSMutableDictionary dictionary];
322+
323+
for (NSString* fieldValuePair in queryArray) {
324+
NSArray* pairComponents = [fieldValuePair componentsSeparatedByString:@"="];
325+
if (pairComponents.count != 2) continue;
326+
327+
NSString* key = [pairComponents objectAtIndex:0];
328+
if (![key hasPrefix:kAdjustPrefix]) continue;
329+
330+
NSString* value = [pairComponents objectAtIndex:1];
331+
if (value.length == 0) continue;
332+
333+
NSString* keyWOutPrefix = [key substringFromIndex:kAdjustPrefix.length];
334+
if (keyWOutPrefix.length == 0) continue;
335+
336+
[adjustDeepLinks setObject:value forKey:keyWOutPrefix];
337+
}
338+
339+
if (adjustDeepLinks.count == 0) {
340+
return;
341+
}
342+
343+
AIPackageBuilder *reattributionBuilder = [[AIPackageBuilder alloc] init];
344+
reattributionBuilder.deeplinkParameters = adjustDeepLinks;
345+
[self injectGeneralAttributes:reattributionBuilder];
346+
AIActivityPackage *reattributionPackage = [reattributionBuilder buildReattributionPackage];
347+
[self.packageHandler addPackage:reattributionPackage];
348+
[self.packageHandler sendFirstPackage];
349+
350+
[self.logger debug:@"Reattribution %@", adjustDeepLinks];
351+
}
352+
312353
#pragma mark - private
313354

314355
// returns whether or not the activity state should be written
@@ -358,7 +399,7 @@ - (void)writeActivityState {
358399
BOOL result = [NSKeyedArchiver archiveRootObject:self.activityState toFile:filename];
359400
if (result == YES) {
360401
[AIUtil excludeFromBackup:filename];
361-
[self.logger verbose:@"Wrote activity state: %@", self.activityState];
402+
[self.logger debug:@"Wrote activity state: %@", self.activityState];
362403
} else {
363404
[self.logger error:@"Failed to write activity state"];
364405
}

Adjust/AIActivityKind.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@
99
#import <Foundation/Foundation.h>
1010

1111
typedef enum {
12-
AIActivityKindUnknown = 0,
13-
AIActivityKindSession = 1,
14-
AIActivityKindEvent = 2,
15-
AIActivityKindRevenue = 3,
12+
AIActivityKindUnknown = 0,
13+
AIActivityKindSession = 1,
14+
AIActivityKindEvent = 2,
15+
AIActivityKindRevenue = 3,
16+
AIActivityKindReattribution = 4,
1617
} AIActivityKind;
1718

1819
AIActivityKind AIActivityKindFromString(NSString *string);

Adjust/AIActivityKind.m

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,19 @@ AIActivityKind AIActivityKindFromString(NSString *string) {
1515
return AIActivityKindEvent;
1616
} else if ([@"revenue" isEqualToString:string]) {
1717
return AIActivityKindRevenue;
18+
} else if ([@"reattribution" isEqualToString:string]) {
19+
return AIActivityKindReattribution;
1820
} else {
1921
return AIActivityKindUnknown;
2022
}
2123
}
2224

2325
NSString* AIActivityKindToString(AIActivityKind activityKind) {
2426
switch (activityKind) {
25-
case AIActivityKindSession: return @"session";
26-
case AIActivityKindEvent: return @"event";
27-
case AIActivityKindRevenue: return @"revenue";
28-
case AIActivityKindUnknown: return @"unknown";
27+
case AIActivityKindSession: return @"session";
28+
case AIActivityKindEvent: return @"event";
29+
case AIActivityKindRevenue: return @"revenue";
30+
case AIActivityKindReattribution: return @"reattribution";
31+
case AIActivityKindUnknown: return @"unknown";
2932
}
3033
}

Adjust/AIPackageBuilder.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,13 @@
3737
@property (nonatomic, copy) NSDictionary *callbackParameters;
3838
@property (nonatomic, assign) double amountInCents;
3939

40+
// reattributions
41+
@property (nonatomic, copy) NSDictionary* deeplinkParameters;
42+
43+
4044
- (AIActivityPackage *)buildSessionPackage;
4145
- (AIActivityPackage *)buildEventPackage;
4246
- (AIActivityPackage *)buildRevenuePackage;
47+
- (AIActivityPackage *)buildReattributionPackage;
4348

4449
@end

Adjust/AIPackageBuilder.m

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,19 @@ - (AIActivityPackage *)buildRevenuePackage {
5454
return revenuePackage;
5555
}
5656

57+
- (AIActivityPackage *)buildReattributionPackage {
58+
NSMutableDictionary *parameters = [self defaultParameters];
59+
[self parameters:parameters setDictionaryJson:self.deeplinkParameters forKey:@"deeplink_parameters"];
60+
61+
AIActivityPackage *reattributionPackage = [self defaultActivityPackage];
62+
reattributionPackage.path = @"/reattribute";
63+
reattributionPackage.activityKind = AIActivityKindReattribution;
64+
reattributionPackage.suffix = @"";
65+
reattributionPackage.parameters = parameters;
66+
67+
return reattributionPackage;
68+
}
69+
5770
#pragma mark private
5871
- (AIActivityPackage *)defaultActivityPackage {
5972
AIActivityPackage *activityPackage = [[AIActivityPackage alloc] init];
@@ -87,9 +100,9 @@ - (NSMutableDictionary *)defaultParameters {
87100

88101
- (void)injectEventParameters:(NSMutableDictionary *)parameters {
89102
// event specific
90-
[self parameters:parameters setInt:self.eventCount forKey:@"event_count"];
91-
[self parameters:parameters setString:self.eventToken forKey:@"event_token"];
92-
[self parameters:parameters setDictionary:self.callbackParameters forKey:@"params"];
103+
[self parameters:parameters setInt:self.eventCount forKey:@"event_count"];
104+
[self parameters:parameters setString:self.eventToken forKey:@"event_token"];
105+
[self parameters:parameters setDictionaryBase64:self.callbackParameters forKey:@"params"];
93106
}
94107

95108
- (NSString *)amountString {
@@ -138,13 +151,21 @@ - (void)parameters:(NSMutableDictionary *)parameters setDuration:(double)value f
138151
[self parameters:parameters setInt:intValue forKey:key];
139152
}
140153

141-
- (void)parameters:(NSMutableDictionary *)parameters setDictionary:(NSDictionary *)dictionary forKey:(NSString *)key {
154+
- (void)parameters:(NSMutableDictionary *)parameters setDictionaryBase64:(NSDictionary *)dictionary forKey:(NSString *)key {
142155
if (dictionary == nil) return;
143156

144157
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary options:0 error:nil];
145158
NSString *dictionaryString = jsonData.aiEncodeBase64;
146159
[self parameters:parameters setString:dictionaryString forKey:key];
147160
}
148161

162+
- (void)parameters:(NSMutableDictionary *)parameters setDictionaryJson:(NSDictionary *)dictionary forKey:(NSString *)key {
163+
if (dictionary == nil) return;
164+
165+
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary options:0 error:nil];
166+
NSString *dictionaryString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
167+
[self parameters:parameters setString:dictionaryString forKey:key];
168+
}
169+
149170
@end
150171

Adjust/AIUtil.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
#include <sys/xattr.h>
1515

1616
static NSString * const kBaseUrl = @"https://app.adjust.io";
17-
static NSString * const kClientSdk = @"ios3.2.1";
17+
static NSString * const kClientSdk = @"ios3.3.0";
1818

1919
static NSString * const kDateFormat = @"yyyy-MM-dd'T'HH:mm:ss'Z'Z";
2020
static NSDateFormatter * dateFormat;

Adjust/Adjust.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,11 @@ static NSString * const AIEnvironmentProduction = @"production";
164164
*/
165165
+ (BOOL)isEnabled;
166166

167+
/**
168+
* Read the URL that opened the application to search for
169+
* an adjust deep link
170+
*/
171+
+ (void)appWillOpenUrl:(NSURL *)url;
167172
@end
168173

169174

Adjust/Adjust.m

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,4 +132,8 @@ + (BOOL)isEnabled {
132132
return [activityHandler isEnabled];
133133
}
134134

135+
+ (void)appWillOpenUrl:(NSURL *)url {
136+
[activityHandler readOpenUrl:url];
137+
}
138+
135139
@end

0 commit comments

Comments
 (0)