Android 唯一标识生成

现象

目前的oaid生成不稳定,会出现生成失败,或者无法生成的问题。导致用户重复绑定。

调研

当前生成方案

目前是通过移动联盟提供的 oaid sdk 作为生成 唯一设备标识。
版本:oaid_sdk 1.0.25
图片: https://odocs.myoas.com/uploader/f/VoF1JSDLd9Ao8AzZ.png?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhY2Nlc3NfcmVzb3VyY2UiLCJleHAiOjE2NTg4MjIyMDEsImciOiJlckFkUDY5TkdMSVlZMkFHIiwiaWF0IjoxNjU4ODIxNjAxLCJ1c2VySWQiOjQ2OTB9.wKBSlRMKIRRUkWg9HblrYc75fxQyraHN6svJL16yJ_0

验证生成oaid代码

神策

原理

里面还是通过 msa 进行生成,通过反射,调用各个版本:
InitSdk

图片: https://odocs.myoas.com/uploader/f/nb0XpexhA68OMnmK.png?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhY2Nlc3NfcmVzb3VyY2UiLCJleHAiOjE2NTg4MjIyMDEsImciOiJlckFkUDY5TkdMSVlZMkFHIiwiaWF0IjoxNjU4ODIxNjAxLCJ1c2VySWQiOjQ2OTB9.wKBSlRMKIRRUkWg9HblrYc75fxQyraHN6svJL16yJ_0
图片: https://odocs.myoas.com/uploader/f/8SuFqcodRZVO7lfL.png?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhY2Nlc3NfcmVzb3VyY2UiLCJleHAiOjE2NTg4MjIyMDEsImciOiJlckFkUDY5TkdMSVlZMkFHIiwiaWF0IjoxNjU4ODIxNjAxLCJ1c2VySWQiOjQ2OTB9.wKBSlRMKIRRUkWg9HblrYc75fxQyraHN6svJL16yJ_0

结果:

大部分手机,可以获取,少数手机不行
图片: https://odocs.myoas.com/uploader/f/U7KOczeeulIGrEk4.png?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhY2Nlc3NfcmVzb3VyY2UiLCJleHAiOjE2NTg4MjIyMDEsImciOiJlckFkUDY5TkdMSVlZMkFHIiwiaWF0IjoxNjU4ODIxNjAxLCJ1c2VySWQiOjQ2OTB9.wKBSlRMKIRRUkWg9HblrYc75fxQyraHN6svJL16yJ_0

通过的msa oaid获取

原理

都是都通过msa的sdk获取。
图片: https://odocs.myoas.com/uploader/f/mSXCLyVCMrziLy5f.png?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhY2Nlc3NfcmVzb3VyY2UiLCJleHAiOjE2NTg4MjIyMDEsImciOiJlckFkUDY5TkdMSVlZMkFHIiwiaWF0IjoxNjU4ODIxNjAxLCJ1c2VySWQiOjQ2OTB9.wKBSlRMKIRRUkWg9HblrYc75fxQyraHN6svJL16yJ_0

结果同上。

msa 的版本升级验证
目前tt采用的是: 版本:oaid_sdk 1.0.25

最新版本,1.2.1:但是需要证书
https://github.com/2tu/msa

验证未创建证书结果:
图片: https://odocs.myoas.com/uploader/f/qalUSQiVr72kXGRi.png?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhY2Nlc3NfcmVzb3VyY2UiLCJleHAiOjE2NTg4MjIyMDEsImciOiJlckFkUDY5TkdMSVlZMkFHIiwiaWF0IjoxNjU4ODIxNjAxLCJ1c2VySWQiOjQ2OTB9.wKBSlRMKIRRUkWg9HblrYc75fxQyraHN6svJL16yJ_0
图片: https://odocs.myoas.com/uploader/f/kXDGNxujG18lvt5z.png?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhY2Nlc3NfcmVzb3VyY2UiLCJleHAiOjE2NTg4MjIyMDEsImciOiJlckFkUDY5TkdMSVlZMkFHIiwiaWF0IjoxNjU4ODIxNjAxLCJ1c2VySWQiOjQ2OTB9.wKBSlRMKIRRUkWg9HblrYc75fxQyraHN6svJL16yJ_0

证书创建:
图片: https://odocs.myoas.com/uploader/f/IX7has4W0zg8mtBw.png?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhY2Nlc3NfcmVzb3VyY2UiLCJleHAiOjE2NTg4MjIyMDEsImciOiJlckFkUDY5TkdMSVlZMkFHIiwiaWF0IjoxNjU4ODIxNjAxLCJ1c2VySWQiOjQ2OTB9.wKBSlRMKIRRUkWg9HblrYc75fxQyraHN6svJL16yJ_0
在这里插入图片描述

线上其他生成方式

方案一:通过反射,根据每部手机,反射调用系统提供的方法获取

原理

逻辑基本大同小异,以oppo手机为例:
代码片段1:
https://github.com/gzu-liyujiang/Android_CN_OAID
图片: https://odocs.myoas.com/uploader/f/uT5EuqjlLx0tvrza.png?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhY2Nlc3NfcmVzb3VyY2UiLCJleHAiOjE2NTg4MjIyMDEsImciOiJlckFkUDY5TkdMSVlZMkFHIiwiaWF0IjoxNjU4ODIxNjAxLCJ1c2VySWQiOjQ2OTB9.wKBSlRMKIRRUkWg9HblrYc75fxQyraHN6svJL16yJ_0

代码片段2:
https://github.com/dikxia/OaidLite
图片: https://odocs.myoas.com/uploader/f/sQlmQjdM33c3mqhh.png?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhY2Nlc3NfcmVzb3VyY2UiLCJleHAiOjE2NTg4MjIyMDEsImciOiJlckFkUDY5TkdMSVlZMkFHIiwiaWF0IjoxNjU4ODIxNjAxLCJ1c2VySWQiOjQ2OTB9.wKBSlRMKIRRUkWg9HblrYc75fxQyraHN6svJL16yJ_0

代码片段3:
https://github.com/shuzilm-open-source/Get_Oaid_CNAdid
图片: https://odocs.myoas.com/uploader/f/ublSiqnCxQv9G0bz.png?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhY2Nlc3NfcmVzb3VyY2UiLCJleHAiOjE2NTg4MjIyMDEsImciOiJlckFkUDY5TkdMSVlZMkFHIiwiaWF0IjoxNjU4ODIxNjAxLCJ1c2VySWQiOjQ2OTB9.wKBSlRMKIRRUkWg9HblrYc75fxQyraHN6svJL16yJ_0

结论

在oppo手机上,目前验证的机型,都获取了oaid

方案二:获取设备的常用数据

  • imei
    需要READ_PHONE_STATE权限​
  • AndroidId
    可能为空
Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID)
  • 获取数字版权管理设备ID
    可能为空
    通过取出ROM版本、制造商、CPU型号以及其他硬件信息来伪造设备标识​
    参考:https://blog.csdn.net/u013290250/article/details/118580373
    代码:https://github.com/z244370114/DeviceLibray
设备指纹算法:
第一部分:imei/meid,双卡时优先取meid,取不到meid的情况下取固定的imei(多个imei必须固定取一个,不能随机取其中之一),得到串1。
第二部分:设备串号serial不为空时,拼接android.os.Build.MANUFACTURER,得到串2。注意,如果串1和串2中的serial都为空,则取Mac地址+android.os.Build.MANUFACTURER作为串2(注意取法上需要兼容6.0、7.0、9.0以上)。
第三部分:静态硬件字段组合,依次拼接下面的字段,以"/"为分隔符号,进行32位md5小端法计算得到串3
android.os.Build.BOARD
android.os.Build.BRAND
android.os.Build.DEVICE
android.os.Build.HARDWARE
android.os.Build.MODEL
android:os.Build.PRODUCT
android.os.Build.TAGS
android.os.Build.TYPE
android.os.Build.USER
android.os.Build.SUPPORTED_ABIS 数组依次拼接
android.os.Build.CPU_ABI
screenWidth
screenHeight
screenDensity
screenDensityDpi
将串1、2、3依次拼接进行32位md5小端法计算得到device_id。
客户端需要缓存得到的device_id,注意存放的位置,在外部存储中以特定隐藏文件夹+隐藏文件的形式存放,包删除后文件不被删除,别的包安装后先读取指定这个隐藏文件的内容,有device_id则直接用,无则生成;

结论:唯一标识生成方案

第一步

通过msa 移动联盟,提供的方法,继承 oaid_sdk_1.0.25 版本,获取手机的oaid

ps:msa,不升级,这样不需要额外申请证书。

第二步

通过反射,根据每部手机,反射调用系统提供的方法获取。

ps:由于项目目前采用的是msa方式生成,故反射放在第二步,如果不考虑历史原因,建议先采用第二步。

第三步

获取设备的常用数据,然后拼接成md5值,作为设备唯一标识。

第四步

以上方法出现空,或者异常,采用随机生成的方式,进行处理。

配套方案

1、采用sp配合使用

2、采用文件读取,配合使用

用于项目要符合国际安全标准,文件授权的问题,需要考虑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值