Difference between revisions of "Device ID"
(9 intermediate revisions by 2 users not shown) | |||
Line 19: | Line 19: | ||
The Device ID should be unique enough to exclusively identify a device/client and shouldn't get lost if the app updates. | The Device ID should be unique enough to exclusively identify a device/client and shouldn't get lost if the app updates. | ||
=== Windows === | === Windows === | ||
− | In the UWP/WinX client, the | + | This information applies both to the UWP/WinX client as well as the unreleased Xamarin.UWP client: |
+ | |||
+ | In the UWP/WinX client until version 3.7.17, 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. This ID is relatively consistent but can change when e.g. a docking station with a network card is attached. | ||
+ | |||
+ | {{Version/WinXSince|3.7.18}} | ||
+ | Starting with UWP 3.7.18, the [https://docs.microsoft.com/en-us/uwp/api/windows.system.profile.systemidentification.getsystemidforpublisher SystemIdentification.GetSystemIdForPublisher()] method is used to return a unique system identifier based on the app publisher ID. | ||
+ | The ID is generated either using a Trusted Platform Module (TPM) if present or a Unified Extensible Firmware Interface (UEFI) if present. | ||
+ | If neither of these sources is available, this method will return an ID that is backed by the Windows registry. | ||
+ | If a system does not have a TPM or UEFI support, and thus an ID was obtained from the registry, a clean install of Windows will result in a new, different ID being returned. If no ID could be generated, the old ASHWID identifier is used. | ||
+ | |||
=== Android === | === Android === | ||
− | On the native Android client, the [https://developer.android.com/reference/android/provider/Settings.Secure#ANDROID_ID | + | 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. | |
=== iOS === | === iOS === | ||
− | On iOS, the application makes use of the [https://developer.apple.com/documentation/uikit/uidevice/1620059-identifierforvendor | + | On iOS, the application makes use of the [https://developer.apple.com/documentation/uikit/uidevice/1620059-identifierforvendor identifierForVendor]. This is a GUID uniquely identifying a device to an app vendor. |
[[Category:Android|Device ID]] | [[Category:Android|Device ID]] |
Latest revision as of 17:12, 21 January 2021
The Device ID is a unique identifier of the device, which is fetched from the OS and used to uniquely identify devices to restrict access to them. The type of ID and its origin vary by platform. The Device ID is also sent to the Ubik Web Service.
Contents
Accessing the Device ID
Accessing the Device ID is designed to be simple.
Android
On the legacy Android client, the Device ID can be found on the Information page.
UWP
On the Windows client, the Device ID can be accessed on the Connection Settings page.
Xamarin
On the newer Xamarin clients (iOS and Android), the Device ID can be inspected on the General Settings page.
Technical Information
The Device ID should be unique enough to exclusively identify a device/client and shouldn't get lost if the app updates.
Windows
This information applies both to the UWP/WinX client as well as the unreleased Xamarin.UWP client:
In the UWP/WinX client until version 3.7.17, the Device ID is created using the ASHWID identifier encoded to a Base64 string. This ID is relatively consistent but can change when e.g. a docking station with a network card is attached.
Starting with UWP 3.7.18, the SystemIdentification.GetSystemIdForPublisher() method is used to return a unique system identifier based on the app publisher ID. The ID is generated either using a Trusted Platform Module (TPM) if present or a Unified Extensible Firmware Interface (UEFI) if present. If neither of these sources is available, this method will return an ID that is backed by the Windows registry. If a system does not have a TPM or UEFI support, and thus an ID was obtained from the registry, a clean install of Windows will result in a new, different ID being returned. If no ID could be generated, the old ASHWID identifier is used.
Android
On the native Android client, the 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 Build.SERIAL is accessed (below Android 8), and Build.getSerial starting with Android 8, also requiring the READ_PHONE_STATE
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 ANDROID_ID (SSAID), in the same way to how the native Android client does it. This also removed the need for the READ_PHONE_STATE
permission. This method now also works for Android 10+, even for unenrolled devices.
iOS
On iOS, the application makes use of the identifierForVendor. This is a GUID uniquely identifying a device to an app vendor.