可以将 Google 云消息传递的实例 ID(现已弃用)用于应用跟踪目的吗?

Is it okay to use Google Cloud Messaging's Instance ID (now deprecated) for app tracking purposes?

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

中所述

Android 10 (API level 29) adds restrictions for non-resettable identifiers, which include both IMEI and serial number. Your app must be a device or profile owner app, have special carrier permissions, or have the READ_PRIVILEGED_PHONE_STATE privileged permission in order to access these identifiers.

所以我继续使用 Google 云消息传递的实例 ID 作为替代(具有 GCM 依赖项)。但后来我又看到该库已被弃用,这让我想到 GCM API 可能会在不久的将来停产。

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

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

非常感谢您!

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

由于生成唯一 ID 是一个非常棘手的问题,我求助于使用 Google 自己的 Firebase API。他们会处理唯一 ID(前提是您的设备具有 Google Play.

对于那些想要每个设备独立的唯一 ID 的人,只需坚持使用 API handling/throwing 唯一 ID。

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

即使是 122 位 ID(包括在随机 UUID 中找到的 ID),仅在生成大约 27 亿个值后,预计发生冲突的几率为 50%(参见“Birthday problem”)。

另请参阅“Best practices for unique identifiers", in the Android Developers site, and my section "Unique Random Identifiers”。

由于生成唯一 ID 是一个非常棘手的主题,我求助于使用 Google 自己的 Firebase API。他们会处理唯一 ID(前提是您的设备具有 Google Play.

对于那些想要每个设备独立的唯一 ID 的人,只需坚持使用 API handling/throwing 唯一 ID。