Note: These things are a bit tricky to verify but I think it's correct as far as I understand after reading RS code and checking metabase.
Also, for reference: The first released version on android was May 22 (v4.4.1)
The redesigned kids app was released Nov 10th 2023 on android (v5.0.8)
iOS
Version <4.9.0 (up to sep 11 2023): Based on device id (same across same vendor, so probably same as bcc media).
Version >4.9.0 (sep 11 2023 -> now): Existing device IDs are cleared. Always a persistent UUID per install.
Android
TLDR ANDROID
Version <4.4.8 (up to june 7 2023): Anonymousid was based on deviceid, which is per-device unique and consistent across installs on the same device.
Between v4.4.8-v4.9.0 (june 7 2023 -> sep 11 2023): Based on device id for existing installs. All new installs get a random UUID on each open.
Between >4.9.0 (sep 11 2023 -> now): Existing device IDs are cleared. Always a persistent UUID per install.
This made the anonymousId unique every launch, for new installs. Existing installs that used deviceId continued to use deviceId. I think that's why we can still observe multiple "application opened" with "backgrounded: false" even after 4.4.8:
Traits anonymousId vs anonymousId
It's hard to follow their source code for anonymousId on android especially, but as far as I can tell, the "Traits anonymousid" and "anonymousId" is supposed to be the exact same thing. I have no idea why they want to send it duplicated, but I guess it doesnt matter.
Note: These things are a bit tricky to verify but I think it's correct as far as I understand after reading RS code and checking metabase. Also, for reference: The first released version on android was May 22 (v4.4.1) The redesigned kids app was released Nov 10th 2023 on android (v5.0.8)
iOS
Version <4.9.0 (up to sep 11 2023): Based on device id (same across same vendor, so probably same as bcc media). Version >4.9.0 (sep 11 2023 -> now): Existing device IDs are cleared. Always a persistent UUID per install.
Android
TLDR ANDROID Version <4.4.8 (up to june 7 2023): Anonymousid was based on deviceid, which is per-device unique and consistent across installs on the same device. Between v4.4.8-v4.9.0 (june 7 2023 -> sep 11 2023): Based on device id for existing installs. All new installs get a random UUID on each open. Between >4.9.0 (sep 11 2023 -> now): Existing device IDs are cleared. Always a persistent UUID per install.
History AnonymousId used to be == deviceID. For kids, since rudderstack hadn't implemented a way to disable this, I implemented a workaround via a fork: https://github.com/andreasgangso/rudder-sdk-android/commit/ef8d0919d196d2e9e39cbdd354410294d88e26d0 This was included ever since Bible Kids v4.4.8, released on June 7, 2023.
This made the anonymousId unique every launch, for new installs. Existing installs that used deviceId continued to use deviceId. I think that's why we can still observe multiple "application opened" with "backgrounded: false" even after 4.4.8:
https://metabase.bcc.media/question/755-average-count-opened-by-app-version
Later on RS implemented a separation of deviceId and anonymousId, available in rudder_sdk_flutter version 2.5.0, which we upgraded to in Kids v4.9.0 (https://github.com/bcc-code/bcc-media-app/commit/999a416691ddc66e37e5d49895b2c7405cd8ea90#diff-e125d55a387d4b24048735f9ca6508c4e860f5ca1f3242edfd9df27e7d8a7af0R1392), released Sep 11, 2023. From that point on, the anonymousId would always be a UUID and it would be saved for the lifetime of that install.
Traits anonymousId vs anonymousId It's hard to follow their source code for anonymousId on android especially, but as far as I can tell, the "Traits anonymousid" and "anonymousId" is supposed to be the exact same thing. I have no idea why they want to send it duplicated, but I guess it doesnt matter.
Edit: v4.4.8-v4.9.0 there was some inconsistencies between anonymousId and context traits anonymousId. See this chart which is unique ids per android app version: https://metabase.bcc.media/question/756-android-anonymousid-vs-context-traits-anonymous-id
iOS has always been the same in both: