2222static NSString * const kAttributionFilename = @" AdjustIoAttribution" ;
2323static NSString * const kAdjustPrefix = @" adjust_" ;
2424static const char * const kInternalQueueName = " io.adjust.ActivityQueue" ;
25+ // number of tries
26+ static const int kTryIadV3 = 2 ;
27+ static const uint64_t kDelayRetryIad = 2 * NSEC_PER_SEC; // 1 second
2528
2629#pragma mark -
2730@interface ADJActivityHandler ()
@@ -43,6 +46,12 @@ @interface ADJActivityHandler()
4346
4447@end
4548
49+ // copy from ADClientError
50+ typedef NS_ENUM (NSInteger , AdjADClientError) {
51+ AdjADClientErrorUnknown = 0 ,
52+ AdjADClientErrorLimitAdTracking = 1 ,
53+ };
54+
4655#pragma mark -
4756@implementation ADJActivityHandler
4857
@@ -234,9 +243,53 @@ - (void)setIadDate:(NSDate *)iAdImpressionDate withPurchaseDate:(NSDate *)appPur
234243 config: self .adjustConfig
235244 createdAt: now];
236245
237- [clickBuilder setPurchaseTime: appPurchaseDate];
246+ clickBuilder.purchaseTime = appPurchaseDate;
247+ clickBuilder.clickTime = iAdImpressionDate;
238248
239- ADJActivityPackage *clickPackage = [clickBuilder buildClickPackage: @" iad" clickTime: iAdImpressionDate];
249+ ADJActivityPackage *clickPackage = [clickBuilder buildClickPackage: @" iad" ];
250+ [self .packageHandler addPackage: clickPackage];
251+ }
252+
253+ - (void )setIadDetails : (NSDictionary *)attributionDetails
254+ error : (NSError *)error
255+ retriesLeft : (int )retriesLeft
256+ {
257+ if (![ADJUtil isNull: error]) {
258+ [self .logger error: @" iAd details error (%s )" , [error description ]];
259+
260+ if (retriesLeft < 0 ) {
261+ [self .logger error: @" Reached limit number of retry for iAd" ];
262+ return ;
263+ }
264+
265+ if (retriesLeft == 0 ) {
266+ [self .logger error: @" Reached limit number of retry for iAd, trying iAd v2" ];
267+ }
268+
269+ if (error.code == AdjADClientErrorUnknown) {
270+
271+ dispatch_time_t retryTime = dispatch_time (DISPATCH_TIME_NOW, kDelayRetryIad );
272+ dispatch_after (retryTime, dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0 ), ^{
273+ [[UIDevice currentDevice ] adjSetIad: self triesV3Left: retriesLeft];
274+ });
275+ }
276+ return ;
277+ }
278+
279+ if ([ADJUtil isNull: attributionDetails]) {
280+ return ;
281+ }
282+
283+ double now = [NSDate .date timeIntervalSince1970 ];
284+ ADJPackageBuilder *clickBuilder = [[ADJPackageBuilder alloc ]
285+ initWithDeviceInfo: self .deviceInfo
286+ activityState: self .activityState
287+ config: self .adjustConfig
288+ createdAt: now];
289+
290+ clickBuilder.iadDetails = attributionDetails;
291+
292+ ADJActivityPackage *clickPackage = [clickBuilder buildClickPackage: @" iad3" ];
240293 [self .packageHandler addPackage: clickPackage];
241294}
242295
@@ -317,8 +370,7 @@ - (void)initInternal {
317370 queue: self .internalQueue
318371 startTime: ADJAdjustFactory.timerStart
319372 intervalTime: ADJAdjustFactory.timerInterval];
320-
321- [[UIDevice currentDevice ] adjSetIad: self ];
373+ [[UIDevice currentDevice ] adjSetIad: self triesV3Left: kTryIadV3 ];
322374
323375 [self startInternal ];
324376}
@@ -469,8 +521,9 @@ - (void) appWillOpenUrlInternal:(NSURL *)url {
469521 createdAt: now];
470522 clickBuilder.deeplinkParameters = adjustDeepLinks;
471523 clickBuilder.attribution = deeplinkAttribution;
524+ clickBuilder.clickTime = [NSDate date ];
472525
473- ADJActivityPackage *clickPackage = [clickBuilder buildClickPackage: @" deeplink" clickTime: [ NSDate date ] ];
526+ ADJActivityPackage *clickPackage = [clickBuilder buildClickPackage: @" deeplink" ];
474527 [self .packageHandler addPackage: clickPackage];
475528}
476529
0 commit comments