为什么"不推荐使用getString()来获取设备标识符?

Ege*_*glu 30 java android

我正在尝试将我的设备ID提供给Logcat,但Android Studio正在向我发出此警告.

建议不要使用getstring来获取设备标识符

String deviceID = Settings.Secure.getString(getApplicationContext().getContentResolver(),
        Settings.Secure.ANDROID_ID);
Run Code Online (Sandbox Code Playgroud)

为什么不推荐?

Gio*_*gen 25

完整的警告说:

除了高价值欺诈预防和高级电话用例之外,不建议使用这些设备标识符.对于广告用例,请使用AdvertisingIdClient $ Info#getId并使用InstanceId#getId进行分析.

更多信息:https: //developer.android.com/training/articles/user-data-ids.html

我认为Android不建议使用此值,因为它是一个永久的唯一ID,可用于跟踪您的用户,并且他或她无法更改此ID或阻止您阅读它.警告中给出的其他选项尊重用户的意愿.这就是Android推荐你使用它的原因.

这真的取决于你将如何处理该ID.如今,隐私是一件敏感的事情.

还要检查一下:

...您必须遵守用户的"退出基于兴趣的广告"或"选择退出广告个性化"设置.如果用户启用了此设置,您可能无法使用广告标识符为广告目的创建用户个人资料或使用个性化广告定位用户.允许的活动包括内容相关广告,频次上限,转化跟踪,报告和安全以及欺诈检测.

资料来源:https://developer.android.com/training/articles/user-data-ids.html

  • 我们使用此 ID 来区分用户的设备。由于我们将 FCM 令牌保留在服务器上,因此我们需要知道新令牌是否实际上是新设备,或者是否是旧设备并应该更换。我们不希望最终为拥有单个设备的同一用户提供数十个令牌。对于这样的问题有更好的解决方案吗? (4认同)
  • 那么,现在的解决方案是什么,应该使用什么来代替这个ID呢? (3认同)
  • 总结一下:最好使用其中一种替代方案,如果不能,请静音此警告(例如对于单个方法)。 (3认同)
  • 再次!应该用什么来代替这个 ID? (2认同)
  • 好吧,使用“Secure.ANDROID_ID”没有任何问题。这只是一个警告。我想说,如果你需要一个用于分析的 id,使用 `InstanceId.getId()`,对于广告使用 `AdvertisingIdClient.Info.getId()`,当两者都不符合你的需要时,使用 `Secure.ANDROID_ID`。请记住,root 用户可以更改此 ID。 (2认同)