Android Device ID Guide

First things first

The most important thing is:

PushLink uses a composite key (apiKey + packageName + deviceID) to identify one installation.

Installation means a single linux/android process using Pushlink. If one device runs two applications using Pushlink, there are two installations. In most of cases the term installation can be replaced by device, because one device usually runs a single enterprise application with Pushlink.

There is not a default and 100% guarantee way to get the Device ID on Android. It depends on OS version, device brand, etc.

Must read:

However, PushLink is designed for enterprise apps, and the developer has a certain control over which types of Devices and OS the application is going to run. Don't use an ID which is changed after every uninstall/install. Try to use a long live ID. Think and create your own strategy.

What happens if I set the same ID in different devices?

Don't do that. You will not be able to manage your installations properly. For example, you can't mark as 'test' a duplicated application.

What happens if my device ID changes frequently?

First, your information will be a mess. You will see a lot of installations on the web administration, and you won't be able manage them. Second, we charge based on installations, so you can be charge twice or more for one device running one application.

Can I run more than one application using PushLink in the same device?

Of course. Android does not allow duplicated package names in the same device. So the installation key (apiKey + packageName + deviceId) is safe.

Can you give some advises?

Well, it depends a lot on your enterprise environment. See below:

Are you sure your devices are phone devices with good ROM's?

Maybe use the IMEI number.

Do you have control over detachable media?

Maybe use the SIM serial number or SDCARD number.

Are you sure that it runs in a LAN environment?

Maybe use the MAC address.

Are you sure that factory resets won't happen?

Maybe use the Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID), if devices are over android version 2.2.

Are you sure that all devices aren't phone devices?

Maybe use the android.os.Build.SERIAL, if devices are over android version 2.3.

Need more ideias?

What more should I be alert?