首页 > 其他分享 >移动端设备唯一ID的生成规则

移动端设备唯一ID的生成规则

时间:2024-10-15 11:01:05浏览次数:7  
标签:RegistrationID 极光 App iOS 生成 IDFA 规则 ID 设备

对于 App 云平台系统,如何唯一地识别移动设备是非常重要的。否则,每次用户在设备上卸载掉应用再重新安装,后端系统只能把这个用户当作一个全新的用户了。

Android 上识别设备的唯一性,因为这个圈太乱,所以设备本身的任何标识都是无法直接用作设备唯一标识的。iOS 是系统强力限制被唯一识别的,目前唯一可以部分满足条件是 IDFA,但需要你的 App 本身的确嵌入了广告。

很多开发者使用极光推送时,都有这个疑问:极光推送是如何来做设备的唯一性识别的。本文解析极光推送如何尽可能地来唯一识别设备。

极光推送对安装在设备上的 App 使用 RegistrationID 作为标识。极光推送要『尽可能』确保设备的唯一性,就是要使得 RegistrationID 尽可能唯一。

RegistrationID 的定义

关于 RegistrationID 极光官方文档有如下的定义:

集成了 JPush SDK 的应用程序在第一次 App 启动后,成功注册到 JPush 服务器时,JPush 服务器会给客户端返回唯一的该设备的标识 - RegistrationID。JPush SDK 会以广播的形式发送 RegistrationID 到应用程序。
有了这个标识,App 编程可以把这个 RegistrationID 保存到自己的应用服务器上,然后就可以根据 RegistrationID 来向设备推送消息或者通知。

RegistrationID 变化可能性

如果 App 不卸载,是直接覆盖安装,Android, iOS 上 RegistrationID 的值都不会变化。

如果 App 是卸载之后再次安装:

Android 上 RegistrationID 基本不会变;
iOS 上如果启用了 IDFA 变化可能性不大,如果未启用 IDFA 则每次安装 RegistrationID 都会变;

RegistrationID 生成规则解析

Android 平台

Android 上因为国内存在大量山寨设备的原因,正常的 IMEI, Mac Address, AndroidID 这些可以考虑用作唯一标识的值,都是不可以用的,因为这些值在一批设备中可能都是同一个值。

极光的基本思路是:

生成一个 DeviceID 保存到 Settings, External Storage。依赖本地存储,应用被卸载后重新安装这些存储里的 DeviceID 还在的话,就是同一个设备。这一条理论上解决 90% 的不变性问题。
DeviceID 之外增加补充规则:综合根据 IMEI, MAC Address, AndroidID, Serial_Number 这几个值来判断,是否可能是老设备。
具体的逻辑细节,也是根据实际运行情况,以及收集到的反馈不断调整的,大多数逻辑可在服务器端调整。

iOS平台

鉴于 iOS 系统设计上限制设备唯一标识,所以极光一直使用 Device Token 作为标识,也因为极光推送本身就是需要 Device Token 这个值才可能运作的。

iOS 9 版本之后,每次卸载后重装都会导致 Device Token 变化,所以对于极光后台来说,都只能被识别为新用户。

极光 SDK 新版本增加了 IDFA 选项,在集成初始化 SDK 时可选把 IDFA 这个值设置进来,这样极光后台就优先根据 IDFA 值来识别用户,从有一定的可能性应用被卸载后重装还能识别回老设备。

IDFA 是广告标识符,是 iOS 专门为广告跟踪唯一地识别用户而设计的。在 iOS 设备上,设备 -> 隐私 -> 广告这个页面,有一个设置项:限制广告跟踪。默认是未选中状态的,即是关闭状态,是不限制的。用户可以选中,从而限制广告跟踪。设置项之外还有一个按钮:还原广告标识符...。如果用户点击了这个按钮,则 IDFA 值会变化。

默认的情况下,没有限制广告跟踪,可以取到 IDFA 这个值。并且用户未点击『还原广告标识』时,这个值是不会变的。这样就达到了唯一地标识设备、跟踪到用户的目标。

但是,但是,请一定留意,IDFA 并不是一定可以启用的,是需要你的 App 的确有广告功能才可以用的,否则 Apple 在上架审核时有可能发现从而拒绝上架。

关于苹果 App 上架对 IDFA 的要求,可参考这里的说明:The Advertising Identifier (IDFA)

高级使用建议

因为 RegistrationID 是 JPush SDK 注册完成之后才得到的,所以调用 SDK API 来获取 RegistrationID 的值时需要稍注意,不是总能够立即得到。

比如 iOS 上建议在监听到 kJPFNetworkDidLoginNotification 这个通知后的代码里,来获取 RegistrationID 的值。

 

「JPush」设备唯一标识 registrationID-极光社区 (jiguang.cn)

标签:RegistrationID,极光,App,iOS,生成,IDFA,规则,ID,设备
From: https://www.cnblogs.com/cnhk19/p/18467008

相关文章

  • 神经网络之卷积篇:详解残差网络(ResNets)(Residual Networks (ResNets))
    详解残差网络ResNets是由残差块(Residualblock)构建的,首先解释一下什么是残差块。这是一个两层神经网络,在\(L\)层进行激活,得到\(a^{\left\lbrackl+1\right\rbrack}\),再次进行激活,两层之后得到\(a^{\left\lbrackl+2\right\rbrack}\)。计算过程是从\(a^{[l]}\)开始,首先进......
  • DevExpress WPF中文教程:Data Grid(数据网格)实现细节一览
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。无论是Office办公软件的衍伸产品,还是以数据为中心......
  • dotnet独立打包 如何设置崩溃自动生成dump
    在.NET应用程序中,可以通过设置环境变量来实现崩溃时自动生成dump文件。以下是如何设置环境变量以及相关的代码示例:设置环境变量:在Windows系统中,可以通过以下步骤设置环境变量:打开“系统属性”->“高级”->“环境变量”。在“系统变量”下,点击“新建”,添加以下变量:变量名:C......
  • H3C UniServer R4900 G5创建 RAID卷【图解】
    正常开机,弹出选择按键选择Esc2.进入此页面下拉可以换成中文语言(能看懂英文的忽略)3.开启RAID功能,选择高级→平台配置→PCH配置→PCHSATA配置→将配置SATA为改成RAID,然后F4保存并重启4.重启之后继续选择Esc进入BIOS→选择高级→动态设备配置菜单→选择自己的阵列→......
  • IDEA配置maven主目录(maven home)不生效
    原文链接:IDEA配置maven主目录(mavenhome)不生效–每天进步一点点(longkui.site)0.背景使用IDEA搭建SpringBoot项目,搭建完成后开始报错,报错信息如下:java.lang.RuntimeException:java.lang.RuntimeException:org.codehaus.plexus.component.repository.exception.Component......
  • Android开发滑动悬停效果
    Android开发滑动悬停效果Android开发滑动悬停效果,有点难度,但源码中我已经加入相应注释,你只要修改布局即可。很常见的需求一、思路:自定义悬停控件LetterStickyNavLayout,它是继承LinearLayout二、效果图:看视频更直观点:Android开发教程实战案例源码分享-滑动悬停效......
  • 几种常用大模型工具生成基于hi3861的OpenHarmony代码的尝试
    引言最近在上智能物联网的课程,讲授基于hi3861的OpenHarmony编程,所以尝试一下使用大模型工具生成相关的代码,看看效果如何。提问的方式比较简单粗暴:在OpenHarmony的hi3861平台上,如何编程访问https的网站?KimiKimi是我用得最多的平台,它经过文献搜索之后给出如下答案。 ......
  • RAID 矩阵
    在架构设计中,RAID矩阵(RAIDLog)是一个用于项目管理和风险管理的工具,帮助团队有效管理和跟踪项目中可能影响成功交付的关键因素。与存储技术中的RAID不同,这里的RAID是一个缩写,代表:R:Risk(风险)A:Assumption(假设)I:Issue(问题)D:Dependency(依赖)RAID矩阵的含义R–Risk......
  • 高可用之限流-05-slide window 滑动窗口
    限流系列开源组件rate-limit:限流高可用之限流-01-入门介绍高可用之限流-02-如何设计限流框架高可用之限流-03-Semaphore信号量做限流高可用之限流-04-fixedwindow固定窗口高可用之限流-05-slidewindow滑动窗口高可用之限流-06-slidewindow滑动窗口sentinel源码......
  • IDEA如何用maven打包(界面和命令两种方式)
    前言我们在使用IDEA开发时,如果是springboot项目的话,一般是用maven来管理我们的依赖的。然后,当我们开发完成之后,就需要打包部署了。 那么,我们应该如何打包呢?如何打包(jar包)首先,我们点击右侧的maven侧边栏,然后点击里面的【clean】,先将以前的包清理掉。然后,我们等待clean完成......