移动推送的设备标识说明(UTDID,DeviceID,Token)

UTDID

UTDID是由应用生成的软件级别的设备ID。UTDID在第一次调用的时候由特定算法生成,并持久化存储到移动设备的存储组件中。应用再次使用 UTDID 的时候,从系统存储组件中获取,以保证唯一性。利用系统中的公共存储组件,能够保证系统中不同的应用之间可以共享UTDID。

  • 生成:在第一次调用的时候由特定算法生成(Androidid、IMEI、随机数、时间戳、版本号等等经过加密、截断、模糊后得到的随机数,基于隐私考虑新版SDK不会获取IMEI)。

  • 存储:持久化在系统的Setting和存储卡以及应用的私有目录,三份值一样。

  • 更新:卸载重装和覆盖安装app,清除缓存,恢复出厂设置,刷ROM都有可能导致UTDID值改变。存储的值被抹去后,app下次调用get方法会自动重新生成新的UTDID(对于EMAS的推送SDK来说,开发者不需要调用这个get方法,PushSDK会自动调用)。

DeviceID(EMAS对用户手机的唯一标识)

  • 生成:SDK注册时会上报UTDID到服务端, 由服务端根据UTDID生成唯一的设备ID,即DeviceID并返回给app端。

  • 更新:由于生成设备ID是依赖UTDID生成的,所以app的卸载,重装,覆盖安装,清除缓存,恢复出厂设置,刷ROM也都有可能导致设备ID值改变。

  • 存储:设备ID会同时存储在EMAS服务器和app端侧。

  • 获取:设备ID只有在SDK注册成功后才能获取到,否则返回null:

    • logcat获取:SDK开启debug模式可以在logcat中搜索以下日志: Got deviceId from remote server

    • 代码中获取:String deviceId = PushServiceFactory.getCloudPushService().getDeviceId();

Token(厂商通道对设备的唯一标识)

Token是厂商通道对设备的唯一标识,不同厂商通道有不同叫法,华为、荣耀、FCM/GCM通道叫Token,小米、OPPO、vivo叫RegId,魅族叫PushId,这里统称为token。

如果开发者集成了厂商通道,并且EMAS的PushSDK注册成功了,则会自动注册厂商通道SDK,注册成功后得到token并上报至EMAS服务器,EMAS将会一对一绑定DeviceID和Token并保存。开发者无需处理Token逻辑,EMAS会保存并更新Token。

推送管理

开发者在推送时不需要关注UTDID和Token,EMAS会自动处理相应关系,对于EMAS来说,推送系统暴露给开发者的唯一设备ID是DeviceID。推送时选择的推送方式,按照标签推送,按别名推送,按账号推送等推送请求到达EMAS服务器后都是最终解析成DeviceID之后下发推送请求的。

DeviceID的过期处理

如果一个安卓设备90天没有上线记录,iOS设备24个月没有上线记录,EMAS则会认为此设备ID已经失效,将会自动清除保存在服务器的设备ID。

SDK注册过程

更多信息

过期设备ID不会增加客户的计费,因为EMAS推送计费是需要app端侧明确返回arrive回执才认为通知或消息到达的。但是会影响到达率,在数据面看起来是推送量变大了,实际上推送的设备数量中会不可避免的包含一部分已失效的设备ID,这部分设备ID除了影响到达率计算之外不会产生任何计费问题。

适用于

  • 移动推送