@@ -764,61 +764,59 @@ - (void)configureDataBlocking:(nullable NSDictionary *)blockSettings {
764764- (void )requestAttributionDetailsWithBlock : (void (^ _Nonnull)(void ))completionHandler requestsCompleted : (int )requestsCompleted {
765765#if TARGET_OS_IOS == 1
766766 NSError *error;
767- if (@available (iOS 14.3 , *)) {
768- NSString *attributionToken = [AAAttribution attributionTokenWithError: &error];
769- if (!attributionToken) {
770- completionHandler ();
771- return ;
772- }
767+ NSString *attributionToken = [AAAttribution attributionTokenWithError: &error];
768+ if (!attributionToken) {
769+ completionHandler ();
770+ return ;
771+ }
772+
773+ if (attributionToken) {
774+ NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: [NSURL URLWithString: @" https://api-adservices.apple.com/api/v1/" ]];
775+ [request setHTTPMethod: @" POST" ];
776+ [request setValue: @" text/plain" forHTTPHeaderField: @" Content-Type" ];
777+ [request setHTTPBody: [attributionToken dataUsingEncoding: NSUTF8StringEncoding]];
773778
774- if (attributionToken) {
775- NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: [NSURL URLWithString: @" https://api-adservices.apple.com/api/v1/" ]];
776- [request setHTTPMethod: @" POST" ];
777- [request setValue: @" text/plain" forHTTPHeaderField: @" Content-Type" ];
778- [request setHTTPBody: [attributionToken dataUsingEncoding: NSUTF8StringEncoding]];
779-
780- NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration ephemeralSessionConfiguration ];
781- sessionConfiguration.timeoutIntervalForRequest = 30 ;
782- sessionConfiguration.timeoutIntervalForResource = 30 ;
783- NSURLSession *urlSession = [NSURLSession sessionWithConfiguration: sessionConfiguration
784- delegate: nil
785- delegateQueue: nil ];
786- dispatch_async ([MParticle messageQueue ], ^{
787- [urlSession dataTaskWithRequest: request completionHandler: ^(NSData *data, NSURLResponse *urlResponse, NSError *error) {
788- if (error) {
789- MPILogError (@" Failed requesting Ads Attribution with error: %@ ." , [error localizedDescription ]);
790- if (error.code == 1 /* ADClientErrorLimitAdTracking */ ) {
791- completionHandler ();
792- } else if ((requestsCompleted + 1 ) > SEARCH_ADS_ATTRIBUTION_MAX_RETRIES) {
793- completionHandler ();
794- } else {
795- // Per Apple docs, "Handle any errors you receive and re-poll for data, if required"
796- dispatch_after (dispatch_time (DISPATCH_TIME_NOW, (int64_t )(SEARCH_ADS_ATTRIBUTION_DELAY_BEFORE_RETRY * NSEC_PER_SEC)), dispatch_get_main_queue (), ^{
797- [self requestAttributionDetailsWithBlock: completionHandler requestsCompleted: (requestsCompleted + 1 )];
798- });
799- }
800- } else {
801- NSDictionary *adAttributionDictionary = [NSJSONSerialization JSONObjectWithData: data options: 0 error: nil ];
802- // Convert the dictionary to the prior format expected by our backend
803- NSDictionary *finalAttributionDictionary = @{
804- @" Version4.0" : @{
805- @" iad-attribution" : adAttributionDictionary[@" attribution" ],
806- @" iad-org-id" : [adAttributionDictionary[@" orgId" ] stringValue ],
807- @" iad-campaign-id" : [adAttributionDictionary[@" campaignId" ] stringValue ],
808- @" iad-conversion-type" : adAttributionDictionary[@" conversionType" ],
809- @" iad-click-date" : adAttributionDictionary[@" clickDate" ],
810- @" iad-adgroup-id" : [adAttributionDictionary[@" adGroupId" ] stringValue ],
811- @" iad-country-or-region" : adAttributionDictionary[@" countryOrRegion" ],
812- @" iad-keyword-id" : [adAttributionDictionary[@" keywordId" ] stringValue ],
813- @" iad-ad-id" : [adAttributionDictionary[@" adId" ] stringValue ],
814- }
815- };
816- self.searchAdsInfo = [[finalAttributionDictionary mutableCopy ] copy ];
779+ NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration ephemeralSessionConfiguration ];
780+ sessionConfiguration.timeoutIntervalForRequest = 30 ;
781+ sessionConfiguration.timeoutIntervalForResource = 30 ;
782+ NSURLSession *urlSession = [NSURLSession sessionWithConfiguration: sessionConfiguration
783+ delegate: nil
784+ delegateQueue: nil ];
785+ dispatch_async ([MParticle messageQueue ], ^{
786+ [urlSession dataTaskWithRequest: request completionHandler: ^(NSData *data, NSURLResponse *urlResponse, NSError *error) {
787+ if (error) {
788+ MPILogError (@" Failed requesting Ads Attribution with error: %@ ." , [error localizedDescription ]);
789+ if (error.code == 1 /* ADClientErrorLimitAdTracking */ ) {
790+ completionHandler ();
791+ } else if ((requestsCompleted + 1 ) > SEARCH_ADS_ATTRIBUTION_MAX_RETRIES) {
817792 completionHandler ();
793+ } else {
794+ // Per Apple docs, "Handle any errors you receive and re-poll for data, if required"
795+ dispatch_after (dispatch_time (DISPATCH_TIME_NOW, (int64_t )(SEARCH_ADS_ATTRIBUTION_DELAY_BEFORE_RETRY * NSEC_PER_SEC)), dispatch_get_main_queue (), ^{
796+ [self requestAttributionDetailsWithBlock: completionHandler requestsCompleted: (requestsCompleted + 1 )];
797+ });
818798 }
819- }];
820- });
821- }
799+ } else {
800+ NSDictionary *adAttributionDictionary = [NSJSONSerialization JSONObjectWithData: data options: 0 error: nil ];
801+ // Convert the dictionary to the prior format expected by our backend
802+ NSDictionary *finalAttributionDictionary = @{
803+ @" Version4.0" : @{
804+ @" iad-attribution" : adAttributionDictionary[@" attribution" ],
805+ @" iad-org-id" : [adAttributionDictionary[@" orgId" ] stringValue ],
806+ @" iad-campaign-id" : [adAttributionDictionary[@" campaignId" ] stringValue ],
807+ @" iad-conversion-type" : adAttributionDictionary[@" conversionType" ],
808+ @" iad-click-date" : adAttributionDictionary[@" clickDate" ],
809+ @" iad-adgroup-id" : [adAttributionDictionary[@" adGroupId" ] stringValue ],
810+ @" iad-country-or-region" : adAttributionDictionary[@" countryOrRegion" ],
811+ @" iad-keyword-id" : [adAttributionDictionary[@" keywordId" ] stringValue ],
812+ @" iad-ad-id" : [adAttributionDictionary[@" adId" ] stringValue ],
813+ }
814+ };
815+ self.searchAdsInfo = [[finalAttributionDictionary mutableCopy ] copy ];
816+ completionHandler ();
817+ }
818+ }];
819+ });
822820 }
823821#endif
824822}
0 commit comments