作者: 闲鱼技术 - 抚凌
业务背景
用户增长, 是开源节流促成长的过程, 是包含了有效用户增长, 用户成长, 用户变现, 用户传播, 防止用户流失等一整套增长流程, 而非单纯数量上的增长.
在实践中, 增长手段主要聚焦在如何获取用户和提升用户活跃度上. 在用户获取成本不断升高的背景下, 任何一种获取用户的方式都变得昂贵且效果难以评估, 就好比我们都知道广告投出去有一半钱是浪费掉了, 但却不知道是哪部分.
为了评估增长手段的有效性, 首先需要一种能在各个渠道追踪用户行为的手段. 一般会使用设备指纹技术来唯一标识用户, 即通过一系列设备信息生成设备的唯一标识, 用设备标识来替代用户标识作为追踪用户的手段.
问题定义
可以用于标识出该设备的设备特征或者独特的设备标识被称为设备. 设备指纹因子通常包括计算机的操作系统类型, 安装的各种插件, 浏览器的语言设置及其时区 , 设备的硬件 ID, 手机的 IMEI, 电脑的网卡 Mac 地址, 字体设置等, 通过某种 Hash 算法生产特征字符串来用作设备指纹. 设备指纹服务有两个核心问题需要解决问题:
设备 ID 的有效性: 无论使用单一还是多种信息来源, 设备指纹的有效性取决于设备 ID 的有效性. 存在两种可能无效情况, ID 冲突和 ID 漂移. ID 冲突指不同设备拥有了相同的 ID,ID 漂移指一台设备在不同环境或时间获取时获取到了不同的 ID.
设备服务架构的扩展性和可靠性: 不同的渠道可能会定义不同的设备 ID 组合作为设备指纹的来源, 在多个渠道间交互时需要支持和兼容多种 ID 组合的查询和转化; 设备服务需要广泛应用于增长手段的各个环节, 服务的访问量会明显大于一般的产品链路服务, 因此对可靠性也有较高要求.
我们针对这两个核心问题, 在下文中分别给出对应的问题分析和解法.
设备指纹 ID
Android 设备可以获取的 ID
IMEI-- 国际移动设备识别码(International Mobile Equipment Identity), 即通常所说的手机序列号, 手机 "串号", 用于在移动电话网络中识别每一部独立的手机等移动通信设备, 相当于移动电话的身份证. 几乎所有的设备都可以返回这个串号, 并且唯一较好. 它根据不同的手机设备返回 IMEI,MEID 或者 ESN 码.
IMSI-- 国际移动用户识别码 (IMSI:International Mobile Subscriber Identification Number) 是区别移动用户的标志, 储存在 SIM 卡中, 可用于区别移动用户的有效信息. 当手机上装有 Sim 卡并且可用时, 返回该值, 不同 Sim 卡的返回值不同.
Mac-- 可以使用手机 Wi-Fi 或蓝牙的 Mac 地址作为设备标识. 并不是所有的设备都有 Wi-Fi 和蓝牙硬件, 硬件不存在时获取不到.
ANDROIDID-- 安卓 ID, 在设备第一次启动的时候生成并保存, 并且可能会在恢复出厂设置后重置该值. 理论上是大部分是重置的. 通常被认为不可信, 因为它有时为 null. 开发文档中说明了: 这个 ID 会改变如果进行了出厂设置. 并且, 如果某个 Andorid 手机被 Root 过的话, 这个 ID 也可以被任意改变.
iOS 设备可以获取的 ID
IDFA--Identifier For Advertising. 直译就是广告 id, 在同一个设备上的所有 App 都会取到相同的值, 是苹果专门给各广告提供商用来追踪用户而设的, iOS 默认设置是允许追踪. 用户可以在设置里重置此 id 的值, 或限制此 id 的使用, 故此 id 有可能会取不到值. iOS6 及之后版本可以使用.
IDFV--Identifier for Vendor, 提供给 App 供应商使用的 ID. 每个设备在所属同一个 App 供应商的应用里, 都有相同的值. iOS6 及之后版本可以使用.
UDID--Unique Device Identifier. 设备的唯一设备识别符. UDID 从 iOS5 开始被禁止使用.
UUID--Universally Unique Identifier, 通用唯一标识符. 可以在应用启动时生成, 它保证对在同一时空中的所有机器都是唯一的. 但除非本地保存后获取本地址, 每次调用生成的 ID 均不相同.
Mac-- 同 Android 中的定义, iOS7 开始只能获取一个固定值.
新一代的设备指纹技术
传统的设备识别手段主要依赖于单一的信息源, 与此不同, 新一代的设备指纹技术使用更多的信息来完成设备的识别. 它通过网络收集终端设备的特征信息, 并在分析与鉴别的基础上, 对每一组从终端设备采集的特征信息组合赋予唯一的设备指纹 ID, 用以标识该终端设备. 一般具有开发能力的厂商均有自己的一套生成方案, 同时也有第三方的厂商提供解决方案以供使用. 以下以阿里使用的 UMID(唯一设备 ID)为例, 说明设备指纹 ID 在各平台上所具有的能力.
iOS 上的能力
卸载重装 App, UMID 不变
跨 App,UMID 不变
限制广告跟踪,(采集不到 IDFA),UMID 不变
还原广告标识,(IDFA 变更),UMID 不
恢复出厂设置, UMID 不变
备份恢复不会导致两个设备 UMID 一致
准确识别是否越狱
准确识别越狱之后是否被 Hook
Android 上的能力
Android 6.0 下无采集 IMEI/Mac 权限, UMID 不变
修改 IMEI/IMSI/Mac/aid,UMID 不变
Android 7.0 跨 App,UMID 不变
平行空间 UMID 不变
准确识别各种模拟器
准确识别是否 Root
准确识别是否被 Hook
设备指纹 ID 选型
比较好的设备指纹 ID, 需要保证尽可能少的出现 ID 冲突和 ID 漂移. 并且, 在权限限制, 设备信息篡改, 系统重装, App 重装情况下也需要保证尽可能不变化.
集团内部的设备指纹 ID 方案已经经受住了大量业务的考验, 不仅适用于做用户行为的追踪, 同时也具有一定的安全防刷能力. 因此, 闲鱼用户设备信息采用 UMID 作为唯一标识. 同时对于多个数据来源 (闲鱼用户历史设备登录记录, 闲鱼用户历史安全设备记录, 闲鱼用户设备采集记录) 打通, 水平扩展可以支持的 IMEI,IMSI,Mac,IDFA,YunosUUID,Google 广告 ID 等 ID 的查询.
架构设计
闲鱼用户设备服务架构设计
MySQL-- 创建以 umid 为主键的闲鱼用户设备主表. 一个用户可以有多个设备, 一个设备仅记录最近使用的用户. 数据量较大, 需要做分库分表.
HiStore-- 用于多维查询, 数据从 MySQL 中同步. HiStore 是阿里中间件技术团队研发的数据库产品, 是一款基于独特的知识网格技术的列式数据库, 定位于海量数据高压缩比列式存储, 是低存储成本, 低维护成本, 海量数据 OLAP 存储引擎; 有效的解决了海量数据存储的成本问题, 以及在百亿数据场景下支持实时高效的多维度自由组合的检索. 外部开源的解决方案有 Infobright 等.
实时读取 -- 分布式 key/value 存储系统 Tair.Tair 是一个 Key/Value 结构数据的解决方案, 它默认支持基于内存和文件的两种存储方式, 分别和我们通常所说的缓存和持久化存储对应. 通过 tair 可以定制业务所需要的缓存, 也可以作为持久化存储完整存储整个闲鱼用户设备表(以 Umid 为 key). 外部开源产品可以选用 Redis.
实践场景(广告投放)
OCPC/OCPA/OCPM:
OCPC 是 Optimized Cost per Click 的缩写, 即优化点击付费, 本质还是按照 cpc 付费; OCPA 是 Optimized Cost per Action 的缩写, 即优化行为出价, 本质还是按照 cpa 付费; Optimized Cost per Click 的缩写, 即优化点击付费, 本质还是按照 cpc 付费; Optimized Cost per Mille 的缩写, 即优化千次展现出价, 本质还是按照 cpm 付费. 三种出价策略除了对应的优化目标不同, 本质上都是采用更科学的转化率预估机制, 帮助广告主在获取更多优质流量的同时提高转化完成率. 系统会在广告主出价基础上, 基于多维度, 实时反馈及历史积累的海量数据, 并根据预估的转化率以及竞争环境智能化的动态调整出价, 进而优化广告排序, 帮助广告主竞得最适合的流量, 并降低转化成本.
广告投放的数据流示意图(以激活为例)
闲鱼和广告商的数据流交互图
流程说明
广告商在监测事件同步接口 (接口一) 中会同步点击数据给闲鱼. 同步数据包含用户的设备信息 (IDFA/IMEI/OS 等), 业务信息(广告计划 id / 广告创意 id / 点击时间等) 和回调信息(回调地址或回调参数)
闲鱼接收到同步数据, 根据 OS 将设备 id 设为 key, 将回调信息作为 value 存储在 Tair 中.
闲鱼用户激活或者注册时触发设备信息采集, 经过清洗后更新至闲鱼用户设备表中. 同时查询是否有可以匹配的回调信息, 根据点击事件和转化目标, 处理回调信息后回调用户转化目标数据给广告商.
广告商收到回调数据后, 优化模型, 更新出价, 帮助闲鱼获取更适合转化的目标人群, 降低转化成本.
总结
在目前的闲鱼用户增长实践中, 广告投放优化已经给闲鱼带来了巨大的收益, 有效的控制了广告投放的成本, 使得增长团队可以进一步扩大广告投放的渠道和范围. 除了用于广告投放优化, 闲鱼设备服务还支撑了 deeplink, 智能投放和用户生命周期等一系列增长手段的尝试. 未来, 闲鱼技术团队还会进一步探索技术上的可能性, 驱动闲鱼用户增长业务的发展.
来源: https://yq.aliyun.com/articles/684042