我们使用以下代码获取唯一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将是app绑定而不是设备绑定。但是我对以下几点感到困惑:
对于在OTA之前安装的应用,除非卸载然后重新安装,否则ANDROID_ID的值保持不变。 如果您希望继续使用Android ID进行设备绑定免费试用保护,则可以这样做。确保包名称和签名匹配。
1)这是什么意思?除非重新安装我的应用程序,否则它将继续使用旧版android_id,即使我们发送更新?
2)如果您希望继续使用Android ID进行设备绑定免费试用保护,则可以这样做。确保包名和签名匹配:这是什么意思?
答案 0 :(得分:3)
1)想象一下,当您的应用安装在N设备上时,其ID为abc
。现在,当设备更新为O时,返回给您的设备ID将继续为abc
。但是,如果用户在升级到O后卸载并重新安装应用,ANDROID_ID
将更改为其他值。
另一方面,如果应用程序安装在O设备上,然后卸载并重新安装,则ANDROID_ID
将保持不变。
2)这意味着只要包名称和签名保持不变,ANDROID_ID
的值将保持不变。如果您的应用在O设备上更新并且签名发生更改,它也将保持不变。
基本上,android现在将使用包名/签名在O上生成唯一标识符。
答案 1 :(得分:1)
对于具有不同软件包名称但共享用户ID值并使用相同密钥签名的应用程序,Android文档并未明确说明ANDROID_ID值。对Nexus 5,Android O Beta 3的测试显示,在这种情况下,2个应用程序的Android ID值也相同。