Skip to content

Commit 413ca43

Browse files
committed
Merge pull request #150 from adjust/response_delegate
Response delegate
2 parents be07a9b + 8ed5980 commit 413ca43

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+2283
-575
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 = "4.5.4"
3+
s.version = "4.6.0"
44
s.summary = "This is the iOS SDK of adjust. You can read more about it at http://adjust.com."
55
s.homepage = "http://adjust.com"
66
s.license = { :type => 'MIT', :file => 'MIT-LICENSE' }
77
s.author = { "Christian Wellenbrock" => "[email protected]" }
8-
s.source = { :git => "https://github.com/adjust/ios_sdk.git", :tag => "v4.5.4" }
8+
s.source = { :git => "https://github.com/adjust/ios_sdk.git", :tag => "v4.6.0" }
99
s.ios.deployment_target = '6.0'
1010
s.tvos.deployment_target = '9.0'
1111
s.framework = 'SystemConfiguration'

Adjust.xcodeproj/project.pbxproj

Lines changed: 294 additions & 214 deletions
Large diffs are not rendered by default.

Adjust.xcodeproj/xcshareddata/xcschemes/AdjustSdk.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "0710"
3+
LastUpgradeVersion = "0720"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"

Adjust/ADJActivityHandler.h

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
//
88

99
#import "Adjust.h"
10-
#import "ADJAttribution.h"
10+
#import "ADJResponseData.h"
1111

1212
@protocol ADJActivityHandler <NSObject>
1313

@@ -18,24 +18,25 @@
1818

1919
- (void)trackEvent:(ADJEvent *)event;
2020

21-
- (void)finishedTracking:(NSDictionary *)jsonDict;
21+
- (void)finishedTracking:(ADJResponseData *)responseData;
22+
- (void)launchEventResponseTasks:(ADJEventResponseData *)eventResponseData;
23+
- (void)launchSessionResponseTasks:(ADJSessionResponseData *)sessionResponseData;
24+
- (void)launchAttributionResponseTasks:(ADJAttributionResponseData *)attributionResponseData;
2225
- (void)setEnabled:(BOOL)enabled;
2326
- (BOOL)isEnabled;
2427
- (void)appWillOpenUrl:(NSURL*)url;
2528
- (void)setDeviceToken:(NSData *)deviceToken;
2629

2730
- (ADJAttribution*) attribution;
28-
- (void) setAttribution:(ADJAttribution*)attribution;
29-
- (void) setAskingAttribution:(BOOL)askingAttribution;
31+
- (void)setAttribution:(ADJAttribution*)attribution;
32+
- (void)setAskingAttribution:(BOOL)askingAttribution;
3033

31-
- (BOOL) updateAttribution:(ADJAttribution*) attribution;
32-
- (void) setIadDate:(NSDate*)iAdImpressionDate withPurchaseDate:(NSDate*)appPurchaseDate;
34+
- (BOOL)updateAttribution:(ADJAttribution *)attribution;
35+
- (void)setIadDate:(NSDate*)iAdImpressionDate withPurchaseDate:(NSDate*)appPurchaseDate;
3336
- (void)setIadDetails:(NSDictionary *)attributionDetails
3437
error:(NSError *)error
3538
retriesLeft:(int)retriesLeft;
3639

37-
- (void) launchAttributionDelegate;
38-
3940
- (void) setOfflineMode:(BOOL)offline;
4041

4142
@end

Adjust/ADJActivityHandler.m

Lines changed: 140 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ @interface ADJActivityHandler()
3636
@property (nonatomic, retain) ADJActivityState *activityState;
3737
@property (nonatomic, retain) ADJTimerCycle *timer;
3838
@property (nonatomic, retain) id<ADJLogger> logger;
39-
@property (nonatomic, weak) NSObject<AdjustDelegate> *delegate;
39+
@property (nonatomic, weak) NSObject<AdjustDelegate> *adjustDelegate;
4040
@property (nonatomic, copy) ADJAttribution *attribution;
4141
@property (nonatomic, copy) ADJConfig *adjustConfig;
4242

@@ -76,7 +76,7 @@ - (id)initWithConfig:(ADJConfig *)adjustConfig {
7676
}
7777

7878
self.adjustConfig = adjustConfig;
79-
self.delegate = adjustConfig.delegate;
79+
self.adjustDelegate = adjustConfig.delegate;
8080

8181
self.logger = ADJAdjustFactory.logger;
8282
[self addNotificationObserver];
@@ -109,23 +109,43 @@ - (void)trackEvent:(ADJEvent *)event
109109
});
110110
}
111111

112-
- (void)finishedTracking:(NSDictionary *)jsonDict{
113-
if ([ADJUtil isNull:jsonDict]) return;
112+
- (void)finishedTracking:(ADJResponseData *)responseData {
113+
// redirect session responses to attribution handler to check for attribution information
114+
if ([responseData isKindOfClass:[ADJSessionResponseData class]]) {
115+
[self.attributionHandler checkSessionResponse:(ADJSessionResponseData*)responseData];
116+
return;
117+
}
118+
119+
// check if it's an event response
120+
if ([responseData isKindOfClass:[ADJEventResponseData class]]) {
121+
[self launchEventResponseTasks:(ADJEventResponseData*)responseData];
122+
return;
123+
}
124+
}
114125

115-
[self launchDeepLink:jsonDict];
116-
[self.attributionHandler checkAttribution:jsonDict];
126+
- (void)launchEventResponseTasks:(ADJEventResponseData *)eventResponseData {
127+
dispatch_async(self.internalQueue, ^{
128+
[self launchEventResponseTasksInternal:eventResponseData];
129+
});
130+
}
131+
132+
- (void)launchSessionResponseTasks:(ADJSessionResponseData *)sessionResponseData {
133+
dispatch_async(self.internalQueue, ^{
134+
[self launchSessionResponseTasksInternal:sessionResponseData];
135+
});
117136
}
118137

119-
- (void)launchDeepLink:(NSDictionary *)jsonDict{
120-
if ([ADJUtil isNull:jsonDict]) return;
138+
- (void)launchAttributionResponseTasks:(ADJAttributionResponseData *)attributionResponseData {
139+
dispatch_async(self.internalQueue, ^{
140+
[self launchAttributionResponseTasksInternal:attributionResponseData];
141+
});
142+
}
121143

122-
NSString *deepLink = [jsonDict objectForKey:@"deeplink"];
144+
- (void)launchDeepLink:(NSString *)deepLink{
123145
if (deepLink == nil) return;
124146

125147
NSURL* deepLinkUrl = [NSURL URLWithString:deepLink];
126148

127-
[self.logger info:@"Open deep link (%@)", deepLink];
128-
129149
BOOL success = [[UIApplication sharedApplication] openURL:deepLinkUrl];
130150

131151
if (!success) {
@@ -230,11 +250,11 @@ - (void)setDeviceToken:(NSData *)deviceToken {
230250

231251
- (void)setIadDate:(NSDate *)iAdImpressionDate withPurchaseDate:(NSDate *)appPurchaseDate {
232252
if (iAdImpressionDate == nil) {
233-
[self.logger verbose:@"iAdImpressionDate not received"];
253+
[self.logger debug:@"iAdImpressionDate not received"];
234254
return;
235255
}
236256

237-
[self.logger verbose:@"iAdImpressionDate received: %@", iAdImpressionDate];
257+
[self.logger debug:@"iAdImpressionDate received: %@", iAdImpressionDate];
238258

239259

240260
double now = [NSDate.date timeIntervalSince1970];
@@ -249,6 +269,7 @@ - (void)setIadDate:(NSDate *)iAdImpressionDate withPurchaseDate:(NSDate *)appPur
249269

250270
ADJActivityPackage *clickPackage = [clickBuilder buildClickPackage:@"iad"];
251271
[self.packageHandler addPackage:clickPackage];
272+
[self.packageHandler sendFirstPackage];
252273
}
253274

254275
- (void)setIadDetails:(NSDictionary *)attributionDetails
@@ -259,14 +280,10 @@ - (void)setIadDetails:(NSDictionary *)attributionDetails
259280
[self.logger warn:@"Unable to read iAd details"];
260281

261282
if (retriesLeft < 0) {
262-
[self.logger error:@"Reached limit number of retry for iAd"];
283+
[self.logger warn:@"Limit number of retry for iAd v3 surpassed"];
263284
return;
264285
}
265286

266-
if (retriesLeft == 0) {
267-
[self.logger error:@"Reached limit number of retry for iAd, trying iAd v2"];
268-
}
269-
270287
if (error.code == AdjADClientErrorUnknown) {
271288
dispatch_time_t retryTime = dispatch_time(DISPATCH_TIME_NOW, kDelayRetryIad);
272289
dispatch_after(retryTime, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
@@ -291,32 +308,7 @@ - (void)setIadDetails:(NSDictionary *)attributionDetails
291308

292309
ADJActivityPackage *clickPackage = [clickBuilder buildClickPackage:@"iad3"];
293310
[self.packageHandler addPackage:clickPackage];
294-
}
295-
296-
- (BOOL)updateAttribution:(ADJAttribution *)attribution {
297-
if (attribution == nil) {
298-
return NO;
299-
}
300-
if ([attribution isEqual:self.attribution]) {
301-
return NO;
302-
}
303-
self.attribution = attribution;
304-
[self writeAttribution];
305-
306-
[self launchAttributionDelegate];
307-
308-
return YES;
309-
}
310-
311-
- (void)launchAttributionDelegate{
312-
if (self.delegate == nil) {
313-
return;
314-
}
315-
if (![self.delegate respondsToSelector:@selector(adjustAttributionChanged:)]) {
316-
return;
317-
}
318-
[self.delegate performSelectorOnMainThread:@selector(adjustAttributionChanged:)
319-
withObject:self.attribution waitUntilDone:NO];
311+
[self.packageHandler sendFirstPackage];
320312
}
321313

322314
- (void)setAskingAttribution:(BOOL)askingAttribution {
@@ -364,7 +356,7 @@ - (void)initInternal {
364356
self.attributionHandler = [ADJAdjustFactory attributionHandlerForActivityHandler:self
365357
withAttributionPackage:attributionPackage
366358
startPaused:[self paused]
367-
hasDelegate:(self.delegate != nil)];
359+
hasAttributionChangedDelegate:self.adjustConfig.hasAttributionChangedDelegate];
368360

369361
self.timer = [ADJTimerCycle timerWithBlock:^{ [self timerFiredInternal]; }
370362
queue:self.internalQueue
@@ -489,6 +481,108 @@ - (void)eventInternal:(ADJEvent *)event
489481
[self writeActivityState];
490482
}
491483

484+
- (void) launchEventResponseTasksInternal:(ADJEventResponseData *)eventResponseData {
485+
// event success callback
486+
if (eventResponseData.success
487+
&& [self.adjustDelegate respondsToSelector:@selector(adjustEventTrackingSucceeded:)])
488+
{
489+
[self.logger debug:@"Launching success event tracking delegate"];
490+
[self.adjustDelegate performSelectorOnMainThread:@selector(adjustEventTrackingSucceeded:)
491+
withObject:[eventResponseData successResponseData]
492+
waitUntilDone:NO]; // non-blocking
493+
return;
494+
}
495+
// event failure callback
496+
if (!eventResponseData.success
497+
&& [self.adjustDelegate respondsToSelector:@selector(adjustEventTrackingFailed:)])
498+
{
499+
[self.logger debug:@"Launching failed event tracking delegate"];
500+
[self.adjustDelegate performSelectorOnMainThread:@selector(adjustEventTrackingFailed:)
501+
withObject:[eventResponseData failureResponseData]
502+
waitUntilDone:NO]; // non-blocking
503+
return;
504+
}
505+
}
506+
507+
- (void) launchSessionResponseTasksInternal:(ADJSessionResponseData *)sessionResponseData {
508+
BOOL toLaunchAttributionDelegate = [self updateAttribution:sessionResponseData.attribution];
509+
510+
// session success callback
511+
if (sessionResponseData.success
512+
&& [self.adjustDelegate respondsToSelector:@selector(adjustSessionTrackingSucceeded:)])
513+
{
514+
[self.logger debug:@"Launching success session tracking delegate"];
515+
[self.adjustDelegate performSelectorOnMainThread:@selector(adjustSessionTrackingSucceeded:)
516+
withObject:[sessionResponseData successResponseData]
517+
waitUntilDone:NO]; // non-blocking
518+
}
519+
// session failure callback
520+
if (!sessionResponseData.success
521+
&& [self.adjustDelegate respondsToSelector:@selector(adjustSessionTrackingFailed:)])
522+
{
523+
[self.logger debug:@"Launching failed session tracking delegate"];
524+
[self.adjustDelegate performSelectorOnMainThread:@selector(adjustSessionTrackingFailed:)
525+
withObject:[sessionResponseData failureResponseData]
526+
waitUntilDone:NO]; // non-blocking
527+
}
528+
529+
// try to update and launch the attribution changed delegate blocking
530+
if (toLaunchAttributionDelegate) {
531+
[self.logger debug:@"Launching attribution changed delegate"];
532+
[self.adjustDelegate performSelectorOnMainThread:@selector(adjustAttributionChanged:)
533+
withObject:sessionResponseData.attribution
534+
waitUntilDone:NO]; // non-blocking
535+
}
536+
537+
if ([ADJUtil isNull:sessionResponseData.jsonResponse]) {
538+
return;
539+
}
540+
541+
NSString *deepLink = [sessionResponseData.jsonResponse objectForKey:@"deeplink"];
542+
if (deepLink == nil) {
543+
return;
544+
}
545+
546+
[self.logger info:@"Trying to open deep link (%@)", deepLink];
547+
548+
[self performSelectorOnMainThread:@selector(launchDeepLink:)
549+
withObject:deepLink
550+
waitUntilDone:NO]; // non-blocking
551+
}
552+
553+
- (void) launchAttributionResponseTasksInternal:(ADJAttributionResponseData *)attributionResponseData {
554+
BOOL toLaunchAttributionDelegate = [self updateAttribution:attributionResponseData.attribution];
555+
556+
// try to update and launch the attribution changed delegate non-blocking
557+
if (toLaunchAttributionDelegate) {
558+
[self.logger debug:@"Launching attribution changed delegate"];
559+
[self.adjustDelegate performSelectorOnMainThread:@selector(adjustAttributionChanged:)
560+
withObject:attributionResponseData.attribution
561+
waitUntilDone:NO]; // non-blocking
562+
}
563+
}
564+
565+
- (BOOL)updateAttribution:(ADJAttribution *)attribution {
566+
if (attribution == nil) {
567+
return NO;
568+
}
569+
if ([attribution isEqual:self.attribution]) {
570+
return NO;
571+
}
572+
self.attribution = attribution;
573+
[self writeAttribution];
574+
575+
if (self.adjustDelegate == nil) {
576+
return NO;
577+
}
578+
579+
if (![self.adjustDelegate respondsToSelector:@selector(adjustAttributionChanged:)]) {
580+
return NO;
581+
}
582+
583+
return YES;
584+
}
585+
492586
- (void) appWillOpenUrlInternal:(NSURL *)url {
493587
if ([ADJUtil isNull:url]) {
494588
return;
@@ -525,6 +619,7 @@ - (void) appWillOpenUrlInternal:(NSURL *)url {
525619

526620
ADJActivityPackage *clickPackage = [clickBuilder buildClickPackage:@"deeplink"];
527621
[self.packageHandler addPackage:clickPackage];
622+
[self.packageHandler sendFirstPackage];
528623
}
529624

530625
- (BOOL) readDeeplinkQueryString:(NSString *)queryString

Adjust/ADJAdditions/UIDevice+ADJAdditions.m

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ - (void) adjSetIad:(ADJActivityHandler *) activityHandler
170170

171171
// if no tries for iad v3 left -> iad v2
172172
if (triesV3Left == 0) {
173+
[logger warn:@"Reached limit number of retry for iAd v3. Trying iAd v2"];
173174
[self adjSetIadWithDates:activityHandler ADClientSharedClientInstance:ADClientSharedClientInstance];
174175
return;
175176
}
@@ -178,8 +179,9 @@ - (void) adjSetIad:(ADJActivityHandler *) activityHandler
178179
ADClientSharedClientInstance:ADClientSharedClientInstance
179180
retriesLeft:(triesV3Left - 1)];
180181

181-
// if no tries for iad v3 left -> iad v2
182+
// if iad v3 not available -> iad v2
182183
if (!isIadV3Avaliable) {
184+
[logger warn:@"iAd v3 not available. Trying iAd v2"];
183185
[self adjSetIadWithDates:activityHandler ADClientSharedClientInstance:ADClientSharedClientInstance];
184186
}
185187
#pragma clang diagnostic pop

Adjust/ADJAdjustFactory.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
+ (id<ADJAttributionHandler>)attributionHandlerForActivityHandler:(id<ADJActivityHandler>)activityHandler
2929
withAttributionPackage:(ADJActivityPackage *) attributionPackage
3030
startPaused:(BOOL)startPaused
31-
hasDelegate:(BOOL)hasDelegate;
31+
hasAttributionChangedDelegate:(BOOL)hasAttributionChangedDelegate;
3232

3333
+ (void)setPackageHandler:(id<ADJPackageHandler>)packageHandler;
3434
+ (void)setRequestHandler:(id<ADJRequestHandler>)requestHandler;

Adjust/ADJAdjustFactory.m

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,19 +84,19 @@ + (NSTimeInterval)timerStart {
8484
+ (id<ADJAttributionHandler>)attributionHandlerForActivityHandler:(id<ADJActivityHandler>)activityHandler
8585
withAttributionPackage:(ADJActivityPackage *) attributionPackage
8686
startPaused:(BOOL)startPaused
87-
hasDelegate:(BOOL)hasDelegate
87+
hasAttributionChangedDelegate:(BOOL)hasAttributionChangedDelegate
8888
{
8989
if (internalAttributionHandler == nil) {
9090
return [ADJAttributionHandler handlerWithActivityHandler:activityHandler
9191
withAttributionPackage:attributionPackage
9292
startPaused:startPaused
93-
hasDelegate:hasDelegate];
93+
hasAttributionChangedDelegate:hasAttributionChangedDelegate];
9494
}
9595

9696
return [internalAttributionHandler initWithActivityHandler:activityHandler
9797
withAttributionPackage:attributionPackage
9898
startPaused:startPaused
99-
hasDelegate:hasDelegate];
99+
hasAttributionChangedDelegate:hasAttributionChangedDelegate];
100100
}
101101

102102
+ (void)setPackageHandler:(id<ADJPackageHandler>)packageHandler {

0 commit comments

Comments
 (0)