如何解决Android-您如何处理9774d56d682e549c? Android ID
| 因此,我以为自己很聪明,并且使用Android安全唯一ID的各种哈希和排列来识别我的用户。 但是事实证明9774d56d682e549c是由Secure.getString(getContentResolver(),Secure.ANDROID_ID);
对于大量设备...看来,我构建的每个模拟器都具有相同的ID,许多其他人的手机(很多机器人机器人!)和闪烁的OS mod往往会返回相同的重复值。非MotoDroid /非闪存手机似乎都给了我独特的个性。但这是我数据库中的大约60次!
我将优化我的应用程序以在注册之前检查该字符串,但是建议使用什么方法来处理它以获得另一个唯一值?
我当前的想法是检查它,生成一个EXTREMELY LARGE随机值,对其进行哈希处理,然后将其存储在SharedPreferences
中,然后使用ANDROID_ID或存储在sharedprefs中的那个(如果用户电话给出了该值)。任何人都有更好的主意,或者这似乎足以消除这个疯狂的bug?
解决方法
请参阅“识别应用程序安装”一文。你不能依靠
ANDROID_ID
。
最好的解决方案是使用以下方法生成自定义ID:
String id = UUID.randomUUID().toString();
,Oberheide和Miller在2012年Summercon上讨论了这种现象以及Stackoverflow线程,他们最近剖析了Google的Bouncer:http://jon.oberheide.org/files/summercon12-bouncer.pdf
也许您可以为您的项目提取一些更有用的信息。
,如果要创建与真实的2格式相同的格式,可以在此处使用相同的方法:
private static String generateAndroidId() {
String generated = null;
try {
final SecureRandom random = SecureRandom.getInstance(\"SHA1PRNG\");
random.setSeed( (System.nanoTime() + new SecureRandom().nextLong()).getBytes() );
generated = Long.toHexString(random.nextLong());
} catch (NoSuchAlgorithmException e) {
Log.e(TAG,\"Unexpected exception\",e);
}
return generated;
}
输出:9e7859438099538e
,尽管不理想,但诸如Google AdMob SDK之类的东西使用权限“ 7”来读取设备的电话号码等。
以下博客文章中提供了一些有用的相关信息:http://strazzere.com/blog/?p=116
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。