事件发布及订阅

用户可以通过事件发布及订阅,来实现"发布-订阅"的设计模式编程方法。可应用于订阅指定用户在线状态、用户个性化信息订阅、逻辑异步流处理等场景。
目前,仅开放类型type=1的事件订阅,用户可自定义value值(一个value对应一个事件状态,1-9999为云信预定义值,开发者不可使用)来实现自身业务需求。
大致流程为:A订阅B——>B发布某一特定的事件——>A监听来自B的该事件状态变更——>按照自身业务逻辑解析处理。
注意:云信系统内置的在线状态事件(type=1,value=1/2/3)无需主动发布,这一工作将由云信服务器托管。

订阅事件

向特定用户订阅事件。无论是内置的在线状态事件或是自定义的事件,都需要通过该接口发起订阅。每个帐号最大有效订阅帐号不超过 3000 个。

多端订阅(指同一账号在其他类型客户端订阅)会覆盖这个订阅有效期,所以建议开发者各端订阅时长保持一致。在30秒内对同一账号同一事件订阅,即使设置为立即同步服务的也不会下发目标事件。

示例代码

  nim.subscribeEvent({
      type: 1,
      accounts: ['cs3', 'cs4'],
      subscribeTime: 70,
      sync: true,
      done: subscribeEventDone
  });
  function subscribeEventDone(error, obj) {
      console.log('订阅事件' + (!error?'成功':'失败'), error, obj);
  }

参数解释

取消订阅

按账号取消订阅

取消自己针对指定账号的订阅事件。

示例代码

  nim.unSubscribeEventsByAccounts({
      type: 1,
      accounts: ['cs3'],
      done: unSubscribeEventDone
  });
  function unSubscribeEventDone(error, obj) {
      console.log('取消订阅事件' + (!error?'成功':'失败'), error, obj);
  }

参数解释

按事件取消订阅

示例代码

  nim.unSubscribeEventsByType({
      type: 1,
      done: unSubscribeEventDone
  });
  function unSubscribeEventDone(error, obj) {
      console.log('取消订阅事件' + (!error?'成功':'失败'), error, obj);
  }

参数解释

发布事件

向订阅者发布事件。若云信系统内置的在线状态无法满足应用需求或者开发者需要一些单独的自定义事件时,可以使用该接口来发布。

示例代码

  nim.publishEvent({
    type: 1,   //传入1即可。
    value: 10001, //value为10000以上(1-9999为云信预定义值,开发者不可使用)
    custom: 'hello world',
    vaildTime: 60,
    sync: false,
    done: publishEventDone
  });
  function publishEventDone(error, obj) {
    console.log('发布事件' + (!error?'成功':'失败'), error, obj);
  }

参数解释

监听所订阅的事件

当订阅的事件从云信服务器下推时,可从onPushEvents回调监听。

示例代码

  var nim = NIM.getInstance({
    onpushevents: onPushEvents
  });
  function onPushEvents(param) {
    console.log('订阅事件', param.msgEvents);
  }

参数解释

按账号获取订阅关系

获取自己针对指定账号的事件订阅关系

示例代码

  nim.querySubscribeEventsByAccounts({
      type: 1,
      accounts: ['cs3'],
      done: querySubscribeEventDone
  });
  function querySubscribeEventDone(error, obj) {
      console.log('获取订阅列表' + (!error?'成功':'失败'), error, obj);
  }

参数解释

在线状态事件

在线状态(在线、异常断开、登出)为云信系统内置事件,只需向销售发起申请,申请成功后,即可使用。无需主动发布事件状态。典型的应用场景为A订阅了B的在线状态事件,则当A登录成功后,可以即时获取B此时的在线状态:在线、异常断开或是登出状态。

注意事项:

如前所述,在线状态事件为云信系统内置事件,无需开发者主动发布。在A订阅了B的type=1事件后,当A登录时,若B此时在线,则会收到对应的事件;若后续B再登录上线时,且A也在线,则依旧可以监听到。