Android Q(10.0)上IMEI获取不到;Android Q(10.0)上OAID替代IMEI;OAID获取方式

2023-05-16

         

              

                

                   

         最近公司研发的 Android Q (android 10)的5G手机,然后就开始适配Android Q;发现无系统权限的应用无法获取到可作为唯一标识的IMEI,MAC等等;由于项目(负一屏/浏览器/)自己做了数据采集,项目中也接入了百度、头条、腾讯的广告等都需要获取设备唯一标识作为数据分析和收益统计的依据。于是适应行业,Android Q 上采取OAID作为唯一标识替代IMEI等;

 

      一、   首先我们来梳理一下Android 设备中的可作为唯一标识:

1> Device ID:设备ID,具有唯一性。其中又包括IMEI 和 MEID/ESN。一般情况我们获取手机的DeviceId也 
   就是手机的IMEI码。

2> IMEI:(International Mobile Equipment Identity)国际移动设备标识的缩写。是由15位数字组成 
   的 “电子串号”,它与每台手机一一对应,每个IMEI在世界上都是唯一的。GSM设备返回的,并且是写在主 
   板上的,重装APP不会改变IMEI。Android 6.0以上系统需要用户授予read_phone_state权限(弹窗授 
   权),如果用户拒绝就无法获得。但是Andorid Q(10.0)版本,将无法获取IMEI,出于用户隐私等一系列 
   安全问题的 考虑。将用其他匿名标识符代替,比如OAID。

3> MEID:(Mobile Equipment Identifier) 移动设备识别码是CDMA手机的身份识别码,也是每台CDMA手机 
   或通讯平板唯一的识别码。在手机键盘直接键入*#06#可获得。
   MEID/ESN:CDMA设备返回的,一般不使用。

4> UDID:(Unique Device Identifier)唯一设备标识码。用来标示设备的唯一性,由40个字符的字母和 
   数字组成 。Android:获取UUID后,写入.so文件生成UDID。即使APP重装,值也不变,除非root手机。

5> UUID:(Universally Unique Identifier)通用唯一识别码。目前最广泛应用的UUID,是微软公司的全 
   局唯一标识符GUID。其目的是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制 
   端来做辨识信息的指定。
   OpenUDID:是一个替代 UDID 的第三发解决方案。缺点是如果你完全删除全部带有 OpenUDID SDK 包的 
   App(比如恢复系统等),那么 OpenUDID 会重新生成,而且和之前的值会不同,相当于新设备。

6> OAID:(Open Anonymous Device Identifier) 开放匿名设备标识符。因用户隐私相关原因,Android 
   10及后续版本中非厂商系统应用将无法获取 IMEI、MAC 等设备信息。此背景下中国信通院联合华为、小 
   米、OPPO、VIVO 等主流厂商推出了 OAID 作为替代方案,满足用户行为统计的使用场景。

7> GAID:Google Advertising ID。Google推出的广告标识,与IDFA类似。在装了google play service 
   的安卓手机上,才可以获取到GAID。

8> IDFA:避免大家混淆到Android,特别介绍一下IDFA:(Identifier For Advertising)iOS独有的广告 
   标识符。IDFA 是苹果 iOS 6 开始新增的广告标识符,用于给开发者跟踪广告效果用的,可以简单理解为 
   iPhone 的设备临时身份证,说是临时身份证是因为它允许用户更换,IDFA 存储在用户 iOS 系统上,同一 
   设备上的应用获取到的 IDFA 是相同的。iOS 用户可以通过(设置程序 -> 通用 -> 还原 -> 还原位置与 
   隐私)更换 IDFA,iOS 10 系统开始提供禁止广告跟踪功能,用户勾选这个功能后,应用程序将无法读取 
   到设备的 IDFA。(在统计唯一用户的时候,IDFA 的可变性会造成部分用户的重复统计。)

二、   详细介绍 OAID:

        APP类广告效果追踪需要使用到用户的设备标识进行广告点击和转化效果的匹配,而安卓系统当前强依赖于IMEI的获取,上面提到Andorid Q(10.0)版本后,将无法获取IMEI。基于此背景,进行广告投放的效果追踪,需要能够替代及补充IMEI的设备标识。目前OAID作为目前市场主流的归因补充标识,OAID是由中国信息通讯研究院号召,移动安全联盟推行的安卓设备标识,在无法获取设备号情况下可以使用该标识进行数据匹配,目前主流厂商均已在新版本系统中支持该标识的获取,具有权威性。OAID可以理解为是国内联合推出的广告标识。
       与IDFA类似,对于OAID 用户也可以手动在设置中通过重置广告标识符更换OAID或者“限制广告跟踪”。

       更多 OAID 相关信息请参考移动安全联盟官网

 

      与OAID相关的设备标识体系中拥有四种设备标识:

 

 

三、 OAID的集成:

1.升级及策 SDK 。确保已使用及策 V2.0.7 及其后版本 SDK .获取新版及策 Android SDK

2.下载 MSA 统一 SDK 。登录移动安全联盟官网下载最新版 MSA 统一 SDK ,推荐使用 V1.0.13 及其后版本。

3.集成 MSA 统一 SDK 。把 miit_mdid_x.x.x.aar 拷贝到项目的 libs 目录下,并设置依赖,其中 x.x.x 版本号。

4.将 supplierconfig.json 拷贝到项目 assets 目录下并修改对应内容。其中 appid 需在对应厂商应用商店内注册自己的 APP 后获取。

5.在项目 App Module 下 build.gradle 文件中配置依赖。

dependencies {
  implementation fileTree(dir: 'libs', include: ['*.jar'])
  implementation files('libs/miit_mdid_x.x.xx.aar')
}

6.在proguard-rules.pro中混淆设置。

-keep class com.bun.miitmdid.core.* {;}

7.设置 gradle 编译选项,该部分内容请根据所选择平台合理配置。

android {
        compileSdkVersion 28
        defaultConfig {
               ndk {
                    abiFilters 'armeabi-v7a', 'x86', 'arm64-v8a', 'x86_64', 'armeabi'
                } 
                packagingOptions {
                    doNotStrip "/armeabi-v7a/.so" doNotStrip "/x86/.so" doNotStrip "/arm64- 
                    v8a/.so" doNotStrip "/x86_64/.so" doNotStrip "armeabi.so"
                }
            }
        }


8.调用及策 SDK 的事件追踪代码,测试是否可以正常获取OAID。 开发者完成 MSA 统一 SDK 集成后,正常调用及策 SDK 中的 trackEventName 或 trackxxxxEvent 方法即可完成 MSA SDK 的激活,及策 SDK 会自动调用 MSA SDK 的相关方法来获取 OAID,具体可通过 LOG 日志或者抓包查看相关事件数据包中的 oaid 字段,有值即表示集成成功。 注:OAID 仅适用于 Android 10 及其后版本,其它版本中仍然使用 IMEI 作为设备标识,故 Android 10之前的设备回传的事件数据中 oaid 字段默认为空。

             

 

                  

                     

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Q(10.0)上IMEI获取不到;Android Q(10.0)上OAID替代IMEI;OAID获取方式 的相关文章

  • 如何使用 kotlin Android 从 Url 读取 JSON?

    我正在使用 kotlin 来开发应用程序 现在我想从服务器获取 JSON 数据 在java中 我实现了Asyntask以及Rxjava来从Url读取JSON 我也在谷歌搜索 但我无法获得满足我的要求的正确详细信息 如何使用 kotlin 从
  • Android中如何通过ViewModel类在Activity和Fragment之间共享数据?

    我想知道是否可以传递一个在 Activity 类中声明的字符串数据 并将该字符串数据传递给 ViewModel 类 然后将数据传递给 Fragment 类 视图模型类 class TimeTableViewModel extends Vie
  • 使用 NEON 内在函数除以浮点数

    我当时正在处理四个像素的图像 这是在armv7对于 Android 应用程序 我想分一个float32x4 t向量由另一个向量组成 但其中的数字与大约不同0 7 to 3 85 在我看来 除法的唯一方法是使用右移 但这是针对一个数字2 n
  • 如何解决:无法解析:com.mapbox.mapboxsdk:mapbox-android-sdk:9.5.0

    我在Android studio中尝试使用mapbox时遇到这个问题无法解析 com mapbox mapboxsdk mapbox android sdk 9 5 0 问题是什么 我的 build gradle 依赖项 dependenc
  • Android 从 C++ 端播放原始音频

    我需要能够在 Android 系统的 C 端以自定义文件格式传输音频 我正在致力于移植自定义媒体播放器 并且需要能够打开自定义文件并从中传输音频 这很重要 因为我认为从性能角度来看将整个播放器移植到 JAVA 是不可行的 并且通过 JNI
  • 如何实现 ALTER TABLE 的示例[重复]

    这个问题在这里已经有答案了 我已经多次问过这个问题 但尚未得到完整的答案 如何实现 ALTER TABLE 语句以向数据库添加列 有人可以给我举个例子吗 请阅读SQLite ALTER TABLE 参考 http sqlite org la
  • 在android中从JSON生成listview

    我对 Android 完全陌生 目前正在尝试从从我的服务器中提取的 JSON 数组生成列表视图 我已经阅读了很多教程 但没有运气 有一种独特的方法可以做到这一点 请您指出一些适合开始的资源 我读过了this http www josecgo
  • 是否可以将自定义属性添加到 Android 资源的样式中?

    我在我的项目中使用视图流组件 它允许开发人员覆盖一些属性 例如
  • 在 /dev/input/eventX 中写入事件需要哪些命令?

    我正在开发一个android需要将触摸事件发送到 dev input eventX 的应用程序 我知道C执行此类操作的代码结构如下 struct input event struct timeval time unsigned short
  • 将 android 蓝牙客户端套接字连接到 ubuntu 服务器套接字时出现问题

    我正在编写一个 Android 应用程序 它应该通过蓝牙与服务器交换数据 服务器端位于运行 Ubuntu 的 PC 上 使用 bluez 库 用 C 或 C 编写 当我尝试连接到 PC 上的服务器套接字时 我的 Android 应用程序失败
  • 表面视图+gl表面视图+框架布局

    我是 java 和 OpenGL 的新手 我正在尝试获得一个相机预览屏幕 能够 同时显示 3D 对象 浏览完样本后 api 演示 我想结合示例的代码 api 演示就足够了 但不知何故它不起作用 迫使我 启动时关闭 错误被称为空指针 例外 有
  • 在 Xamarin 中隐藏软键盘

    如何隐藏软键盘以便在聚焦时显示Entry在 Xamarin forms 便携式表单项目中 我假设我们必须为此编写特定于平台的渲染器 但以下内容不起作用 我创建自己的条目子类 public class MyExtendedEntry Entr
  • Jetpack Compose 中复选框中的透明复选标记

    在我的 Compose 应用程序中 我需要创建一个圆形复选框 我已经通过下面的代码实现了这一点 Composable fun CircleCheckBox isChecked Boolean modifier Modifier Modifi
  • Android:如何创建模态进度“轮”叠加层?

    我想在我的视图上显示模式进度 轮子 叠加层 ProgressDialog 很接近 但我不想要对话框背景或边框 我尝试设置对话框窗口的背景可绘制 this progressDialog new ProgressDialog Main this
  • 为什么 Google 建议将库复制到您的树中?

    谷歌的Play 服务 API 的使用说明 http developer android com google play services setup html 例如 说 将 extras google google play service
  • Android Studio代理设置构建错误

    每当我尝试在 Android Studio 中构建应用程序时 都会收到以下错误 Error 169 254 16 169 254 16 Will ignore proxy settings for these hosts 我收到错误 5 次
  • Android TextureView 和硬件加速

    我正在尝试实现上所示的示例这一页 http developer android com reference android view TextureView html 我已经在运行 android 4 及以上版本的三种不同设备上进行了尝试
  • android系统用户和linux root用户有什么区别

    当我将手机连接到电脑并使用adb shell与我的手机通信并输入的命令ps命令输出当前在我的手机上运行的进程信息 我发现有两个特殊用户 一个是root 另一个是system 据我所知 Android是基于linux的 所以root用户是最大
  • JetPack Compose - 卡中行中的weight() 不起作用

    创建 Android 应用程序时 我将一些可组合项放在卡片的一行中 如下所示 但它没有按我的预期工作 我添加 weight 1f 的可组合项不再显示 data class Test val title String val text Str
  • ARM Chromebook 上的 Android 开发环境?

    我尝试了多次安装和使用安卓工作室 https developer android com studio index html on an ARM Chromebook C100P https archlinuxarm org platfor

随机推荐

  • vim 查找与替换

    查找 Score 9 样子的字串 Score space 43 0 9 1 space space 代表空格 43 代表一到多个 1 代表出现一次 VIM 下正则的特殊字符需要在前面加 转义 查找 Score 9 5或者 9 样子的字串 S
  • 学会这5招优化技巧,让你的 iPhone 更好的服务你

    你会使用 iPhone吗 xff1f 掌握这10个技巧可以让你的 iPhone 变得更好 相信很多人喜欢iOS流畅的设计 xff0c 但是它也有很多让人烦恼的小问题 现要只要你稍加用户得看完这篇文章 xff0c 你可以很轻松地解决这些小问题
  • QT 中菜单栏或者工具栏中添加任意部件

    1 工具栏中添加任意部件的方法 xff1a 工具栏中添加任意部件的方法比较简单 xff0c 基本上就是使用addWidget这个函数来实现 比如 xff1a 工具栏中添加一个按钮 xff08 QPushButton QPushButton
  • linux 下安 nxserver

    在CentOS 4 4 下安装比较简单 xff0c 先确保 sshd 服务启动并运行在 22 端口 xff0c 然后检查 expect 和 nc 这个两个包是否安装了 运行 yum install freenx server 端的安装就结束
  • python怎么安装PIL,显示 no module named PIL

    其实很简单 xff0c windows环境下 xff0c cmd xff0c pip install pillow 就行了
  • Qt线程:线程池——QThreadPool 和 QRunnable

    QThreadPool 一 描述 QThreadPool 类管理 QThread 的集合 QThreadPool 管理和回收单独的 QThread 对象 xff0c 以减少使用线程的程序中的线程创建成本 每个 Qt 应用程序都有一个全局 Q
  • 多线段几何图形—— 简单几何图形(判断一个点是否在图形的内部)

    先给出结论 以点为端点 xff0c 朝两侧发射射线 xff08 两根射线平行 xff09 xff0c 如果任意一侧的交点个数为偶数个 xff0c 那么这个点就不在几何体的内部 xff0c 反之在几何体的内部 以上图为例 xff0c 红色的点
  • 多线段几何图形—— 简单几何图形(布尔运算)

    如上图 xff1a 已知两个多边形 xff08 A B C D xff09 E F G H I xff0c 如何求出图形 xff08 F K C J xff09 xff1f 1 求出数据中的所有线段 xff0c 线段没有重合区域 xff0c
  • C++11常见编译与链接错误解决总结

    目录 一 C 43 43 11 常见编译问题 1 1 error no matching function for call to 1 2 39 xxxx 39 was not declared in this scope 1 3 ambi
  • Android获取唯一设备号

    TelephoneManager mgr 61 getSystemService Context TELEPHONY SERVICE xff08 权限 xff1a lt uses permission android name 61 34
  • 记录一下我在做公司后台管理系统的难点与心得

    公司的项目大致就长这个样子 刚进入页面的时候是两个请求 xff0c 左侧的内容跟右侧的内容分别是两个不同的请求 xff0c 这里我使用的是aioxs的并发请求 xff0c axios all axios提供了两个并发请求 axios all
  • 使用vue二次开发海康监控H5视频播放

    使用vue二次开发海康监控H5视频播放 西瓜播放器示例demo阿里云的示例demo使用海康的H5视频开发包 xff0c 海康的api页面中的使用第一步第二步第三步第四步 切记bug 由于公司项目需要做监控的直播跟回放 xff0c 所以接触到
  • 数字动态翻牌器

    数字动态翻牌器 最近项目里使用到了数字翻牌器 xff0c 于是自己写了一个 xff0c 动态的翻牌器 第一步创建一个组件页面 xff0c NumberCount vue 思路 xff1a 大概就是显示几位数 xff0c 然后从0开始滚动到当
  • 记录openLayers的学习日记

    因为在公司做项目一直用到了gis地图 xff0c 我又不太会 xff0c 所以就进行学习一下 xff0c 顺便记录一下吧 xff0c 哈哈哈 xff0c 共勉 简介 什么是openLayers xff0c 他就是一个用来帮助我们进行Web地
  • 基于vant UI设计一个下拉选择跟搜索功能的组件

    theme smartblue 简介 xff1a 这个是基于 vant3 0跟vue3 0的项目 xff0c 在开发中封装的一个组件 效果图 xff1a 组件功能 1 组件的下拉框数据进行排序从小到大 xff0c 分别为四个字体及以下 xf
  • SpringBoot -- 软件许可(License)证书生成+验证+应用完整流程

    一 项目目录树结构 由于时间有限 xff0c 不可能在博客上花太多时间 也不可能每一个细节都说的很细 xff0c 所以 xff0c 下面的内容虽然一时间看着比较懵 xff0c 但是文末有项目的GitHub地址 xff0c 或者不懂的可以留言
  • 让开发事半功倍的VueUse

    什么是VueUse VueUse不是Vue use xff0c 它是为Vue 2和3服务的是一组基于Composition API的实用函数 是目前世界上Star最高的同类型库之一 他功能丰富 xff0c 与服务器端渲染 生成完美配合 xf
  • bebian修改菱形乱码

    由于安装debian使用了最小安装 xff0c 默认用中文安装 xff0c 但内核没有中文字库 xff0c 导致某些字符显示为乱码 xff08 菱形 xff0c 方块 xff09 解决方法 xff1a 重新设置locale xff0c 使用
  • Ubuntu16.04迁移系统(系统备份与还原),亲测可行

    一 写在前面 由于linux的核心思想是 一切皆文件 xff0c 所以我们通过拷贝所有系统文件的方式来备份及恢复系统 我的Ubuntu系统通过UEFI的方式启动 xff0c 如果不清楚启动方式请自行查询UEFI 43 GPT和BIOS 43
  • Android Q(10.0)上IMEI获取不到;Android Q(10.0)上OAID替代IMEI;OAID获取方式

    最近公司研发的 Android Q xff08 android 10 xff09 的5G手机 xff0c 然后就开始适配Android Q xff1b 发现无系统权限的应用无法获取到可作为唯一标识的IMEI MAC等等 xff1b 由于项目