「JPush」设备唯一标识 registrationID 您所在的位置:网站首页 afreecatvid注册id 「JPush」设备唯一标识 registrationID

「JPush」设备唯一标识 registrationID

2024-01-30 09:11| 来源: 网络整理| 查看: 265

本文将从 registrationID 的定义、用途、获取方法、重复原因、变化原因几方面详细解读极光的唯一 ID。

一、详细定义

详细定义,registrationID 如何产生的?点我查看

有效的 RegistrationID 长度为 11 或 19 个字节,其中第一位有效字符 [0,1],第二位有效字符 [0-9a],第三位有效字符 [0-2],剩余位有效字符 [0-9a-f]。registrationID 只能在客户端集成后取到,不可以自行在服务端生成

二、用途 可用来辨别 Android & iOS 设备:从左数,第三位代表平台。

0 代表 Android

1 代表 iOS

推送时可以 使用 RegistrationID 进行一对一推送

在排查「消息收不到」问题时必须给官方人员提供的信息

服务端调用 API 给设备设置别名 / 标签需要传的值

因此我们建议开发者在客户端调用 API 获取到 registrationID 后上传到开发者服务器保存起来,以备使用。

三、如何获取3.1 Android 设备

3.3.0 版本之前,在 Androidmanifest 中配置自定义广播接收器,在自定义的 Receiver 里监听 Action - cn.jpush.android.intent.REGISTRATION ,SDK 初次注册成功后,可以取到该值(该广播只有一次)。

3.3.0 版本之后,使用新的回调方式,监听 onRegister 回调(仅在安装 App 初始化 SDK 成功后回调一次)

注册成功后,通过函数 public static String getRegistrationID(Context context) 获取,可以多次调用获取。

3.2 iOS 设备 监听通知事件 extern NSString * const kJPFNetworkDidRegisterNotification; // 注册成功 extern NSString *const kJPFNetworkFailedRegisterNotification; //注册失败 extern NSString * const kJPFNetworkDidLoginNotification; // 登录成功

在添加注册 kJPFNetworkDidLoginNotification 通知的方法里可以获取 ID

调用 [registrationIDCompletionHandler:] 方法,通过 completionHandler 获取 [JPUSHService registrationIDCompletionHandler:^(int resCode, NSString *registrationID) { NSLog(@"resCode : %d,registrationID: %@",resCode,registrationID); }]; 3.3 注意事项

registrationID 只有在初始化成功之后才能取到,初始化需要时间,所以不要在初始化之后马上调 API 获取。

如上说明,Android 与 iOS 在监听到相关广播、通知事件后代表初始化已成功,可以选择调用 API 去主动获取。

在某些插件中,如果无法把握初始化成功的时机,就多次调用 API 获取,直到获取成功为止。

四、为什么不同 Android 设备取到了相同的 ID4.1 排查方案

检查设备的 IMEI 、 serial_number 、Mac 地址、device_id值是否相同

当 device_id,imei + mac,serial_number 这三个信息有任意一个是相同的时候,就会取到一样的 registrationID 值。

4.2 解决办法

使设备的 IMEI 、 serial_number 、device_id 均不相同(serial_number 是新版 SDK 版本新增的,请升级 SDK )

重烧 IMEI ,刷机或者进行如下步骤:

步骤一:把这个文件清掉:Environment.getExternalStorageDirectory().getPath() + “/data/.push_deviceid”;

步骤二:同步清除掉 setting 里面的,方法如下:Settings.System.putString(context.getContentResolver(), “devcie_id_generated”, “”);

步骤三:还有把缓存也清理下;

然后再重装 App。

第二步操作是系统方法,如果操作未果,则说明你使用的是自己的定制设备,导出你的数据库信息查看一下 device ID 信息,不要将该信息固定为同一个值。

如果上述方案无法解决,给官方提供如下信息,我们来分析下是否有别的方案处理

提供你的 registrationID、不同设备注册取到同一个 registrationID 的具体时间点

如果能取到 IMEI、serial_number 、Mac 地址、device_id 等值,有值一样,但由于定制系统等原因无法自己将值设为不一样时,则提供该值说明情况。

如果取不到这些值,请说明你的设备情况,如定制设备、电视盒子等等。

SDK 版本号(JPush 和 JCore)

五、为什么不同的 iOS 设备取到了相同的 ID5.1 排查方案

检查给极光传递的 devicetoken 和 IDFA 值是否一样。一般直接从 iOS API 取到的值是不一样的,但可能你们自己固定给极光传了一样的值。

使用的 SDK 版本号是否过低

5.2 解决办法

直接使用官方提供的初始化代码,不要自定义传递 devicetoken 和 IDFA 值

升级 SDK 版本至 3.2.8 以上

如果上述方案无法解决,给官方提供如下信息,我们来分析下是否有别的方案处理

提供你的 registrationID、不同设备注册取到同一个 registrationID 的具体时间点

你自己取到的设备的 devicetoken 和 IDFA 值

SDK 版本号(JPush 和 JCore)

六、同一设备的 ID 值是否会产生变化6.1 Android 设备

一般情况下同一个 Android 设备同一个 App 卸载重装后的 RegistrationID 是一样的,可能会产生变化的操作如下:

清除应用缓存

双卡双待的,更换卡槽

6.2 iOS 设备 卸载重装

iOS 9 及以下系统一般是不会改变的

iOS 9 以上系统,由于 Apple 在 App 卸载重装后,会给一个新的 token,所以对应的 RegistrationID 也会改变。

如果使用 IDFA 后再卸载重装,在 IDFA 不变的时候 registrationID 不会变化。

长时间关闭推送后又打开,也可能导致 token 变化。

如果对你有帮助,点个赞呗 ლ(╹◡╹ლ)

不吹不黑,关注「常见问题」专栏可以解决你 90% 的问题 (ノ◕ω◕)ノଘ_ଘ

如果还有你想知道的问题没有总结方案,来评论区跟我交流交流吖



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有