The Device ID should be unique enough to exclusively identify a device/client and shouldn't get lost if the app updates.
=== Windows ===
In the UWP/WinX client, the device id is created using the [https://docs.microsoft.com/en-us/uwp/api/windows.system.profile.hardwareidentification.getpackagespecifictoken| ASHWID identifier] encoded to a Base64 string.
=== Android ===
On the native Android client, the [https://developer.android.com/reference/android/provider/Settings.Secure#ANDROID_ID| ANDROID_ID (SSAID)] is accessed. Before Android 8, this ID was bound to a device for its lifetime. Since Android 8, the ID is different for every user (if the device has the multi-user feature enabled) and when the device is reset. On the Android Xamarin app, before version 1.0.80, depending on the version of the OS, the [https://developer.android.com/reference/android/os/Build#SERIAL Build.SERIAL] is accessed (below Android 8), and [https://developer.android.com/reference/android/os/Build#getSerial() Build.getSerial] starting with Android 8, also requiring the <code>READ_PHONE_STATE</code> permission. With Android 10, the function only works for devices enrolled in an organization. Version 1.0.80 of the Xamarin Android app based the device ID onto the [https://developer.android.com/reference/android/provider/Settings.Secure#ANDROID_ID ANDROID_ID (SSAID)], in the same way to how the native Android client does it. This also removed the need for the <code>READ_PHONE_STATE</code> permission. This method now also works for Android 10+, even for unenrolled devices.
On the Android Xamarin app, before version 1.0.80, depending on the version of the OS, the [https://developer.android.com/reference/android/os/Build#SERIAL| Build.SERIAL] is accessed (below Android 8), and [https://developer.android.com/reference/android/os/Build#getSerial()| Build.getSerial] starting with Android 8, also requiring the <code>READ_PHONE_STATE</code> permission. With Android 10, the function only works for devices enrolled in an organization.
Version 1.0.80 of the Xamarin Android app based the device ID onto the [https://developer.android.com/reference/android/provider/Settings.Secure#ANDROID_ID| ANDROID_ID (SSAID)], in the same way to how the native Android client does it. This also removed the need for the <code>READ_PHONE_STATE</code> permission. This method now also works for Android 10+, even for unenrolled devices.
[[Category:Android|Device ID]]
[[Category:Device management|Device ID]]
[[Category:Hardware|Device ID]]
[[Category:WinX|Device ID]]
[[Category:Xamarin|Device ID]]
=== iOS ===