diff --git a/iOS_SDK/OneSignalSDK/Source/OSStateSynchronizer.m b/iOS_SDK/OneSignalSDK/Source/OSStateSynchronizer.m index dc12f48ea..ec5537be4 100644 --- a/iOS_SDK/OneSignalSDK/Source/OSStateSynchronizer.m +++ b/iOS_SDK/OneSignalSDK/Source/OSStateSynchronizer.m @@ -200,16 +200,6 @@ - (void)setExternalUserId:(NSString *)externalId withExternalIdAuthHashToken:(NS withAppId:appId]; } - // Make sure this is not a duplicate request, if the email and push channels are aligned correctly with the same external id - if (![OneSignal shouldUpdateExternalUserId:externalId withRequests:requests]) { - // Use callback to return success for both cases here, since push and - // email (if email is not setup, email is not included) have been set already - let results = [OneSignal getDuplicateExternalUserIdResponse:externalId withRequests:requests]; - if (successBlock) - successBlock(results); - return; - } - [OneSignalClient.sharedClient executeSimultaneousRequests:requests withCompletion:^(NSDictionary *results) { if (results[OS_PUSH] && results[OS_PUSH][OS_SUCCESS] && [results[OS_PUSH][OS_SUCCESS] boolValue]) { [OneSignalUserDefaults.initStandard saveStringForKey:OSUD_EXTERNAL_USER_ID withValue:externalId]; diff --git a/iOS_SDK/OneSignalSDK/Source/OneSignal.m b/iOS_SDK/OneSignalSDK/Source/OneSignal.m index 48b977590..60cd7db31 100755 --- a/iOS_SDK/OneSignalSDK/Source/OneSignal.m +++ b/iOS_SDK/OneSignalSDK/Source/OneSignal.m @@ -2773,24 +2773,6 @@ + (BOOL)shouldUpdateExternalUserId:(NSString*)externalId withRequests:(NSDiction return updateExternalUserId || updateEmailExternalUserId; } -+ (NSMutableDictionary*)getDuplicateExternalUserIdResponse:(NSString*)externalId withRequests:(NSDictionary*)requests { - NSMutableDictionary *results = [NSMutableDictionary new]; - [OneSignal onesignal_Log:ONE_S_LL_WARN message:[NSString stringWithFormat:@"Attempted to set external user id, but %@ is already set", externalId]]; - - results[@"push"] = @{ - @"success" : @(true) - }; - - // Make sure to only add email if email was attempted - if (requests[@"email"]) { - results[@"email"] = @{ - @"success" : @(true) - }; - } - - return results; -} - /* Start of outcome module */ diff --git a/iOS_SDK/OneSignalSDK/UnitTests/UnitTests.m b/iOS_SDK/OneSignalSDK/UnitTests/UnitTests.m index 9bcad20bf..2891ee914 100644 --- a/iOS_SDK/OneSignalSDK/UnitTests/UnitTests.m +++ b/iOS_SDK/OneSignalSDK/UnitTests/UnitTests.m @@ -2323,9 +2323,9 @@ - (void)testSetExternalUserIdWithRegistration { [OneSignal setExternalUserId:TEST_EXTERNAL_USER_ID]; [UnitTestCommonMethods initOneSignal_andThreadWait]; - - XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequest[@"external_user_id"], TEST_EXTERNAL_USER_ID); - XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequestType, NSStringFromClass([OSRequestRegisterUser class])); + let registerUserRequest = OneSignalClientOverrider.executedRequests[1]; + XCTAssertEqualObjects(registerUserRequest.parameters[@"external_user_id"], TEST_EXTERNAL_USER_ID); + XCTAssertEqualObjects(NSStringFromClass([registerUserRequest class]), NSStringFromClass([OSRequestRegisterUser class])); } - (void)testSetExternalUserIdAfterRegistration { @@ -2354,21 +2354,21 @@ - (void)testRemoveExternalUserId { } // Tests to make sure that the SDK will not send an external ID if it already successfully sent the same ID -- (void)testDoesntSendExistingExternalUserIdAfterRegistration { +- (void)testDoesSendExistingExternalUserIdAfterRegistration { [OneSignal setExternalUserId:TEST_EXTERNAL_USER_ID]; [UnitTestCommonMethods initOneSignal_andThreadWait]; - XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequestType, NSStringFromClass([OSRequestRegisterUser class])); + XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequestType, NSStringFromClass([OSRequestUpdateExternalUserId class])); [OneSignal setExternalUserId:TEST_EXTERNAL_USER_ID]; // the PUT request to set external ID should not happen since the external ID // is the same as it was during registration - XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequestType, NSStringFromClass([OSRequestRegisterUser class])); + XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequestType, NSStringFromClass([OSRequestUpdateExternalUserId class])); } -- (void)testDoesntSendExistingExternalUserIdBeforeRegistration { +- (void)testDoesSendExistingExternalUserIdBeforeRegistration { //mimics a previous session where the external user ID was set [OneSignalUserDefaults.initStandard saveStringForKey:OSUD_EXTERNAL_USER_ID withValue:TEST_EXTERNAL_USER_ID]; @@ -2376,11 +2376,11 @@ - (void)testDoesntSendExistingExternalUserIdBeforeRegistration { [UnitTestCommonMethods initOneSignal_andThreadWait]; - XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequestType, NSStringFromClass([OSRequestRegisterUser class])); + XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequestType, NSStringFromClass([OSRequestUpdateExternalUserId class])); // the registration request should not have included external user ID // since it had been set already to the same value in a previous session - XCTAssertNil(OneSignalClientOverrider.lastHTTPRequest[@"external_user_id"]); + XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequest[@"external_user_id"], TEST_EXTERNAL_USER_ID); } - (void)testSetExternalUserId_forPush_withCompletion { @@ -2441,13 +2441,14 @@ - (void)testSetExternalUserId_WithAuthToken_forPush_withCompletion_beforRegister // 2. Init OneSignal [UnitTestCommonMethods initOneSignal_andThreadWait]; + [UnitTestCommonMethods runBackgroundThreads]; // 3. Make sure only push external id was attempted to be set since no email was set yet XCTAssertEqual(self.CALLBACK_EXTERNAL_USER_ID, TEST_EXTERNAL_USER_ID); XCTAssertNil(self.CALLBACK_EMAIL_EXTERNAL_USER_ID); // 3. Make sure last request was external id and had the correct external id being used in the request payload - XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequestType, NSStringFromClass([OSRequestRegisterUser class])); + XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequestType, NSStringFromClass([OSRequestUpdateExternalUserId class])); XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequest[@"external_user_id"], TEST_EXTERNAL_USER_ID); XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequest[@"external_user_id_auth_hash"], TEST_EXTERNAL_USER_ID_HASH_TOKEN); }