Gitlib Gitlib
首页
  • 分类
  • 标签
  • 归档
  • Golang开发实践万字总结
  • MySQL核心知识汇总
  • Redis实践总结
  • MQ实践万字总结
  • Docker数据持久化总结
  • Docker网络模式深度解读
  • 常用游戏反外挂技术总结
  • 读书笔记
  • 心情杂货
  • 行业杂谈
  • 友情链接
关于我
GitHub (opens new window)

Ravior

以梦为马,莫负韶华
首页
  • 分类
  • 标签
  • 归档
  • Golang开发实践万字总结
  • MySQL核心知识汇总
  • Redis实践总结
  • MQ实践万字总结
  • Docker数据持久化总结
  • Docker网络模式深度解读
  • 常用游戏反外挂技术总结
  • 读书笔记
  • 心情杂货
  • 行业杂谈
  • 友情链接
关于我
GitHub (opens new window)
  • 读书笔记

  • 面试

  • 工作复盘

    • 技术管理的三个层次
    • 广告技术-用户唯一标识
      • 为什么要建设用户唯一标识
      • 基本概念
        • 设备ID
        • 安卓
        • IOS
        • Web网站
        • 微信小程序
        • 用户ID
      • 用户唯一标识建设
        • 后续修复
        • 事件字段修复
        • 映射表修复
      • 参考
    • 产品设计思路·游戏数据埋点
  • 心情杂货

  • 在路上

  • 行业杂谈

  • 友情链接
  • 更多
  • 工作复盘
Ravior
2021-04-01
目录

广告技术-用户唯一标识

用户唯一标识,是用户唯一的身份ID,相同的身份ID,就会被当做是相同的一个用户。

# 为什么要建设用户唯一标识

如何区分某个用户就是他这个用户,而不是另一个用户,在数据埋点中,是一个非常重要的事情。

因为如果做不到用户的唯一识别,那凡是涉及到用户的数据都将是错的(比如用户量、新增用户数、活跃用户数等等)。所以建设用户唯一标识,尤为重要。

# 基本概念

设计埋点字段的时候,有两个字段是一定要包括的,即设备ID和用户ID。这两个字段应该纳入通用字段,每个埋点的事件都必须要集成收集。

# 设备ID

使用相应的算法,生成一个设备ID,以唯一识别用户的终端设备。不同终端的设备ID,其生成算法规则不一样,以下列举不同终端的设备ID的生成规则:

# 安卓

安卓系统历经多次升级,对权限控制越来越严格,唯一识别手机的方法也在发生变化。下面整理一下安卓系统适合做设备唯一标识符的几个标识符,以及其特性:

uuid

从表格中看出,IMEI是最适合做设备唯一标识的,奈何获取IMEI需要授予权限且Android 10以后不再开放IMEI的权限。综合起来,安卓系统中,应该按照IMEI ->OAID -> ANDROID_ID的顺序生成设备ID。即先获取IMEI号,获取不到IMEI时获取OAID,获取不到OAID时,再获取ANDROID_ID,然后使用相关算法生成设备ID。

# IOS

苹果系统,可用于识别唯一设备的标识不多,如下图。综合起来,苹果系统生成设备ID的标识符顺序应该是IDFA -> IDFV ->UDID,即先获取IDFA,获取不到在获取IDFV,获取不到IDFV时,再获取UDID,然后使用相关算法生成一个设备ID。

uuid

# Web网站

Web网站,使用cookie_id作为设备ID,并存储在浏览器的cookie中。

# 微信小程序

通常做法使用openid作为设备ID,当然也可以自己生产一个ID,作为设备ID。如果用过openid作为设备ID,需要注意微信小程序的冷启动问题(获取 openid 是一个异步的操作,所以会导致数据上报的时候,可能还没获取到openid,这就是导致设备ID为空)。

# 用户ID

用户ID,即用户在业务产品注册的用户账号。

收集到设备ID和用户ID后,就要想办法将设备ID和用户ID关联起来,也即用户唯一标识建模,详见下文。

# 用户唯一标识建设

设计一个字段,比如就叫distinct_id(设备ID命名为device_id,用户ID命名为user_id)这个字段用于识别唯一用户。凡是统计用户相关的数据时,都以distinct_id作为用户的唯一区别标识。下面,以具体案例进行阐述。

uuid

步骤说明:

  • 小明在一部手机上启动了app。该手机的device_id为x1,此时生成一个dsitinct_id为d1;
  • 小明在这个手机上用账号u1进行登录。此时device_id为x1,user_id为u1,dsitinct_id为d1;
  • 小明继续在这手机上使用app。此时device_id为x1,user_id为u1,dsitinct_id为d1;
  • 小明退出自己的账号,继续使用app。此时仍然device_id为x1,user_id为u1,dsitinct_id为d1;
  • 小明把手机给了小花,小花用自己的账号u2登录app。此时u2去关联x1,因为x1已经与u1关联,故关联失败。所以重新生成一个distinct_id为d2来标识此用户(u2);
  • 小花继续使用app。此时device_id为x1,user_id为u2,dsitinct_id为d2;
  • 小明换了部新手机,使用app。此时device_id为一个新的x2,后台生成一个新的dsitinct_id为d3;
  • 小明在新手机上,使用账号u1登录了app。此时u1去关联x2,因为x2之前没有与账号关联过,所以关联成功,但是u1已经有一个dsitinct_id为d1,所以此时的dsitinct_id仍然为d1;
  • 小明继续在新手机上使用app。此时device_id为x2,user_id为u1,dsitinct_id为d1。

此时三个字段的映射关系为:

uuid

# 后续修复

# 事件字段修复

小明换新手机后,在登录前,系统给分配的dsitinct_id为d3,不符合实际情况,故要将在新手机上登录前的dsitinct_id修复为d1。如下:

uuid

# 映射表修复

  • 删除d3与x2的映射关系
  • 将x2添加到d1的device_id_list字段

uuid

# 参考

  • 数据埋点:用户唯一标识 (opens new window)
技术管理的三个层次
产品设计思路·游戏数据埋点

← 技术管理的三个层次 产品设计思路·游戏数据埋点→

最近更新
01
常用游戏反外挂技术总结
11-27
02
Golang开发实践万字总结
11-11
03
Redis万字总结
10-30
更多文章>
Theme by Vdoing | Copyright © 2011-2022 Ravior | 粤ICP备17060229号-3 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式