android获取设备唯一标识_数据埋点:用户唯一标识
用户唯一标识,是用户唯一的身份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作为用户的唯一区别标识。下面,以具体案例进行阐述。
步骤说明:
- 小明在一部手机上启动了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。
此时三个字段的映射关系为:
(1)后续修复
事件字段修复
小明换新手机后,在登录前,系统给分配的dsitinct_id为d3,不符合实际情况,故要将在新手机上登录前的dsitinct_id修复为d1。如下:
映射表修复
1)删除d3与x2的映射关系
2)将x2添加到d1的device_id_list字段
本文由 @如琴留音 原创发布于人人都是产品经理。未经许可,禁止转载
题图来自Unsplash,基于CC0协议
android获取设备唯一标识_数据埋点:用户唯一标识相关推荐
- android设备id完美解决方法,安卓获取渠道名渠道id Android获取设备唯一标识的终极解决方法,防止安卓7.0时崩溃问题...
一,先说获取渠道名(这里以友盟为例) /* * 4.5.1新加渠道名字段,用来传给后台去统计各个渠道下载量 * */ public static String getSource() { //获取渠道 ...
- Android获取设备内存数据信息
App分配内存 首先,我们通过Android系统提供的方法获取 分配给App本身的运行数据信息,这里我们能获取系统分配给App的最大内存信息(这个数据根据不同的机型可能会不一样),当前已分配内存大小, ...
- api可以主动采集用户数据吗_数据埋点采集的那些事儿
数据采集是数据分析的基础,而埋点是最主要的采集方式.那么数据埋点采集到底都是哪些事呢?我们主要从三个方面来看:什么是埋点,埋点怎么设计,埋点的应用. 一.数据采集以及常见数据问题 1.1数据采集 数据 ...
- Android 获取设备号
前言 最近在对接口的时候 根据后台要求生成设备唯一id 作为key android 获取设备号比较简单 这里记录一下 实现 /*** 获取设备号* @param context* @return*/p ...
- Android获取设备状态栏status bar高度的正确姿势
Android获取设备状态栏高度的正确姿势 正确代码方式: int height = 0;int resourceId = getApplicationContext().getResources() ...
- Android获取设备ID号
Android获取设备ID号 Android有多种方式可以获取设备ID,但是每一种总会有一点限制,为此,整合几种方式在一起,这样就万无一失了 public class DeviceIdFactory ...
- Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)
Android获取设备各项信息(设备id.ip地址.APP应用名称.设备名称.运行商.品牌.型号.分辨率.处理器.国家码.系统语言.网络类型.oaid.android版本.操作系统版本.mac地址.应 ...
- Android -- 获取设备硬件信息
Android – 获取设备硬件信息 通过 Build 获取指定字段信息: 信息 方法 例子 主板 Build.BOARD PAR 系统定制商 Build.BRAND HUAWEI 硬件名称 Buil ...
- Android 获取设备唯一标识
一.背景 项目开发中,多少会遇到这种需求:获得设备唯一标识DeviceId,用于标识一个唯一的设备,做数据精准下发或者数据统计分析. 这类文章,网上有许多资料,例如:使用IMEI.MAC等作为设备标识 ...
最新文章
- 让几个div靠外面容器底部对齐
- windows7官方原版_从零开始学装系统——微软官方原版windows7详细安装流程
- Hibernate中封装session(静态单例模式)
- VB循环For的一点启示
- android之uniapp自定义基座
- Java实现简易文本编辑器
- XP安全防护国际评测 360小红伞卡巴排行前三
- struts2联网问题
- Redis 哨兵模式安装方法
- 智能清洁新消费的2021:不止营销造势,还有实力突围
- 基于Redis的分布式链家二手房房源数据爬虫系统 毕业设计
- Mac系统重置PostgreSQL密码
- linux生成xorg,生成xorg.conf文件
- SSM框架实现数据库存储图片及读取图片
- HTML如何返回上一页?
- Android快速入门教程1
- 阿里云云栖大会2020----云游戏平台发布(记录)
- CDH框架搭建【小白易上手】
- 南昌地铁信息化服务器,南昌地铁1号线信息化建设
- JavaSE——网络编程