我看到了我最好的问题之一 Is there a unique Android device ID?
编辑:
我也需要适用于 Android 10 的解决方案。
我使用以下代码来获取唯一 ID。
public static String getDeviceId(Activity context) {
PermissionsChecker checker = new PermissionsChecker(context);
if (checker.lacksPermissions(Manifest.permission.READ_PHONE_STATE))
PermissionsActivity.startActivityForResult(context, 0, REQUIRED_PERMISSION);
else {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
final String tmDevice = tm.getDeviceId();
final String androidId = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
UUID deviceUuid = new UUID(androidId.hashCode(), ((long) tmDevice.hashCode() << 32));
return deviceUuid.toString();
}
return null;
}
但我在悬停时收到一些警告
tm.getDeviceId();
和
Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
如下:
Using getString to get device identifiers is not recommended.
Using device identifiers is not recommended other than for high value fraud prevention and advanced telephony use-cases. For advertising use-cases, use
AdvertisingIdClient$Info#getId
and for analytics, useInstanceId#getId.
有什么解决办法吗?它是有害的还是其他什么?
最佳答案
非常简单的答案是,如果您需要唯一标识应用的每个用户,请在首次使用时创建一个随机 id。
UUID.randomUUID().toString()
您可以将其保存在 SharedPreferences
中,简单的工作就完成了。无需权限
问题是如果用户卸载并重新安装应用程序,它不会帮助你。
在 android 10 之前可以做到的一个简单技巧(根据 google,在 android 11 上将不再可能)是将其保存在外部存储中的隐藏文件中...
然后在第一次使用应用程序时查找此类文件,如果存在读取 UUID,则不生成新文件并保存文件。
这个策略的问题是你需要WRITE_EXTERNAL_STORAGE
PERMISSION
万一这不是问题,简单做...
new File(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + ".my_hidden_folder").mkdir();
保存在此文件夹中的任何文件都将对用户隐藏,在卸载您的应用时不会被删除
我个人使用
Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID);
这无害,只是谷歌不喜欢你这样做
关于android - MarshMallow 警告 "get device identifiers is not recommended"后的唯一 Android 设备 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40283432/