当前位置: 首页 > article >正文

Android OAID 集成实战:基于 MSA SDK 1.0.25 的避坑指南与多厂商适配

1. 为什么需要OAID从IMEI到匿名标识的演进之路几年前我做广告归因项目时突然发现获取不到设备的IMEI了。当时第一反应是代码出了问题反复检查权限声明和API调用直到看到系统日志里醒目的READ_PHONE_STATE permission denied提示才意识到——移动互联网的隐私保护时代真的来了。IMEI作为设备唯一标识符的时代终结后国内各大厂商联合推出了**OAIDOpen Anonymous Device Identifier**解决方案。这个由移动安全联盟MSA推动的标识体系有三大特点匿名性首次开机随机生成与设备硬件无强关联可重置用户可在系统设置中手动重置类似广告ID跨应用一致所有应用获取到的OAID相同实测发现在华为P40上重置OAID后不仅系统设置中的广告与隐私选项会显示新ID所有通过MSA SDK获取的OAID也会同步更新。这种设计既满足了广告追踪的技术需求又保障了用户的控制权。2. MSA SDK 1.0.25集成全流程详解2.1 环境准备与依赖配置首先需要下载oaid_sdk_1.0.25.zip解压后得到两个关键文件oaid_sdk_1.0.25.aar核心SDK库supplierconfig.json厂商配置模板建议在Android Studio中按以下步骤操作将aar文件放入app/libs目录在build.gradle中添加依赖implementation files(libs/oaid_sdk_1.0.25.aar)把json文件拷贝到app/src/main/assets目录这里有个容易踩的坑Gradle同步后务必检查aar是否被正确引用。我遇到过缓存导致依赖不生效的情况解决方法是在Terminal执行./gradlew cleanBuildCache2.2 关键配置解析打开supplierconfig.json会看到这样的结构{ supplier:{ huawei:{ appid: 你的华为应用ID }, xiaomi:{ appid: 你的小米应用ID } } }各厂商appid获取方式华为在AppGallery Connect控制台查看小米需要在小米开放平台创建应用vivo/OPPO各自的应用商店后台获取特别提醒vivo设备需要额外在AndroidManifest.xml添加meta-data android:namecom.vivo.app.appid android:value你的vivo应用ID/3. 多厂商适配实战经验3.1 华为设备特殊处理在集成测试时发现华为Mate30存在以下特性必须集成HMS Core 2.6.2版本海外版设备默认关闭OAID功能需要动态申请AD_ID权限建议代码中添加判断逻辑if(Build.MANUFACTURER.equalsIgnoreCase(huawei)) { // 检查HMS版本 int hmsVersion HuaweiApiAvailability.getInstance() .getHuaweiMobileServicesVersion(context); if(hmsVersion 20602000) { showUpdateHmsDialog(); } }3.2 小米设备的异步问题小米10上遇到最典型的问题是异步回调延迟。测试数据显示系统版本平均响应时间成功率MIUI 12320ms98%MIUI 13580ms95%解决方案是双重保险机制// 方案1设置超时机制 final CountDownLatch latch new CountDownLatch(1); MdidSdkHelper.InitSdk(context, true, new IIdentifierListener() { Override public void OnSupport(boolean isSupport, IdSupplier supplier) { latch.countDown(); // 处理逻辑 } }); latch.await(800, TimeUnit.MILLISECONDS); // 方案2缓存上次获取的OAID SharedPreferences prefs getSharedPreferences(oaid_cache, MODE_PRIVATE); String lastOaid prefs.getString(last_oaid, null);4. 避坑指南那些官方文档没告诉你的细节4.1 混淆配置要点在proguard-rules.pro中必须添加-keep class com.bun.miitmdid.core.** {*;} -keep class com.bun.miitmdid.interfaces.** {*;}曾经因为漏配导致OPPO Reno5上出现NoClassDefFoundError错误日志非常隐晦E/AndroidRuntime: Caused by: java.lang.ClassNotFoundException: Didnt find class com.bun.miitmdid.core.MdidSdkHelper4.2 厂商ROM兼容性测试中发现以下特殊情况一加手机海外版氢OS默认不提供OAID魅族18需要开启智能权限管理中的设备标识选项三星S21国行版正常但港版返回null建议在代码中加入厂商判断public static boolean isChinaRom() { String region Settings.Global.getString( context.getContentResolver(), ro.boot.hwc ); return CN.equalsIgnoreCase(region); }5. 验证与调试技巧开发时我习惯用这个调试方法在PC端启动adb监听adb logcat | grep -E OAID|Mdid在设备设置中重置OAID设置→隐私→广告ID观察应用获取的新旧OAID变化对于无法获取OAID的情况可以依次检查设备是否在支持列表中supplierconfig.json是否放置正确厂商appid是否有效系统版本是否达标记得那次在vivo X60上调试时发现json文件编码格式导致解析失败UTF-8 with BOM用Notepad转换后立即正常。这种细节问题往往最耗时希望我的经验能帮你少走弯路。

相关文章:

Android OAID 集成实战:基于 MSA SDK 1.0.25 的避坑指南与多厂商适配

1. 为什么需要OAID?从IMEI到匿名标识的演进之路 几年前我做广告归因项目时,突然发现获取不到设备的IMEI了。当时第一反应是代码出了问题,反复检查权限声明和API调用,直到看到系统日志里醒目的"READ_PHONE_STATE permission …...

Ubuntu 22.04 网络配置疑难:为何 netplan apply 后 IP 仍“顽固”不变?

1. 当netplan apply失效时,我们到底遇到了什么? 最近在帮朋友调试一台Ubuntu 22.04服务器时,遇到了一个特别"顽固"的问题:明明用netplan修改了IP地址,执行netplan apply也没报错,但重启后IP地址就…...

sudo 命令详解:Linux 权限管理的“万能钥匙“

🔐 sudo 命令详解:Linux 权限管理的"万能钥匙" 💡 你是否曾在 Linux 系统中遇到 “Permission denied” 的报错而手足无措?今天我们就来聊聊 Linux 世界里最重要的命令之一 —— sudo。 文章目录🔐 sudo 命令…...

Serverless架构与实践:无服务器时代的应用开发

Serverless架构与实践:无服务器时代的应用开发 1. 背景介绍 Serverless架构是一种云计算模型,它允许开发者构建和运行应用程序,而无需管理服务器基础设施。随着云计算的发展,Serverless已经成为现代应用开发的重要趋势&#xff0c…...

RAG 还是 Lucene:私有化部署客服系统的 AI 知识库架构选型渤

在之前的文章中,我们花了大量的篇幅,从记录后端pod真实ip开始说起,然后引入envoy,再解决了各种各样的需求:配置自动重载、流量劫持、sidecar自动注入,到envoy的各种能力:熔断、流控、分流、透明…...

Linux 线程调度策略详解:SCHED_OTHER、SCHED_FIFO、SCHED_RR

在 Linux POSIX 线程编程中,调度策略直接决定了线程如何竞争 CPU 资源,也是面试与嵌入式、实时开发中的高频考点。本文从原理、特点、适用场景到代码示例,彻底讲清楚三种调度策略:SCHED_OTHER、SCHED_FIFO、SCHED_RR。 一、基础概…...

深度学习项目训练环境低资源优化:支持梯度检查点+混合精度,RTX 3090显存省35%

深度学习项目训练环境低资源优化:支持梯度检查点混合精度,RTX 3090显存省35% 1. 环境准备与快速上手 1.1 开箱即用的深度学习环境 这个深度学习训练镜像已经预装了完整的开发环境,基于PyTorch 1.13.0和CUDA 11.6构建,包含了训练…...

如何用3分钟将B站视频转成文字稿?这个免费开源工具让你告别手动记录

如何用3分钟将B站视频转成文字稿?这个免费开源工具让你告别手动记录 【免费下载链接】bili2text Bilibili视频转文字,一步到位,输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 你是否曾经面对长达几小时的B…...

Office Custom UI Editor终极指南:免费打造专属Office界面

Office Custom UI Editor终极指南:免费打造专属Office界面 【免费下载链接】office-custom-ui-editor Standalone tool to edit custom UI part of Office open document file format 项目地址: https://gitcode.com/gh_mirrors/of/office-custom-ui-editor …...

终极指南:3步快速备份你的QQ空间完整历史记录

终极指南:3步快速备份你的QQ空间完整历史记录 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否担心QQ空间的珍贵记忆会随着时间流逝而消失?GetQzonehistory…...

DeOldify性能调优实战:针对显存与推理速度的优化策略

DeOldify性能调优实战:针对显存与推理速度的优化策略 你是不是也遇到过这种情况?好不容易部署好了DeOldify,准备给家里的老照片上色,结果一运行,程序就报错,提示显存不足。或者,虽然能跑起来&a…...

PDF提取不求人:MinerU镜像开箱即用,支持GPU加速

PDF提取不求人:MinerU镜像开箱即用,支持GPU加速 1. 引言:告别繁琐的PDF提取工作 在日常工作和研究中,我们经常需要从PDF文档中提取内容。无论是学术论文、技术报告还是商业文档,PDF格式因其良好的排版保持能力而广受…...

一个免费、轻量的 Typora 图床方案:Cloudflare R2 + Python——十分钟完成

一个免费、轻量的 Typora 图床方案:Cloudflare R2 Python,十分钟搞定 平时我主要用 Typora 写 Markdown,一直想要一个尽量简单的图床方案: 粘贴图片后自动上传,自动回填链接,不想额外折腾一堆服务和配置。…...

Vibe Coding:用“氛围感”重塑编程

Vibe Coding(氛围编程)是由OpenAI联合创始人Andrej Karpathy于2025年初提出的编程新范式,核心是通过自然语言描述需求,由AI生成代码,开发者角色从"编码者"转变为"需求引导者"和"结果优化者&q…...

GetQzonehistory终极指南:5分钟永久备份你的QQ空间记忆

GetQzonehistory终极指南:5分钟永久备份你的QQ空间记忆 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在这个数字记忆易逝的时代,QQ空间承载了我们太多的青春回…...

百川2-13B-对话模型WebUI快速部署:无需Docker,原生Python 3.10环境直跑

百川2-13B-对话模型WebUI快速部署:无需Docker,原生Python 3.10环境直跑 1. 开篇:为什么选择百川2-13B-Chat-4bits? 如果你正在寻找一个能在自己电脑上流畅运行的中文大语言模型,百川2-13B-Chat-4bits版本可能就是你想…...

一键部署后:BERT文本分割模型健康检查与监控

一键部署后:BERT文本分割模型健康检查与监控 部署一个BERT文本分割模型,看着服务成功启动,这只是万里长征的第一步。接下来,你可能会有这样的疑问:我的服务真的在稳定运行吗?它处理请求的速度够快吗&#…...

embeddinggemma-300m部署步骤详解:从pull模型到WebUI验证全流程

embeddinggemma-300m部署步骤详解:从pull模型到WebUI验证全流程 1. 环境准备与ollama安装 在开始部署embeddinggemma-300m之前,我们需要先准备好运行环境。这个模型对硬件要求相对友好,普通笔记本电脑或台式机都能运行。 系统要求&#xf…...

白嫖 1000 次!这款毫秒级企业工商数据 API 实测,真香!

作为一名长期在需求一线摸爬滚打的后端开发,最头疼的就是接各种第三方接口。尤其是企业工商数据这块,由于数据量大、更新快,很多大厂的 API 授权费动辄上万,对于咱们这种接个外包、做个 Demo 验证或者初创项目的团队来说&#xff…...

Cursor报错user is unauthorized?3种快速解决方法(附官方推荐安装指南)

Cursor报错"user is unauthorized"的深度排查与解决方案 1. 理解"user is unauthorized"错误的本质 当你满怀期待地打开Cursor准备开始一天的编码工作,却突然看到"user is unauthorized"的红色错误提示时,那种感觉就像被…...

嵌入式常见的面试题1

在嵌入式 Linux 应用层,使用 TCP socket 发送数据时,write()/send() 返回成功是否意味着数据已送达对端?如何确保对端应用层确实收到了数据?考察点:TCP 协议栈缓冲区机制、可靠传输的误解、应用层确认协议。参考答案&a…...

深度解析:ComfyUI-Manager节点冲突检测的5种技术解决方案与架构设计

深度解析:ComfyUI-Manager节点冲突检测的5种技术解决方案与架构设计 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable …...

2026移动应用质量监控Bugly:全平台异常定位与统一管理实践

2026移动应用质量监控Bugly:全平台异常定位与统一管理实践 在移动应用开发进入多端融合与高频迭代的背景下,复杂运行环境使崩溃、性能劣化等问题更易隐蔽扩散,企业诉求已从被动修复转向主动、统一的质量管控。Bugly作为腾讯推出的专业应用质量…...

Omni-Vision Sanctuary前端交互设计:基于Web的实时图像生成演示系统

Omni-Vision Sanctuary前端交互设计:基于Web的实时图像生成演示系统 1. 项目背景与核心价值 想象一下这样的场景:设计师需要快速生成产品概念图,营销团队等待社交媒体配图,而开发人员正在调试AI模型的参数。传统工作流程中&…...

Windows任务栏美化终极指南:TranslucentTB让你的桌面秒变高级感

Windows任务栏美化终极指南:TranslucentTB让你的桌面秒变高级感 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 还在忍受Wind…...

154W,确实可以封神了!!

去年DeepSeek爆火,生成式AI和大模型技术呈现爆发式增长,也让算法工程师重新成了炙手可热的岗位,岗位薪资远超很多运维、嵌入式、前后端岗位,在程序员中稳居前列。AI的快速发展也给很多程序员带来更多的机会,很多公司都…...

为什么AI时代真正稀缺的不是代码, 而是 Idea. 我因此做了一个“发现+判断”的项目

最近做项目的时候, 我越来越强烈地感觉到一件事: 现在真正卡住很多人的, 可能已经不是“怎么做”, 而是“到底做什么”。 以前做一个产品, 最大门槛通常是执行。 不会写前端, 不会搭后端, 不会部署, 不会把整个闭环跑起来。那个时候, 真正稀缺的是开发能力。 但这两年情况已…...

终极免费学术论文获取指南:如何用Unpaywall一键解锁付费墙

终极免费学术论文获取指南:如何用Unpaywall一键解锁付费墙 【免费下载链接】unpaywall-extension Firefox/Chrome extension that gives you a link to a free PDF when you view scholarly articles 项目地址: https://gitcode.com/gh_mirrors/un/unpaywall-exte…...

局域网视频软件BeeWorks Meet

对于必须在内网进行高清视频沟通的场景,BeeWorks Meet 是一款定位清晰、功能全面的私有化视频会议解决方案。它最大的特点在于,能将所有会议数据都安全地保留在企业内部网络,让企业对自己的核心会议内容拥有完全的自主权。📌 BeeW…...

电商客服+导购智能体的设计与开发投

这个代码的核心功能是:基于输入词的长度动态选择反义词示例,并调用大模型生成反义词,体现了 “动态少样本提示(Dynamic Few-Shot Prompting)” 与 “上下文长度感知的示例选择” 的能力。 from langchain.prompts impo…...