26

Other than the user manually resetting it, has anyone observed other things that will cause the ADID to be reset? OTA OS Upgrades? iTunes Restores?

Randy Dailey
  • 313
  • 1
  • 4
  • 11

3 Answers3

86

(effects on advertisingIdentifier and identifierForVendor, as tested on an iPhone 3GS with iOS 6.0.1 and iOS 6.1.3 and an iPhone 4S with iOS 6.1.3 and iOS 7.0.0)

  • "Reset All Settings" in iOS Settings app
    No effect

  • "Erase All Content and Settings" in iOS Settings app
    Resets both advertisingIdentifier and identifierForVendor.

  • Restoring a device via iTunes
    Resets both advertisingIdentifier and identifierForVendor.

  • Deleting an app from the device
    Resets identifierForVendor, if this was the last app with a specific Team ID.

  • Updating an app (automatically or via App Store)
    No effect

  • Updating an app via TestFlight or Ad-Hoc
    May reset the identifierForVendor, according to documentation.

  • Enabling/disabling "Limit Ad Tracking"
    iOS 6.0.1: No effect
    iOS 6.1.3: Resets the advertisingIdentifier.

  • System Update OTA (iOS 6.0.1 to iOS 6.1.3)
    No effect

  • System Update OTA (iOS 6.1.3 to iOS 7.0.0)
    Resets the identifierForVendor in some cases. (1)

  • System Update via iTunes (iOS 6.1.3 to iOS 7.0.0)
    Resets the identifierForVendor in some cases. (1)

  • "Reset Advertising Identifier" in iOS Settings app
    Resets the advertisingIdentifier. If some running (or suspended) apps already requested a advertisingIdentifier, they will not be able to retrieve the new one until they are stopped and relaunched.

  • Backup via iTunes
    No effect

  • Restore of a Backup via iTunes (to the same device)
    Restores the backed-up settings, including both advertisingIdentifier and identifierForVendor. Note: If you delete multiple apps with some Team ID before the restore, the identifierForVendor will never be reset again until you reinstall all apps with that Team ID you had installed and delete them again. This seems to be a bug.

  • Restore of a Backup via iTunes (to a different device)
    Resets both advertisingIdentifier and identifierForVendor.


(1) As far as I understand, this should not happen with Apps in the App Store. It seems to be related to the number of components in the app's bundleID and the respective provisioning profile: iOS 7 App Release Notes regarding App Deployment
In my tests, the identifierForVendor in apps with 4 components did change (for versions with either developer or enterprise distribution provisioning profiles), but did not change for those with 3 components.

Andreas Ley
  • 9,109
  • 1
  • 47
  • 57
  • Great info. Do you know if performing a system update via iTunes is functionally equivalent to "Restoring a device via iTunes" in this case? – Randy Dailey Jun 03 '13 at 23:04
  • I found that toggling "Limit Ad Tracking" (either on or off) changed the advertisingIdentifier each time (on iOS 6.1.3). – MusiGenesis Jun 19 '13 at 15:35
  • @MusiGenesis You're right. Apple actually changed this behaviour between the two versions, and I didn't catch that. Verified in the iOS Simulator and fixed in the answer. Thanks! :) – Andreas Ley Jun 19 '13 at 15:58
  • @Andreas Ley Hi Andreas, if I restore a backup to a different device, can I still get the same ADID and VendorID on the new device? – MasterBeta Aug 18 '13 at 07:10
  • @MasterBeta Both identifiers seem to be reset after a restore to a different device. – Andreas Ley Sep 20 '13 at 15:17
  • @RandyDailey After more tests, it looks like a system update via iTunes is equivalent to an OTA update. – Andreas Ley Sep 20 '13 at 17:10
  • So.. is there any way to **identify uniquely a device** from within an iOS app since advertising identifier will not do the trick? Note that no user registration system is used – George Pligoropoulos Oct 01 '13 at 16:27
  • @GeorgePligor The closest you can get is abusing the iOS keychain to store an identifier when the app is launched for the first time. Keychain items aren't removed when the app is uninstalled and kept between system updates. However, when a user completely wipes the device, this information is lost, too. Apple is working hard to make sure that you can't uniquely identify a device, so the keychain trick might stop working at some point, too. – Andreas Ley Oct 01 '13 at 21:09
  • Have you looked at the difference for vendor ID when updating from AppStore version to apple testflight? – Matthieu Rouif Jun 29 '15 at 12:43
  • @MatthieuRouif According to documentation, the `identifierForVendor` may change in this situation. However, I haven't tested that. – Andreas Ley Jul 02 '15 at 13:32
  • How about updating to iOS 8.4? Do you think it changed the value? – KarenAnne Jul 08 '15 at 07:04
  • @KarenAnne I don't know and I can't test it at the moment. However, I would advise you to follow Apple's recommendation: *"you should gracefully handle situations where the identifier changes"*. – Andreas Ley Jul 08 '15 at 12:07
4

Two cases:

  • Manually choosing “Reset Advertising Identifier”. But if the app is running in the background, the identifier will remain active until the application is relaunched.
  • Manually choosing “Reset All Content and Settings”.

Backups, OS upgrades, app re-install, or choosing “Limit Ad Tracking” won't reset the identifier.

AFAIK you could send the vendor ID and the advertising ID to the server, and when the user resets the advertising ID with “Reset Advertising Identifier”, you can match the new with the old one, because the vendor ID survives. No idea how Apple intends to prevent this.

Jano
  • 62,815
  • 21
  • 164
  • 192
1

There is no official, definitive list from Apple. The documentation only states:

This identifier may change—for example, if the user erases the device—so you should not cache it.

Apple don't give any further detail. It's known that resetting the device changes the ADID, as does the user manually resetting it themselves (where this feature is available, so iOS 6.1+). I've not been able to find anything that suggests an OS update would reset the identifier.

It is of course possible other, undocumented behaviour resets the identifier, but I've not been able to find anything else.

lxt
  • 31,146
  • 5
  • 78
  • 83