RegistrationID 精确对点推送

随着开发者对 JPush 的使用越来越深入,不少开发者越来越想要非常精确地定位到每一个设备安装(应用)。为此,JPush 开放了基于 RegistrationID 推送的功能。

JPush Android SDK r1.6.0 更新,主要增加了对 RegistrationID 的支持;并且服务器端 Push API 也新增此支持。另外,也改进了统计分析相关功能,以便 JPush 可以基于更完善的统计来改进推送效果。

JPush RegistrationID 是这个版本 SDK 引入的一个新概念,它唯一地标识当前这个应用安装在这个设备上。或者说,相当于是 JPush SDK 内部的用户ID。

开发者可通过 App 新安装后 JPush SDK 内部注册成功时发出的 Broadcast 来得到到这个 ID,也可以通过调用 JPushInterface.getRegistrationID() 方法来得到这个 ID。

使用上,开发者取得 RegistrationID 后,上传到自己的服务器端。之后就可以在自己的服务器调基于这个 RegistrationID 来进行消息推送

JPush 之前一直支持基于 Alias (别名)的点对点推送方式,那为什么还要开放 RegistrationID 的点对点推送方式呢?与 Alias 相比,RegistrationID 的有什么不同,或者说优势、劣势呢?

本质上 RegistrationID 与 Alias 类似,其目的都是唯一地定位到应用安装在一个特定的设备上。而本质的不同在于,Alias 是把映射关系保存到 JPush 的服务器上,而 RegistrationID 需要把映射关系保存到开发者业务服务器上。这个本质的不同,决定了其特点:

  1. Alias 有个 SDK 端设置绑定关系的问题。这个设置,有可能会失败,App 需要有处理这个暂时失败的逻辑。另外,Alias 是不限制绑定到多个设备的,这样要精确地定位到一个设备就不好控制。总而言之,这个绑定关系是没有那么精确一点的。
  2. RegistrationID 一旦生成,意味着这个设备的安装一定存在。App 把这个 RegistrationID 保存到自己的业务服务器上,可以非常精确地定位到这台设备(安装这个应用)。这样开发者的内部业务可以做比较复杂的用户关联关系。

或者说,使用 Alias 开发者更简单、方便。但使用 RegistrationID 更方便于精确地定位用户。

JPush iOS SDK 将于稍后发布的 SDK 版本支持 RegistrationID 推送。

Android SDK 具体的更新说明,请参考最新更新页面。RegistrationID 相关的文档有:获取 RegistrationID API接收推送消息 Receiver 里关于从广播接受 RegistrationID 部分;Push API v2 里关于 RegistrationID 推送参数的部分。统计分析功能相关的文档有:统计分析 API (Android SDK)。

 

RegistrationID 精确对点推送》上有17条评论

    1. javenjaven 文章作者

      用户直接卸载了应用,服务器端 RegistrationID 不会失效。 也就是说,你推送可以保存离线消息,短时间内重新安装了还可以收到消息。

      用户过了一定的时间比如一个月后还没有 online 过,会被 JPush 认为是无效用户。

    1. javenjaven 文章作者

      是的,RegistrationID 是设备级别的概念,不受你应用层的影响。

      你自己的用户使用不同用户登录时,需要重新与这个 registrationID 绑定。

  1. 爱妃快来

    现在存在部分设备接受不到registrationIID,这个是怎么回事,问题主要集中在ios8.1以上。经测试,iOS7.1可以接受到,iOS8.0也可以,但是8.3及8.4不能。

  2. wukong

    请问我广播或者通过RegistrationID推送了消息,但是用户这边卸载了应用,请问后续广播如何控制不给此用户推送?因为如果用户再次安装登录,会收到很多以前的通知消息。

    1. javenjaven 文章作者

      推送有一个时效的问题,默认是 1 天,即:推送发生后 1 天内,如果用户再次上线(可能卸载了再次安装),会被推送到。

      如果你特别在意你所说的问题,建议用推送时效来解决。

      否则,你所说的问题,是存在的。

  3. 王桂敏

    1.registrationID是在极光初始化就生成对么,只要调用getregistrationID方法就可以获取的对吧
    2.在同一设备上,切换账号的时候,registrationID如何重新生成,什么时候生成,怎么生成?

    1. Javen FangJaven Fang 文章作者

      1. 是的,是极光初始化时生成的。 正常情况下调用 getRegistrationID 可以取到。但有个例外:有可能你调用这个方法时,极光SDK初始化还未完成。

      2. 你说的帐号,是你的 App 帐号的,与极光 SDK 内部状态无关啊。 还是同一个 RegistrationID 啊。

    1. Javen FangJaven Fang 文章作者

      啊,这是一个比较一般的编程问题哦。

      我理解大多数时候,你自己的 App 服务器提供一个 HTTP API,用这个 HTTP API 上传就可以。

  4. dapeng

    请问:我可以收到推送,但是获取到的registrationID为什么是空啊, 代码如下 //如何获取到 RegistrationID
    NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
    [defaultCenter addObserver:self
    selector:@selector(networkDidLogin:)
    name:kJPFNetworkDidLoginNotification
    object:nil];

    – (void)networkDidLogin:(NSNotification *)notification {
    MyLog(@”已登录”);
    NSString *registrationID = [JPUSHService registrationID];

    }

评论已关闭。