是否可以更改Settings.Secure.ANDROID_ID?

时间:2019-05-13 03:01:12

标签: android firebase-authentication deviceid

我在Google Play上有一个Android应用,每天约有5000名用户。
我有一个与firebase auth相关的奇怪错误,这很不常见,因此请仔细阅读后再得出结论:

我将Android_ID用作我的应用Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID)用户的用户标识符

我确实知道这不是最好的主意,但它符合我的要求,因为它是唯一的,每个电话都有一个,并且无法更改(我请教)。因此,通过这种方式,我可以使用它来在Firebase中对我的用户进行身份验证,从而可以编写Firebase规则来阻止用户根据其ANDROID_ID看到其他用户的数据

某些用户在尝试读取自己的数据时会拒绝访问...

这看起来很奇怪,第一个想法是我的代码中有一个错误,但是经过大量调试后,我找不到任何错误,所以我开始记录请求

我的日志显示了这样的内容

D/CrashlyticsCore check firebase access denied: device_id: e4c511c3-8ed7-3430-b3b0-e16d56acd2ad auth: da190696-e4bc-32f9-b229-eb24631a39fc

此消息是说用户已通过da190696...进行了身份验证,但知道其id值为:e4c511c3...

我还注意到,拒绝访问通常是在应用最小化之后发生的

所以问题是:对此有什么解释吗?用户可以在无根设备上更改device_id吗?是否有可能以某种方式被android随机化?

2 个答案:

答案 0 :(得分:1)

您不应为此使用Settings.Secure.ANDROID_IDRead this for more information.值会在各种情况下发生变化。

您还说过:“我可以编写Firebase规则来阻止用户根据其ANDROID_ID看到其他用户的数据”。这可能不太安全,因为客户端没有义务向Firebase提供预期的价值。有人可能会破坏您的应用程序或设备以发送他们想要的任何值。

如果您需要安全识别用户,请为此使用Firebase身份验证UID。它保证是唯一的,并且永远不会对该用户进行更改。也可以在用户的​​设备上使用它。

答案 1 :(得分:1)

要专门回答can user change the ANDROID_ID on an unrooted device?问题:

在运行Android API级别低于8.0的设备上,每个用户只有一个ANDROID_ID。可以使用以下方法进行更改:

# assuming we want to change user 0's ANDROID_ID
$ adb shell settings get --user 0 secure android_id
77aac9d1f119cb8f  
$ adb shell settings put --user 0 secure android_id aaaaaaaabbbbbbbb
$ adb shell settings get --user 0 secure android_id
aaaaaaaabbbbbbbb  

我们可以使用相同的技术来更改Android 8.0(及更高版本)设备上的ANDROID_ID,但是只能在系统进程中看到。