Android SDK 29+下合规获取唯一设备ID的最佳实践
不违反Google Play政策的Android设备唯一标识最佳实践
一、优先使用广告ID(Advertising ID)
- 这是Google官方推荐的用于广告投放、用户归因场景的标识,无需特殊权限,在Android SDK 29+环境下可正常获取。
- 注意:用户可在系统设置中重置或禁用广告ID,因此代码中需处理ID为null的情况。
- Flutter中通过
device_info_plus获取的示例:import 'package:device_info_plus/device_info_plus.dart'; Future<String?> getAdvertisingId() async { final androidDeviceInfo = await DeviceInfoPlugin().androidInfo; return androidDeviceInfo.advertisingId; }
二、生成应用内专属唯一标识
- 若无需跨应用的设备级标识,可自行生成UUID并存储在应用私有存储(如
SharedPreferences)中。 - 该标识仅属于当前应用,应用卸载后会丢失,完全符合隐私政策要求,不会关联设备的全局信息。
- Flutter实现示例:
import 'package:shared_preferences/shared_preferences.dart'; import 'package:uuid/uuid.dart'; Future<String> getAppLocalUniqueId() async { final prefs = await SharedPreferences.getInstance(); String? localId = prefs.getString('app_local_unique_id'); if (localId == null) { localId = const Uuid().v4(); await prefs.setString('app_local_unique_id', localId); } return localId; }
三、关联用户账号标识(如有登录功能)
- 如果应用包含用户登录模块,可使用用户的Google账号ID(或其他授权账号ID)作为唯一标识。
- 这种方式完全合规,因为标识绑定的是用户账号而非设备本身,且需用户主动授权登录。
需避免的方案
- 禁止尝试获取IMEI、MEID、Serial Number等硬件标识:这些需要
READ_PRIVILEGED_PHONE_STATE权限,普通应用无法获取,且违反Google Play隐私政策,会导致应用审核被拒。 - 不再依赖AndroidID:从Android SDK 29开始,普通应用获取AndroidID会返回null,且Google Play政策不鼓励使用该标识进行用户追踪。
内容的提问来源于stack exchange,提问作者Alifa Al Farizi
相关产品推荐
相关产品推荐

