Android O中的Android_ID

4
我们使用以下代码来获取唯一的ID:
String id = Settings.Secure.getString(mContext.getContentResolver(),
                 Settings.Secure.ANDROID_ID);

在Android O的变更指南中,我们可以看到以下内容:
Android O对平台进行了以下与隐私相关的变更。 https://developer.android.com/preview/behavior-changes.html
The platform now handles identifiers differently.
Values of ANDROID_ID are now scoped per-app instead of per-user. The value of ANDROID_ID is unique for each combination of application package name, signature, user, and device. Two apps running on the same device no longer see the same Android ID, and so cannot correlate.

The value of ANDROID_ID does not change on package uninstall or reinstall, as long as the package name and signing key are the same.

The value of ANDROID_ID does not change if the package signing key changes due to an update.

For apps that were installed prior to the OTA, the value of ANDROID_ID remains the same unless uninstalled and then reinstalled.

If you wish to continue using Android ID for device-bound free trial protection, you can do so. Make sure that the package name and signature match.

For a simple, standard system to monetize apps, use Advertising ID. Advertising ID is a unique, user-resettable ID for advertising, provided by Google Play services.

我的理解是,现在的Android_ID将会与应用程序绑定而不是设备绑定。但下面这个点让我感到困惑:
对于在OTA之前已安装的应用程序,ANDROID_ID的值仍然保持不变,除非卸载然后重新安装。 如果您希望继续使用Android ID来实现基于设备的免费试用保护,则可以这样做。请确保包名称和签名匹配。
1)这是什么意思?即使我们发送更新,除非我的应用程序被重新安装,否则它将继续拥有传统的android_id?
2)如果您希望继续使用Android ID来实现基于设备的免费试用保护,则可以这样做。请确保包名称和签名匹配:这是什么意思?
2个回答

6

1) 假设你的应用程序在N设备上安装时具有id abc。当该设备升级到O时,返回给你的设备id仍将是abc。但是,如果用户在升级到O后卸载并重新安装应用程序,则ANDROID_ID将更改为其他值。

另一方面,如果该应用程序已安装在O设备上,然后被卸载并重新安装,ANDROID_ID保持不变

2) 这意味着只要包名称和签名保持不变,ANDROID_ID的值就会保持不变。如果您的应用程序在O设备上更新并且签名发生更改,则其值也将保持不变。

实际上,Android现在使用包名称/签名来生成O上的唯一标识符。


现在第一点很清楚了,关于第二点:如果我的包名和签名保持不变,那么即使应用被卸载并重新安装,Android_ID是否仍然相同?还是会改变? - Sid
是的,与1)相同的解释也适用于这里。如果两个操作都发生在O上,则它将保持不变。如果第一个操作发生在<N上,第二个操作发生在O上,则会改变。 - ashkhn
抱歉,您能解释一下:“如果两个操作都在O上发生,则它将保持不变。如果第一个操作发生在<N上,第二个操作发生在O上,则会更改。”吗? - Sid
如果软件包名称/签名是恒定的,即使卸载并重新安装,android_id也不会改变。 - Sid
我的意思是,如果卸载(第一步)发生在运行 N 或更早版本的设备上,并且重新安装(第二步)发生在设备运行 O 时,ANDROID_ID 将会改变。 - ashkhn
大家好,谢谢你们的解释。我有一个问题——ANDROID_ID可以为空吗? - svarog

1
安卓文档没有明确说明对于具有不同包名但共享用户ID值且使用相同密钥签名的应用程序的ANDROID_ID值。在Nexus 5,Android O Beta 3上的测试显示,在这种情况下,2个应用程序的Android ID值也是相同的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接