今天是在北京隔离的第十天 ,下周我就能去公司了 。

OAID 简介

因传统的移动终端设备标识如国际移动设备识别码(IMEI)等已被部分国家认定为用户隐私的一部分,并存在被篡改和冒用的风险,所以在Android 10及后续版本中非厂商系统应用将无法获取IMEI、MAC等设备信息。无法获取IMEI会在用户行为统计过程中对设备识别产生一定影响。

近日移动安全联盟针对该问题联合国内手机厂商推出补充设备标准体系方案,选择OAID字段作为IMEI等的替代字段。OAID字段是由中国信通院联合华为、小米、OPPO、VIVO等厂商共同推出的设备识别字段,具有一定的权威性,可满足用户行为统计的使用场景。

PS:简单理解就是从 Android 10 开始 ,我们上线的应用将无法在获取 IMEI 、MAC 等设备信息 。有什么影响呢  ?如果使用百度统计的话 ,将会在用户统计过程中对设备识别产生影响;如果项目中使用 IMEI 数据的话 ,你肯定获取不到了 ,可以试一下看看会返回 Null 吗 。

然后我这边要求在这一版本上接入 OAID ,其实项目中我没有使用 IMEI 这个字段数据 ,所以单纯项目里面没有什么影响,主要是百度统计的问题 。

接入 OAID 的考虑

讲真的,我是不太赞同接入这个移动安全联盟的 OAID的。

1. 兼容设备厂商问题 

目前并没有做到国内厂商的兼容 ,我相信未来一定是可以实现的。目前是主流的 华为、小米、OPPO、VIVO 。你可以看一下应用统计里面的数据 ,这几个厂商几乎全部的份额 。

2.更新日志 (如下图)

看上面的日志 ,我相信很多人都能一下子看出来那些能造成闪退的日志 。关于这一点是比较担心的 。如果百度统计没有统计到设备信息问题不大,但是接入这个SDK造成一些未知闪退就有点尴尬了。Android 开发都知道 ,这些未知的兼容问题是很致命的 。

说这么多没用 ,还是的接入

直接看OAID的接入pdf就可以了 。什么aar包 、什么json文件等等都比较简单 。有个迷惑性的问题就是接入 pdf 中代码调入这一块。

就是在获取设备 ID 的时候这些东西。看上面截图 ,有两种获取方式

首先看 b1 :因为 Android 9 以后类加载的限制 ,所以 Android 9 以后不建议使用这个方法 ,如需使用,需要做 MdidSdk.InitSdk 和 JLibrary.InitEntry()不能在一个类 里,还要注意包含这两个调用的类不能有依赖关系。  什么意思呢 ?就是这两行代码不能在同一个类里面。

然后看b2:反射调用 ,它的好处是 android 版本号无关,缺点是调用时间估计会长, 经过测试跟直接调用在用时上区别不大。这就很尴尬了 。

PS:那么我们到底使用哪个方式调用获取设备ID呢 ? b1是不建议使用 ,b2是可能调用时间会长但是经过测试跟直接调用在用事上区别不大 。哈哈哈 ,要是我选的话 ,那肯定是 b1 呀 ,麻烦点就麻烦点  。说实话 ,在项目总应该是很少去使用 反射这个黑科技的 ,到目前为止我认为是有益无害 。

PS :因为现在在家办公 ,手里没有 Android 10 的测试机 ,所以等下周到公司把他的代码给跑一遍试试 。

待续。。。

PS:开始还这个技术债

获取 IMEI 代码

   public static String getIMEI(Context context){String imei = "";try {TelephonyManager tm = (TelephonyManager) context.getSystemService(TELEPHONY_SERVICE);if(Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP){imei = tm.getDeviceId();}else {Method method = tm.getClass().getMethod("getImei");imei = (String) method.invoke(tm);Log.i("AAAAAAAAAAAA","IMEI = " + imei);}} catch (Exception e) {e.printStackTrace();}return imei;}

测试手机:华为 P30 ,Android 系统 10 

打印结果

2020-03-06 13:34:43.839 20110-20110/************* I/AAAAAAAAAAAA: IMEI = null

测试手机:小米 8 ,Android 系统 9

2020-03-06 13:46:00.911 14886-14886/*********** I/AAAAAAAAAAAA: IMEI = 861268046826351

如果感觉文章对您有帮助 ,可以关注我的公众号 SuperMaxs (如果有技术问题可以通过公众号加私人微信)。

Android 获取 OAID ,替换 IMEI (兼容 Android 10获取IMEI问题)相关推荐

  1. android获取imei兼容_Android如何获取双卡手机IMEI的方法示例

    前言: 项目中有个统计付费广告转化率的需求,需要获取用户手机的IMEI.但是网上最常见的方法有坑,也就是TelephonyManager.getDeviceId(),这方法有可能获取的是MEID或者空 ...

  2. android 屏幕圆角,Android通用圆角布局(兼容Android P)

    Android通用圆角布局(兼容Android P) Android通用圆角布局,可以解决Android P版本xfermode方案裁剪黑边问题和xfermode在列表view中使用滑动时EGL内存泄 ...

  3. java获取apk启动activity_兼容 Android 10 启动 APK 实现方案

    背景 我们想启动 APK 程序,有很多种方法,可以使用 Intent,也可以使用 adb shell 命令来启动,还有通过反射来启动 APk 程序. 我们这里主要讨论通过反射的方式来启动 apk 程序 ...

  4. android获取imei兼容_Android中获取IMEI码的方法

    公共请求头 所有HTTP请求中,都包含如下公共请求头(HTTP Header): 名称 类型 是否必需 描述 Accept String 是 接受的返回类型,目前只支持JSON:application ...

  5. Android 获取 唯一GUID ,替换 IMEI (兼容 Android 10+获取IMEI问题)

    Android 获取 唯一UUID ,替换 IMEI (兼容 Android 10+获取IMEI问题) 背景 关于 保存GUID方案 第一种,SharedPreferemces存储 第二种,sqlit ...

  6. android10 imei横线,Android 10 root用户获取imei

    IMEI(International Mobile Equipment Identity)是国际移动设备识别码的缩写,由15-17位数字组成,与手机是一一对应的关系.无论刷机还是恢复出厂设置,该设备标 ...

  7. Android获取OAID

    目录 写在最前面 写在前面 说明文档 SDK使用过程: 代码实现 写在最前面 看评论有好些朋友遇到了一些我没遇到的问题,而且看官方文档也已经更新,想着这些问题官方是不是已经优化解决了,就按着最新的文档 ...

  8. android h5可以获取设备的imei 和iccid_Android10 下获取序列号和IMEI号的权限

    介绍 Android10 因为提高了其安全性能,因此获取序列号和IMEI号的权限与以前的版本有了变化这里就举例Zebra 移动设备Android 10 系统下的如何获取相应权限.运行Android 1 ...

  9. Android获取手机型号、系统版本号、手机IMEI、手机厂商等

    添加工具类 SystemUtil : public class SystemUtil {/*** 获取当前手机系统语言.* 例如:当前设置的是"中文-中国",则返回"zh ...

  10. Android使用移动智能终端补充设备标识获取OAID

    官网http://www.msa-alliance.cn/col.jsp?id=120 首先到官网注册账号,申请下载相关sdk和授权证书 2.把 oaid_sdk_x.x.x.aar 拷贝到项目的 l ...

最新文章

  1. python3基础知识点_入门Python3基础教程-知识点摘要
  2. 深入探索.NET内部了解CLR如何创建运行时对象
  3. C#中Hashtable表的应用
  4. Git 提交 .gitignore文件
  5. Servlet底层原理、Servlet实现方式、Servlet生命周期
  6. html怎么防止修改数据,HTML防数据采集
  7. C++打印浮点数时保留两位小数
  8. Js中RegExp对象
  9. 谈论源码_当我们谈论开放音乐时,我们指的是什么?
  10. 【华为云技术分享】云小课 | 磁盘容量不够用?小课教你来扩容!
  11. html 说明文档样式,通用模板说明文档
  12. java实现微信公众平台中的字典排序
  13. Flex 分页 组件 源码
  14. webdriver 弹出框 java_如何使用Java处理Selenium WebDriver中的弹出窗口
  15. 光伏发电最大功率点跟踪 (mppt) matlab/simulink仿真程序 恒定电压法 扰动观察法(po) 电导增量法(inc)模糊控制法(fuzzy)多种方法
  16. creo扫描选择多条链作为轨迹_Proe/Creo创建扭簧
  17. Windows中texstudio的主题代码(持续更新)
  18. 常用数学术语中英文表达对照
  19. jq input输入框失焦、聚焦
  20. git命令出现fatal: Unable to create 'xxx/.git/index:File exists.问题

热门文章

  1. 采访:应用软件定制化有什么优点?
  2. 【Natural Language Processing】语言模型训练工具Srilm的安装及使用简介
  3. php 商户转账到微信零钱
  4. 电子邮件营销实例---粽子
  5. Pycharm常用快捷键大全【快查字典版】
  6. linux文件同步方法,inotify + rsync实现linux文件实时同步
  7. html网页屏保,屏幕保护是什么
  8. 导出RK3288开发板上的根文件系统,并打包img
  9. 一些著名软件的开发语言概述
  10. 【写着玩】二维码检测及定位