【Android】用户唯一标识调研报告

一、背景

  • 背景:小游戏中部分游戏是敏感性的。产品设计需要根据用户来进行名单区分展示。
    游戏可见列表分两类,一是全部游戏,二是非敏感游戏,按用户纬度决定展示哪个列表,由于海外无法解决手机号的问题,通过指定用户唯一性的方式来登陆。
  • 技术定位:初级/中级
  • 目标群体:产品、开发工程师
  • 整体思路:整理当前android的区分用户唯一性的方法和实现优缺,供后续开发和产品抉择。

二、主流的唯一标识

2.1 Device ID

这是比较传统的方式,获取设备的硬件ID。一般来说,这类唯一标识Device ID通常采用IMEI(International Mobile Equipment Identity)或MEID(Mobile Equipment Identifier)等设备硬件相关的标识符。

  • MEI是一个由15位数字组成的唯一标识符,主要用于识别移动电话设备。每个移动电话设备都有一个唯一的IMEI号码,可以通过拨打 *#06# 等代码来查看设备的IMEI号码
  • MEID是CDMA网络中使用的设备标识符,也是由15位数字组成的唯一标识符。与IMEI类似,每个CDMA设备都有一个唯一的MEID号码。
import android.content.Context;
import android.telephony.TelephonyManager;

// 获取设备IMEI号码
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String imei = telephonyManager.getDeviceId();
需要注意的是,获取设备的IMEI或MEID号码需要相应的权限,如READ_PHONE_STATE权限。
获取Device ID的方式在不同的Android版本和设备上可能会有所不同,并且有一些限制和难度。

首先,从Android 10开始,对于非系统应用程序,将无法直接访问IMEI、MEID和序列号等设备标识符。这是出于隐私和安全的考虑,以保护用户的个人信息。

其次,不同的设备制造商可能在其自定义的Android系统中对设备标识符进行了更改或限制。这可能导致在某些设备上无法获取到IMEI或MEID等设备标识符。

2.2 广告ID

Android的广告ID(Advertising ID)是一种用于广告追踪和个性化广告投放的标识符。它是一个匿名的、与用户个人身份无关的标识符,用于识别设备和应用程序的广告相关信息。

import com.google.android.gms.ads.identifier.AdvertisingIdClient;
import com.google.android.gms.common.GooglePlayServicesNotAvailableException;
import com.google.android.gms.common.GooglePlayServicesRepairableException;
import com.google.android.gms.common.GooglePlayServicesNotAvailableException;

// 获取广告ID
String advertisingId = null;
try {
AdvertisingIdClient.Info adInfo = AdvertisingIdClient.getAdvertisingIdInfo(context);
advertisingId = adInfo.getId();
} catch (IOException | GooglePlayServicesNotAvailableException | GooglePlayServicesRepairableException e) {
e.printStackTrace();
}
需要注意的是,获取广告ID需要依赖Google Play服务,因此设备必须安装有Google Play服务才能正常获取广告ID。此外,获取广告ID也需要相应的权限,如ACCESS_NETWORK_STATE和INTERNET权限。

2.3 Android ID(SSAID)

Android ID是Android设备的唯一标识符,可以用来区分不同的设备。它是一个64位的十六进制字符串,通常由系统分配给每台设备。Android ID在设备首次启动时生成,并且在设备的整个生命周期中保持不变,除非设备被重置或者进行了系统升级等等。一般是在Android 8.0之后,就可以考虑用ANDROID_ID来代替DeviceId。
要获取Android ID,可以使用Android系统提供的Settings.Secure.ANDROID_ID常量。以下是获取Android ID的示例代码:

import android.provider.Settings;

String androidId = Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID);

需要注意的是,Android ID并不是绝对可靠的唯一标识。在某些情况下,设备可能会重置Android ID,例如设备被恢复出厂设置或者进行了系统刷新。此外,某些设备可能会共享相同的Android ID,尤其是在虚拟机或者模拟器中。

2.4 UUID

通用唯一识别码是用于计算机体系中以识别信息的一个128位标识符。 UUID按照标准方法生成时,在实际应用中具有唯一性,且不依赖中央机构的注册和分配。UUID重复的概率接近零,可以忽略不计。 因此,所有人都可以自行创建和使用UUID,而且几乎可以确定其不会与既有的标识符重复。
兜底行为。因为需要我们手动生成,且每次生成的都不一样。
UUID.randomUUID().toString()
所以必须生成一次保存起来。这样就有一个问题,如果保存到应用内部存储,卸载后重装一定要重新生成,这样就无法判断是同一设备了。所以最好将其保存到外部存储,保证卸载重装后还能读取到上次的值。
这样一般情况下是最稳定的,除非手动删除该文件。

猜你喜欢

转载自blog.csdn.net/weixin_44002043/article/details/131440701