定义

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

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

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

    • 0 代表 Android
    • 1 代表 iOS

建议

在客户端监听广播,或调用接口 获取到 RegistrationID,然后将其保存到己方服务器,以备使用!
「如何顺利的获取 RegistrationID 」

  • 推送时可以 使用 RegistrationID 进行一对一推送
  • 有「消息收不到」疑问时必须提供的信息
  • 服务端调用 API 给设备设置别名 / 标签需要传的值

异常:Android 不同的设备却获取到相同的 RegistrationID

  • 设备的 IMEI 、 serial_number 、deviceID是否相同
    *(后台存储 uid 的方式是根据 appkey_dvcid->uid ,appkey_imei_mac->uid, appkey_serial->uid 这三种存储方式,左边的这三种key只要检测到一个匹配,就会把存的 uid 返回给前端)

  • 如果 IMEI一样,当取到的 mac 地址又为空,那就有可能很多设备拿到相同 RegistrationID 值

    解决办法:

  • 使设备的 IMEI 、serial_number 和 deviceID 均不一样

  • (serial_number 是新 SDK 版本新增的,旧版本 SDK 中未用作判断)

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

    • 步骤一:把这个文件清掉:Environment.getExternalStorageDirectory().getPath() + "/data/.push_deviceid";
    • 步骤二:同步清除掉 setting 里面的,方法如下:Settings.System.putString(context.getContentResolver(), “devcie_id_generated”, “”);
    • 步骤三:还有把缓存也清理下;
    • 然后再重装 App。
  • 上述操作是系统方法,如果操作未果,则说明你使用的是自己的定制设备,导出你的数据库信息查看一下 device ID 信息,不要将该信息固定为同一个值。

registrationID变化的可能原因

  1. Android 可能会产生 RegistrationID 变化的操作(一般情况下同一个设备同一个 App 卸载重装的 RegistrationID 是一样的)

    • 清除应用缓存
    • 双卡双待的,更换卡槽
  2. iOS 设备的 RegistrationID 发生变化,如果不使用 IDFA

    • iOS 9 及以下系统一般是不会改变的
    • iOS 9 以上系统,由于 Apple 在 App 卸载重装后,会给一个新的 token,所以对应的 RegistrationID 也会改变。
      • 长时间关闭推送后又打开,也可能导致 token 变化。

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

点这里返回常见问题目录,不吹不黑,收藏本帖可以解决你 90% 的问题 (ノ◕ω◕)ノଘ_ଘ