1. 第三方SDK概述

说到第三方SDK,我猜你脑子里立马会蹦出几个常见的——广告SDK、推送SDK、支付SDK……没错,它们几乎已经成了我们移动开发的标配。但说实话,很多人对SDK的理解仅限于“拿来用”,很少去深究它到底是什么、能做什么、又藏着哪些合规上的坑。

这章我们先打好基础。把SDK的定义、常见类型、以及它在Android和iOS两边实际长什么样搞清楚。后面再谈扫描和合规,才有的放矢。

1.1 什么是第三方SDK?

SDK的全称是Software Development Kit,软件开发工具包。说白了,就是别人写好的一份“功能模块打包”,你引入到自己的项目里,直接调API就能用,不用自己从头造轮子。

我在项目中遇到过不止一次——老板说“下周上线,要支持微信支付”,一天时间你能自己写支付网关吗?不可能。直接接入微信支付SDK,三天搞定。你看,SDK就是这种“拿来即用”的东西。

但从合规角度看,SDK有一个很关键的特性:它通常会获取你应用的某些权限、收集某些数据。而且这些行为往往藏在SDK内部,开发者自己都不一定清楚。嗯,这就是后面我们要重点扫描的地方。

核心要点: SDK是第三方提供的代码包,帮你快速实现特定功能,但也可能引入额外的隐私收集行为,是权限合规扫描的主要目标。

1.2 常见的SDK类型

我按用途把最常见SDK分成了这几类,你品品,是不是都很眼熟:

类型 典型代表 主要功能 常见权限需求
广告SDK Google AdMob、穿山甲、广点通 展示广告、跟踪点击、归因 获取设备ID、MAC地址、位置
推送SDK 极光推送、友盟Push、个推 实现消息推送通道 获取设备信息、读取应用列表
社交SDK 微信登录、微博分享、QQ互联 第三方登录、分享内容 读取联系人、获取账号信息
支付SDK 支付宝、微信支付、PayPal 完成在线支付交易 读取设备IMEI、调用NFC(可选)
统计分析SDK Firebase Analytics、友盟统计 用户行为采集、漏斗分析 获取Android ID、OAID
地图/定位SDK 高德地图、百度地图 显示地图、获取定位 定位权限(粗+精)、网络状态
音视频SDK 声网、腾讯TRTC 实时音视频通话 摄像头、麦克风、录音权限

你看看这些权限需求。广告SDK要MAC地址、设备ID,推送SDK要读取应用列表……这些在过去可能是“无感知”的事,但现在合规红线出来了,每一个都可能变成整改点。

1.3 为什么在合规扫描中区分SDK类型很重要?

我个人习惯是:拿到一个App,先按SDK类型分类扫描。

为什么?因为不同类型的SDK,权限诉求的合理性完全不同。你想想看:

  • 一个地图SDK要定位权限,合理;一个壁纸App里的广告SDK也要定位权限,合理吗?鬼知道壁纸App要定位干嘛,很可能就是超范围采集。
  • 一个支付SDK读取IMEI,也许是为了绑卡风控;一个手电筒App里的广告SDK也读IMEI,这明显就是滥用。

所以扫描时,我们要先判断当前App种的是哪几类SDK,然后才能说“这个权限是不是越界了”。

我的小技巧: 用反编译或hook的方式,把App里所有第三方库的包名提取出来,再对照已知SDK签名特征库去归类。省时省力。

1.4 Android与iOS上的差异点

同一个SDK,在Android和iOS上的表现可能完全不同。我踩过一个坑:某个广告SDK在Android上只拿Advertising ID,但在iOS上会尝试读取IDFA和IDFV。如果你只扫了Android端,iOS端上线的合规风险就被忽略了。

下面我列几个关键差异:

维度 Android iOS
权限声明方式 AndroidManifest.xml静态声明 Info.plist + 运行时请求描述
设备ID IMEI(需PHONE权限)、Android ID、OAID IDFA(需用户授权)、IDFV
推送实现 各厂商自有通道 + 长连接 APNs统一通道
权限请求弹窗 不需要先说明原因(但推荐) 必须提供使用描述(NSLocationWhenInUseUsageDescription等)
SDK沙箱限制 相对宽松,SDK可访问更多共享空间 严格沙箱,每个App只能访问自己容器

比如推送SDK,Android上需要保留后台长期连接,还会互相拉起(业内人都知道的“全家桶现象”)。iOS上就干净多了,只能通过APNs系统推送,SDK本身不能自启。这就导致合规扫描的重点完全不同——Android上看是不是有后台权限滥用,iOS上主要看有没有正确使用描述字符串。

1.5 本章知识体系

下面这张图我把这章的核心内容串了一遍,方便你形成整体印象:

第三方SDK知识体系 第三方SDK 常见类型 Android/iOS差异 合规扫描关键 广告 / 推送 / 社交 支付 / 统计 / 地图 音视频 / 安全 / 工具类 权限声明方式不同 设备ID体系不同 推送机制 & 沙箱不同 按类型分类扫描 判断权限合理性 识别超范围行为 权限合规扫描实操

经验之谈: 遇到一个不认识的SDK包名时,我习惯去GitHub或Maven搜包名,看一看它的授权文档。很多时候文档里就写了它会收集哪些权限。比你自己反编译猜要准得多。

1.6 从一个真实案例说起

我记得有一年帮一家金融类App做合规整改。他们接了个流量变现的广告SDK,SDK文档上只写了“需获取网络权限”。结果一上线审核,被苹果拒了——说读取了IDFA但没有在Info.plist提供用途描述。我一查代码,SDK悄悄把IDFA读走了,根本没告知开发者。

这种“文档不写、代码偷偷跑”的情况,说真的,不少见。所以做第三方SDK权限合规扫描,第一步就是要搞清楚:你用了哪些SDK?它们各自都声明了哪些权限?代码里到底有没有偷偷调用敏感API?

千万注意: 不要光看SDK的文档。我习惯用静态扫描工具去跑一遍真实权限声明列表,再用动态hook去验证运行时行为。两两比对,才能发现文档和实现之间的差异。

好了,这章我们主要厘清了SDK是什么、有哪些类型、Android/iOS有哪些不同。下一部分我们会开始讲具体的扫描方法——第一件事就是怎么把App里的SDK清单给扒出来。