Device IDs

Leanplum collects a device ID that uniquely identifies the device in which your user uses your application. The Leanplum SDK is optimized to automatically determine and identify those devices. This happens when the Leanplum.start() is called for the first time. This cannot be changed unless the user uninstalls/reinstalls your app.

Below is our platform specific methods for setting and identifying those devices.

Select your OS or language below for specific instructions on setup.

More on Variables Implementation for iOS.

More on Variables Implementation for Android.

More on setup for Unity Variables Implementation.

More on Variables Implementation using our JavaScript SDK.

More on Variables Implementation for React Native.

iOS Device ID

On iOS, by default, we use the identifierForVendor (IDFV) property in iOS to set the device ID in Leanplum. You can choose how the device ID is set the first time start is called on that device by calling one of these before start:

//Set the device ID to a custom ID using the setDeviceId call.  Make sure that your custom ID is unique per device. 
Leanplum.setDeviceID("customAndUniqueId")
//Sets the device ID to a custom ID. Make sure that your custom ID is unique per device. 
[Leanplum setDeviceId:@"customAndUniqueId"]

🚧

iOS SDK v3.1.0+ Changes To Accommodate iOS 14+ Changes

Deprecated: Starting in iOS SDK 3.1.0, to accommodate changes in iOS 14, we have deprecated the LEANPLUM_USE_ADVERTISING_ID macro, which older versions of the SDK used to set IDFA.

New Functionality: Additionally, we have allowed deviceId to be set after the first start. When you set the new Device ID, this will create a new device under that user profile. All device fields (including the push token) will be moved from the old device ID to the new device ID and marked as the latest device. This enables you to set the device ID as IDFA at a later stage when the user provides consent.

The userId login does not change if the deviceId is changed mid-session or not.

Android Device ID

On Android, by default, we will use the ANDROID_ID for the Device ID. As you will see below we do support using the ADVERTISING_ID

You can choose how the device ID will be set the first time start is called on that device by calling one of these before start:

//By default Leanplum will use Android_ID 
Leanplum.setDeviceIdMode(LeanplumDeviceIdMode.ANDROID_ID);

//ADVERTISING_ID is also supported
Leanplum.setDeviceIdMode(LeanplumDeviceIdMode.ADVERTISING_ID);

//Sets the device ID to a custom ID. Make sure that your custom ID is unique per device.
Leanplum.setDeviceId("customAndUniqueId");

Whether or not you decide to set a custom Device ID a DeviceIdMode, the SDK uses the following logic to set the deviceId (unless you use setDeviceId):

//Pseudocode Logic to set Android deviceId

if DeviceIdMode == 'ADVERTISING_ID':
  set deviceId = 'ADVERTISING_ID'
else if DeviceIdMode == 'ANDROID_ID':
	set deviceId = 'ANDROID_ID'
else if (Android < 6.0 and `ACCESS_WIFI_STATE` permission):
	set deviceId = Hash of device MAC Address
else if `ANDROID_ID` is available:
	set deviceId = `ANDROID_ID`
else
	deviceId = random generated device ID

You can view the source code here.

❗️

Device ID can only be set Once

The deviceId is set when Leanplum start runs for the first time on that device. After this, it cannot be changed unless the user completely uninstalls and reinstalls your app.

Unity Device ID

The device ID uniquely identifies the devices and is determined automatically by the SDK. On Unity, we use SystemInfo.deviceUniqueIdentifier to get the device ID. Refer to the Unity documentation to learn more.

JavaScript (Web) Device ID

The device ID uniquely identifies the devices and is determined automatically by the SDK. In the JavaScript SDK, we generate a unique device ID from a random selection of numbers and letters totaling 16 characters. We take that device ID and persist it using localStorage. You can set a custom device ID instead using Leanplum.setDeviceId.

React Native Device ID

The device ID uniquely identifies the devices and is determined automatically by the SDK. In the React Native SDK, we use the platform-specific logic for iOS or Android as covered in detail above. We take that device ID and persist it using AsyncStorage. You can set a custom device ID instead using Leanplum.setDeviceId.

❗️

Device ID and Attribution Partners

If you use an external attribution provider, make sure your device ID set matches the device ID in your attribution provider (ex: IDFV -> IDFV). See How to integrate external Attribution services for more.