首页 > 解决方案 > 是否可以使用 Google Cloud Messaging 的实例 ID(现已弃用)进行应用跟踪?

问题描述

我目前在我的应用程序中使用 android 的设备 ID (ANDROID_ID) 作为我自己的分析 API 的唯一标识符。我最近听说谷歌在 Android 10 (Q) 下,Android 在使用唯一标识符方面会有更严格的限制,如https://developer.android.com/training/articles/user-data-ids中所述

Android 10(API 级别 29)增加了对不可重置标识符的限制,其中包括 IMEI 和序列号。您的应用必须是设备或配置文件所有者应用、具有特殊运营商权限或具有 READ_PRIVILEGED_PHONE_STATE 特权权限才能访问这些标识符。

所以我继续使用 Google Cloud Messaging 的实例 ID 作为替代品(具有 GCM 依赖项)。但是我又一次看到该库已被弃用,所以这让我想到 GCM API 可能会在不久的将来停止使用。

使用 GCM 的 Instance ID 还可以吗?请注意,我只想将它用于获取设备的唯一 ID。

如果对我可以使用的另一个唯一 ID有任何建议,以下是我的注释:

非常感谢您!

编辑(截至 2020 年 2 月 11 日)

由于生成唯一 ID 是一个非常棘手的主题,因此我使用了 Google 自己的Firebase API。他们负责处理唯一 ID(前提是您的设备有 Google Play。

对于那些想要每个设备独立的唯一 ID 的人,只需坚持 API 处理/抛出唯一 ID。

标签: androidgoogle-cloud-messaginguniqueidentifier

解决方案


使用加密 RNG(例如java.security.SecureRandom)生成一个随机的 128 位或更长的 ID 足以满足您的目的。

即使对于 122 位 ID(包括那些在随机 UUID 中发现的 ID),只有在生成大约 27 亿个值之后,碰撞的预期几率才为 50%(参见“生日问题”)。

另请参阅Android 开发者网站中的“唯一标识符的最佳实践”和我的“唯一随机标识符”部分。


推荐阅读