@@ -77,11 +77,11 @@ @implementation MPIAdobeApi
7777@interface MPKitAdobeMedia ()
7878
7979@property (nonatomic ) NSString *organizationId;
80- @property (nonatomic ) MPIAdobe *adobe;
8180@property id <AEPMediaTracker> defaultMediaTracker;
8281@property (nonatomic , strong , nonnull ) NSMutableDictionary <NSString *, id<AEPMediaTracker>> *mediaTrackers;
8382@property (nonatomic ) NSString *pushToken;
8483@property (nonatomic ) NSString *audienceManagerServer;
84+ @property (atomic ) BOOL syncingId;
8585
8686@end
8787
@@ -150,6 +150,8 @@ - (void)start {
150150 }
151151
152152 self->_started = YES ;
153+
154+ [self syncId ];
153155
154156 dispatch_async (dispatch_get_main_queue (), ^{
155157 NSDictionary *userInfo = @{mParticleKitInstanceKey:[[self class ] kitCode ]};
@@ -179,7 +181,6 @@ - (MPKitExecStatus *)logBaseEvent:(MPBaseEvent *)event {
179181 MPKitExecStatus *status = nil ;
180182 if ([event isKindOfClass: [MPMediaEvent class ]]) {
181183 MPMediaEvent *mediaEvent = (MPMediaEvent *)event;
182-
183184 status = [self routeMediaEvent: mediaEvent];
184185 } else if ([event isKindOfClass: [MPEvent class ]]) {
185186 status = [self execStatus: MPKitReturnCodeSuccess];
@@ -341,11 +342,11 @@ - (AEPMediaType)contentTypeForMediaEvent:(MPMediaEvent *)mediaEvent {
341342}
342343
343344- (void )didEnterBackground : (NSNotification *)notification {
344- [self sendNetworkRequest ];
345+ [self syncId ];
345346}
346347
347348- (void )willTerminate : (NSNotification *)notification {
348- [self sendNetworkRequest ];
349+ [self syncId ];
349350}
350351
351352- (FilteredMParticleUser *)currentUser {
@@ -386,75 +387,51 @@ - (NSString *)pushToken {
386387 return _pushToken;
387388}
388389
389- - (void )sendNetworkRequest {
390- NSString *marketingCloudId = [self marketingCloudIdFromIntegrationAttributes ];
391- if (!marketingCloudId) {
392- marketingCloudId = [_adobe marketingCloudIdFromUserDefaults ];
393- if (marketingCloudId.length ) {
394- [[MParticle sharedInstance ] setIntegrationAttributes: @{marketingCloudIdIntegrationAttributeKey: marketingCloudId} forKit: [[self class ] kitCode ]];
395- }
396- }
390+ - (void )syncId {
391+ if (self.syncingId ) return ;
397392
398- NSString *advertiserId = [self advertiserId ];
399- NSString *pushToken = [self pushToken ];
400- FilteredMParticleUser *user = [self currentUser ];
401- NSDictionary *userIdentities = user.userIdentities ;
402- [_adobe sendRequestWithMarketingCloudId: marketingCloudId advertiserId: advertiserId pushToken: pushToken organizationId: _organizationId userIdentities: userIdentities audienceManagerServer: _audienceManagerServer completion: ^(NSString *marketingCloudId, NSString *locationHint, NSString *blob, NSError *error) {
393+ self.syncingId = YES ;
394+ [AEPMobileIdentity getExperienceCloudId: ^(NSString * _Nullable mid, NSError * _Nullable error) {
403395 if (error) {
404- NSLog (@" mParticle -> Adobe kit request failed with error: %@ " , error);
405- return ;
406- }
407-
408- NSMutableDictionary *integrationAttributes = [NSMutableDictionary dictionary ];
409- NSString *existingMarketingCloudId = [self marketingCloudIdFromIntegrationAttributes ];
410- if (marketingCloudId.length && existingMarketingCloudId.length == 0 ) {
411- [integrationAttributes setObject: marketingCloudId forKey: marketingCloudIdIntegrationAttributeKey];
396+ NSLog (@" mParticle -> Adobe Media - Error getting Adobe cloud experience Id (marketing cloud Id): %@ " , error);
412397 } else {
413- [integrationAttributes setObject: existingMarketingCloudId forKey: marketingCloudIdIntegrationAttributeKey];
414- }
415- if (locationHint.length ) {
416- [integrationAttributes setObject: locationHint forKey: locationHintIntegrationAttributeKey];
417- }
418- if (blob.length ) {
419- [integrationAttributes setObject: blob forKey: blobIntegrationAttributeKey];
420- }
421-
422- if (integrationAttributes.count ) {
423- [[MParticle sharedInstance ] setIntegrationAttributes: integrationAttributes forKit: [[self class ] kitCode ]];
398+ NSString *existingMid = [self marketingCloudIdFromIntegrationAttributes ];
399+ if (mid.length > 0 && ![mid isEqualToString: existingMid]) {
400+ [[MParticle sharedInstance ] setIntegrationAttributes: @{marketingCloudIdIntegrationAttributeKey: mid} forKit: [[self class ] kitCode ]];
401+ }
424402 }
403+ self.syncingId = NO ;
425404 }];
426405}
427406
428407- (MPKitExecStatus *)setDeviceToken : (NSData *)deviceToken {
429408 _pushToken = [[NSString alloc ] initWithData: deviceToken encoding: NSUTF8StringEncoding];
430- [self sendNetworkRequest ];
409+ [self syncId ];
431410 MPKitExecStatus *execStatus = [[MPKitExecStatus alloc ] initWithSDKCode: [[self class ] kitCode ] returnCode: MPKitReturnCodeSuccess];
432411 return execStatus;
433412}
434413
435414- (MPKitExecStatus *)setUserIdentity : (NSString *)identityString identityType : (MPUserIdentity)identityType {
436- [self sendNetworkRequest ];
415+ [self syncId ];
437416 MPKitExecStatus *execStatus = [[MPKitExecStatus alloc ] initWithSDKCode: [[self class ] kitCode ] returnCode: MPKitReturnCodeSuccess];
438417 return execStatus;
439418}
440419
441420- (nonnull MPKitExecStatus *)didBecomeActive {
442- [self sendNetworkRequest ];
443-
421+ [self syncId ];
444422 MPKitExecStatus *execStatus = [[MPKitExecStatus alloc ] initWithSDKCode: @(MPKitInstanceAdobe) returnCode: MPKitReturnCodeSuccess];
445423 return execStatus;
446424}
447425
448426- (BOOL )shouldDelayMParticleUpload {
449427 NSString *marketingCloudId = [self marketingCloudIdFromIntegrationAttributes ];
450- return marketingCloudId.length == 0 ;
428+ return marketingCloudId.length == 0 || self. syncingId ;
451429}
452430
453431- (MPKitAPI *)kitApi {
454432 if (_kitApi == nil ) {
455433 _kitApi = [[MPKitAPI alloc ] init ];
456434 }
457-
458435 return _kitApi;
459436}
460437
0 commit comments