识别Android设备的陷阱


一些开发人员可能需要识别其用户的Android设备。 通常,这样做并不是为了识别设备,而是为了确定应用程序的特定安装。 如果开发人员有多个应用程序并且想了解它们在相同的环境中工作,那么我也遇到了几种必要的情况。

Google说,识别设备很容易。 但是我们在谈论Android :)

本文重点介绍不想附加到Google服务的应用程序或库。

因此,让我们深入了解获得唯一设备标识符的奇妙冒险。

在这里,我们看到几种方法:


  • 广告编号
  • IMEI
  • MAC地址
  • 序列号
  • Android ID

到目前为止看起来还不错,不是吗? 获取Android设备唯一标识符的方法多达五种。 我敢肯定,如果您仍然在网络上沙沙作响,肯定会找到其他几种方法,但是在这里,我做了最受欢迎的方法。 因此,让我们按顺序进行。

广告编号


这是Google Play服务提供的唯一广告标识符。 广告必须运作,以便Google了解可以使用特定用户显示哪些广告,以及已经使用应用程序中内置的广告横幅显示了哪些广告。 而且这也意味着,例如,如果您的应用程序是从Amazon下载的,则您将丢失此标识符,此外,您还必须将Google库拖到您的应用程序中。

dependencies { compile 'com.android.support:appcompat-v7:21.0.3' compile 'com.google.android.gms:play-services:6.5.87' } 

结论:我们并不能在所有情况下都识别出该设备。

但是我们肯定要吧? 然后继续前进。

IMEI


这是GSM手机上使用的移动设备的国际标识符。 网络使用IMEI号码识别智能手机,并阻止访问被盗或列入黑名单的设备的网络。 但是不幸的是,使用IMEI可能会出现许多问题:

  • 发生无效的IMEI错误
  • 可以更改IMEI
  • 要获得IMEI权限,请执行以下操作:

 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { String imei = telephonyMgr.getImei(); } else { String imei = telephonyMgr.getDeviceId(); } 

结论:我们并不能在所有情况下都识别出该设备,它们也会欺骗我们:C

MAC地址


并非100%可靠。 Google自己谈论这个问题 ,但是不幸的是,我确实遇到了一些依赖于设备MAC地址的应用程序。 不要这样做。
可能可以从设备的WiFi或蓝牙硬件中检索Mac地址。 我们不建议将其用作唯一标识符。 首先,并非所有设备都具有WiFi。 另外,如果未打开WiFi,则硬件可能不会报告Mac地址。

序列号


它被认为是设备的唯一序列号,一直保留到“末尾”。 您可以通过以下方式获得它:

 //Until Android 7.1 (SDK 25) Build.SERIAL //Android 8 (SDK 26) ++ Build.getSerial() 

现在介绍问题。 首先,要获取序列号,您将需要向用户请求权限READ_PHONE_STATE否则用户可能会拒绝。 其次, 可以更改序列号。

结论:我们并不能在所有情况下都识别出该设备,我们必须征求用户的许可,该用户会欺骗他们并且仍然会欺骗我们。

Android ID


-在这里! -我们必须大喊。 -解决所有麻烦的方法!

Android ID也是唯一的设备标识符。 它是设备第一次引导期间生成和存储的64位值。
您可以这样获得:

 Secure.getString(getContentResolver(), Secure.ANDROID_ID); 

这样短的时间似乎使我们免于识别设备的麻烦。 在示例中,甚至Google家伙也将Android_ID用于LVL

在这里,我们的希望破灭了,没有什么是一样的了。 更新到Android 8之后, Android_ID现在对于每个已安装的应用程序而言都是唯一的。 但是,除此之外,Google关心我们,因此在更新之前安装的应用程序将保留与Google使用为此专门编写的服务保存的标识符相同的标识符。 但是,如果先卸载应用程序,然后重新安装,则Android_ID将有所不同。 为防止这种情况发生,您需要使用KeyValueBackup。


但是此备份服务需要注册,还要指定软件包名称。 此外,文档说这可能由于任何原因都不起作用。 谁该怪? 没有人,就是那样。

一般结论


如果您有一个好的后端,只需收集设备的演员表(已安装的应用程序,服务,可以获得的有关设备的任何数据)并比较已经存在的参数,请考虑可接受的更改百分比。

PS我像往常一样在电报频道@paradisecurity中发布所有集合,该链接可以在我的个人资料中找到,也可以在按名称搜索电报中找到。

快乐:)

Source: https://habr.com/ru/post/zh-CN434726/


All Articles