我当前正在使用android的设备ID(ANDROID_ID)作为我自己的应用中自己的分析API的唯一标识符。最近我听说Google在Android 10(Q)下,如https://developer.android.com/training/articles/user-data-ids
中所述,Android在使用唯一标识符方面将受到更严格的限制Android 10(API级别29)为不可重置的标识符(包括IMEI和序列号)增加了限制。您的应用必须是设备或个人资料所有者应用,具有特殊的运营商权限,或具有READ_PRIVILEGED_PHONE_STATE特权,才能访问这些标识符。
因此,我继续使用Google Cloud Messaging的实例ID作为替换(具有GCM依赖项)。但是再一次,我看到该库已被弃用,因此我想到GCM API可能会在不久的将来停止使用。
使用GCM的实例ID仍然可以吗?请注意,我只想将其用于获取设备的唯一ID。
如果我可以使用另一个唯一ID的任何建议,请注意以下几点:
非常感谢您!
答案 0 :(得分:0)
使用加密的RNG(例如java.security.SecureRandom
)生成随机的128位或更长的ID就足够了。
即使对于122位ID(包括在随机UUID中发现的ID),仅在生成约27亿个值(请参阅“ Birthday problem”)后,发生冲突的预期机会才是50%。
另请参见Android开发者网站中的“ Best practices for unique identifiers”和我的“ Unique Random Identifiers”部分。
答案 1 :(得分:-1)
由于生成唯一ID是一个非常棘手的主题,因此我求助于使用Google自己的Firebase API。他们会使用唯一ID(前提是您的设备具有Google Play。
对于那些希望每个设备具有独立唯一ID的用户,只需坚持使用API处理/抛出唯一ID。