diff --git a/Sources/Amplitude/Amplitude.m b/Sources/Amplitude/Amplitude.m index 2c9f3d11..33352ca6 100644 --- a/Sources/Amplitude/Amplitude.m +++ b/Sources/Amplitude/Amplitude.m @@ -524,8 +524,7 @@ - (void)initializeApiKey:(NSString *)apiKey self.apiKey = apiKey; [self runOnBackgroundQueue:^{ - self->_deviceInfo = [[AMPDeviceInfo alloc] init]; - [self initializeDeviceId]; + [self initializeDeviceInfo]; if (setUserId) { [self setUserId:userId]; } else { @@ -1670,7 +1669,7 @@ - (NSString *)getAdSupportID { - (NSString *)getDeviceId { if (self.deviceId == nil) { - return [self initializeDeviceId]; + [self initializeDeviceInfo]; } return self.deviceId; } @@ -1679,8 +1678,11 @@ - (long long)getSessionId { return _sessionId; } -- (NSString *)initializeDeviceId { +- (void)initializeDeviceInfo { @synchronized (self) { + if (self->_deviceInfo == nil) { + self->_deviceInfo = [[AMPDeviceInfo alloc] init]; + } if (self.deviceId == nil) { self.deviceId = [self.dbHelper getValue:DEVICE_ID]; if (![self isValidDeviceId:self.deviceId]) { @@ -1689,7 +1691,6 @@ - (NSString *)initializeDeviceId { } } } - return self.deviceId; } - (NSString *)_getDeviceId { diff --git a/Tests/AmplitudeTests.m b/Tests/AmplitudeTests.m index 48ae32ed..67abcab1 100644 --- a/Tests/AmplitudeTests.m +++ b/Tests/AmplitudeTests.m @@ -1705,12 +1705,22 @@ - (void)testOpenURLFiresDeepLinkEvent { XCTAssertEqualObjects([[event objectForKey:@"event_properties"] objectForKey:kAMPEventPropLinkUrl], @"https://test-app.com"); } -- (void)testGetDeviceIdAfterInit { - NSString *instanceName = @"testGetDeviceIdAfterInit"; +- (void)testGetDeviceIdBeforeInit { + NSString *instanceName = @"testGetDeviceIdBeforeAndAfterInit"; + + // Clear device ID from db + AMPDatabaseHelper *dbHelper = [AMPDatabaseHelper getDatabaseHelper:instanceName]; + [dbHelper insertOrReplaceKeyValue:@"device_id" value:nil]; + + // Device ID should get generated before api key init Amplitude *client = [Amplitude instanceWithName:instanceName]; - [client initializeApiKey:@"testGetDeviceIdAfterInit"]; NSString *deviceId = [client getDeviceId]; XCTAssertNotEqualObjects(deviceId, @""); + XCTAssertNotNil(deviceId); + + // Device ID should match after init. + [client initializeApiKey:@"testGetDeviceIdBeforeAndAfterInit"]; + NSString *deviceIdAfterInit = [client getDeviceId]; + XCTAssertEqualObjects(deviceId, deviceIdAfterInit); } - @end