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

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

如何区分某个用户就是他这个用户,而不是另一个用户,在数据埋点中,是一个非常重要的事情。因为如果做不到用户的唯一识别,那凡是涉及到用户的数据都将是错的(比如用户量、新增用户数、活跃用户数等等)。所以建设用户唯一标识,尤为重要。

02 基本概念

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

(1)设备ID

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

AndroidApp

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

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

IOS App

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

Web网站

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

微信小程序

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

2)用户ID

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

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

03 用户唯一标识建设

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

步骤说明:

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

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

(1)后续修复

事件字段修复

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

映射表修复

1)删除d3与x2的映射关系

2)将x2添加到d1的device_id_list字段

本文由 @如琴留音 原创发布于人人都是产品经理。未经许可,禁止转载

题图来自Unsplash,基于CC0协议

android获取设备唯一标识_数据埋点:用户唯一标识相关推荐

  1. android设备id完美解决方法,安卓获取渠道名渠道id Android获取设备唯一标识的终极解决方法,防止安卓7.0时崩溃问题...

    一,先说获取渠道名(这里以友盟为例) /* * 4.5.1新加渠道名字段,用来传给后台去统计各个渠道下载量 * */ public static String getSource() { //获取渠道 ...

  2. Android获取设备内存数据信息

    App分配内存 首先,我们通过Android系统提供的方法获取 分配给App本身的运行数据信息,这里我们能获取系统分配给App的最大内存信息(这个数据根据不同的机型可能会不一样),当前已分配内存大小, ...

  3. api可以主动采集用户数据吗_数据埋点采集的那些事儿

    数据采集是数据分析的基础,而埋点是最主要的采集方式.那么数据埋点采集到底都是哪些事呢?我们主要从三个方面来看:什么是埋点,埋点怎么设计,埋点的应用. 一.数据采集以及常见数据问题 1.1数据采集 数据 ...

  4. Android 获取设备号

    前言 最近在对接口的时候 根据后台要求生成设备唯一id 作为key android 获取设备号比较简单 这里记录一下 实现 /*** 获取设备号* @param context* @return*/p ...

  5. Android获取设备状态栏status bar高度的正确姿势

    Android获取设备状态栏高度的正确姿势 正确代码方式: int height = 0;int resourceId = getApplicationContext().getResources() ...

  6. Android获取设备ID号

    Android获取设备ID号 Android有多种方式可以获取设备ID,但是每一种总会有一点限制,为此,整合几种方式在一起,这样就万无一失了 public class DeviceIdFactory ...

  7. Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)

    Android获取设备各项信息(设备id.ip地址.APP应用名称.设备名称.运行商.品牌.型号.分辨率.处理器.国家码.系统语言.网络类型.oaid.android版本.操作系统版本.mac地址.应 ...

  8. Android -- 获取设备硬件信息

    Android – 获取设备硬件信息 通过 Build 获取指定字段信息: 信息 方法 例子 主板 Build.BOARD PAR 系统定制商 Build.BRAND HUAWEI 硬件名称 Buil ...

  9. Android 获取设备唯一标识

    一.背景 项目开发中,多少会遇到这种需求:获得设备唯一标识DeviceId,用于标识一个唯一的设备,做数据精准下发或者数据统计分析. 这类文章,网上有许多资料,例如:使用IMEI.MAC等作为设备标识 ...

最新文章

  1. 让几个div靠外面容器底部对齐
  2. windows7官方原版_从零开始学装系统——微软官方原版windows7详细安装流程
  3. Hibernate中封装session(静态单例模式)
  4. VB循环For的一点启示
  5. android之uniapp自定义基座
  6. Java实现简易文本编辑器
  7. XP安全防护国际评测 360小红伞卡巴排行前三
  8. struts2联网问题
  9. Redis 哨兵模式安装方法
  10. 智能清洁新消费的2021:不止营销造势,还有实力突围
  11. 基于Redis的分布式链家二手房房源数据爬虫系统 毕业设计
  12. Mac系统重置PostgreSQL密码
  13. linux生成xorg,生成xorg.conf文件
  14. SSM框架实现数据库存储图片及读取图片
  15. HTML如何返回上一页?
  16. Android快速入门教程1
  17. 阿里云云栖大会2020----云游戏平台发布(记录)
  18. CDH框架搭建【小白易上手】
  19. 南昌地铁信息化服务器,南昌地铁1号线信息化建设
  20. JavaSE——网络编程

热门文章

  1. 那些永不消逝的进程 (转)
  2. Js的Url中传递中文参数乱码的解决
  3. 【struts2】名为dispatcher的ResultType
  4. 在EXE和DLL中,FindResource的区别
  5. Fckeditor插入视频或视频文件
  6. 速攻蓝牙NRF52832系列教程之方法篇(三)
  7. 如何用jlink+jflash烧写stm32f103CB的option bytes 和程序
  8. stm32 GPIO模式
  9. ESP8266固件的下载
  10. C++ 类中的static成员的初始化