Last modified on 20 January 2021, at 16:53

Device ID

Revision as of 16:53, 20 January 2021 by TSI (Talk | contribs)

Device ID on UWP Client

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.

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

In the UWP/WinX client, the device id is created using the ASHWID identifier encoded to a Base64 string. (<= 3.7.X)

The SystemIdentification.GetSystemIdForPublisher() Method returns 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 ASHWIND identifier is used. (>= 3.8.X)

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.