通知

通知包含在线通知、离线通知、同步通知、其他通知,开发者可以通过SignallingServiceObserver 来注册通知观察者从而获取通知。

在线通知


    /**
     * 注册/注销 在线通知事件观察者
     * 回调返回参数为RoomCommonEvent的子类对象 ,如果用户想获取相应子类对象中的特殊属性,可以根据事件类型{@link ChannelCommonEvent#getEventType()}进行强制类型转换。<br/>
     * <br/>
     * 事件类型{@link SignallingEventType }与 ChannelCommonEvent 子类的对应关系如下:<br/>
     * {@link SignallingEventType#CLOSE} 对应于{@link ChannelCloseEvent}<br/>
     * {@link SignallingEventType#JOIN} 对应于{@link UserJoinEvent}<br/>
     * {@link SignallingEventType#INVITE} 对应于{@link InvitedEvent}<br/>
     * {@link SignallingEventType#CANCEL_INVITE} 对应于{@link CanceledInviteEvent}<br/>
     * {@link SignallingEventType#REJECT} 对应于{@link InviteAckEvent}<br/>
     * {@link SignallingEventType#ACCEPT} 对应于{@link InviteAckEvent}<br/>
     * {@link SignallingEventType#LEAVE} 对应于{@link UserLeaveEvent}<br/>
     * {@link SignallingEventType#CONTROL} 对应于{@link ControlEvent}<br/>
     *
     * @param observer 观察者 ,参数为在线通知事件
     * @param register register true为注册,false为注销
     */
    void observeOnlineNotification(Observer<ChannelCommonEvent> observer, boolean register);
    // 在线通知事件观察者
   onlineObserver = new Observer<ChannelCommonEvent>() {
        @Override
        public void onEvent(ChannelCommonEvent event) {
            SignallingEventType eventType = event.getEventType();

            switch (eventType) {
                case CLOSE:
                    ChannelCloseEvent channelCloseEvent = (ChannelCloseEvent) event;
                    break;
                case JOIN:
                    UserJoinEvent userJoinEvent = (UserJoinEvent) event;
                    break;
                case INVITE:
                    InvitedEvent invitedEvent = (InvitedEvent) event;
                    break;
                case CANCEL_INVITE:
                    CanceledInviteEvent canceledInviteEvent = (CanceledInviteEvent) event;
                    break;
                case REJECT:
                case ACCEPT:
                    InviteAckEvent ackEvent = (InviteAckEvent) event;
                    break;
                case LEAVE:
                    UserLeaveEvent userLeaveEvent= (UserLeaveEvent) event;
                    break;
                case CONTROL:
                    ControlEvent controlEvent = (ControlEvent) event;
                    break;
            }
        }
    };

//注册
NIMClient.getService(SignallingServiceObserver.class).observeOnlineNotification(onlineObserver, true);

离线通知

当用户登录时,会收到离线期间的所有已经的离线通知(通知默认不离线,需要发送方做相应的配置)。

  /**
     * 注册/注销 离线通知事件观察者,在用户登录后sdk 会去服务器同步用户离线期间发生的各种通知,并以列表的形式返回。列表的排序方式为时间递增排序{@link ChannelCommonEvent#getTime()}<br/><br/>
     * 回调返回列表中的元素为RoomCommonEvent的子类对象 ,如果用户想获取相应子类对象中的特殊属性,可以根据事件类型{@link ChannelCommonEvent#getEventType()}进行强制类型转换。<br/><br/>
     * 事件类型{@link SignallingEventType }与 ChannelCommonEvent 子类的对应关系如下:<br/>
     * {@link SignallingEventType#CLOSE} 对应于{@link ChannelCloseEvent}<br/>
     * {@link SignallingEventType#JOIN} 对应于{@link UserJoinEvent}<br/>
     * {@link SignallingEventType#INVITE} 对应于{@link InvitedEvent}<br/>
     * {@link SignallingEventType#CANCEL_INVITE} 对应于{@link CanceledInviteEvent}<br/>
     * {@link SignallingEventType#REJECT} 对应于{@link InviteAckEvent}<br/>
     * {@link SignallingEventType#ACCEPT} 对应于{@link InviteAckEvent}<br/>
     * {@link SignallingEventType#LEAVE} 对应于{@link UserLeaveEvent}<br/>
     *
     * @param observer 观察者 ,参数为离线通知事件列表
     * @param register register true为注册,false为注销
     */
    void observeOfflineNotification(Observer<ArrayList<ChannelCommonEvent>> observer, boolean register);

注意:登录后第一次注册此回调时,如果sdk已经获取到了相应的离线通知列表,会立即回调一次(仅此一次)。

// 离线事件观察者
    private Observer<ArrayList<ChannelCommonEvent>> offlineObserver = new Observer<ArrayList<ChannelCommonEvent>>() {
        @Override
        public void onEvent(ArrayList<ChannelCommonEvent> list) {
            for (ChannelCommonEvent event : list) {
                SignallingEventType eventType = event.getEventType();
                switch (eventType) {
                    case CLOSE:
                        ChannelCloseEvent channelCloseEvent = (ChannelCloseEvent) event;
                        break;
                    case JOIN:
                        UserJoinEvent userJoinEvent = (UserJoinEvent) event;
                        break;
                    case INVITE:
                        InvitedEvent invitedEvent = (InvitedEvent) event;
                        break;
                    case CANCEL_INVITE:
                        CanceledInviteEvent canceledInviteEvent = (CanceledInviteEvent) event;
                        break;
                    case REJECT:
                    case ACCEPT:
                        InviteAckEvent ackEvent = (InviteAckEvent) event;
                        break;
                    case LEAVE:
                        UserLeaveEvent userLeaveEvent= (UserLeaveEvent) event;
                        break;

                }
            }

        }
    };

//注册
NIMClient.getService(SignallingServiceObserver.class).observeOfflineNotification(offlineObserver, true);

同步通知

    /**
     * 注册/注销 其他端响应(接收/拒绝)邀请事件观察者,当其他端响应了邀请时触发
     *
     * @param observer 观察者 ,回调参数为其他端邀请响应事件
     * @param register register true为注册,false为注销
     */
    void observeOtherClientInviteAckNotification(Observer<InviteAckEvent> observer, boolean register);


    /**
     * 注册/注销 同步未退出频道列表事件观察者 ,在用户登录后sdk会去服务器获取当前还未退出的频道列表 。

     * 注意:登录后第一次注册此回调时,如果sdk已经获取到了相应的频道列表,会立即回调一次(仅此一次)。
     *
     * @param observer 观察者,回调参数为未退出的频道列表
     * @param register register true为注册,false为注销
     */
    void observeSyncChannelListNotification(Observer<ArrayList<SyncChannelListEvent>> observer, boolean register);

注意:登录后第一次注册observeSyncChannelListNotification回调时,如果sdk已经获取到了相应的频道列表,会立即回调一次(仅此一次)

其他通知

 /**
     * 注册/注销 频道成员更新事件观察者
     *
     * @param observer 观察者,回调参数为成员更新事件,其中包含了最新的频道的完整信息(频道信息+成员列表)
     * @param register register true为注册,false为注销
     */
    void observeMemberUpdateNotification(Observer<MemberUpdateEvent> observer, boolean register);

注意:如果是有成员离开或加入频道,正常情况下会优先通过 SignallingServiceObserver#observeOnlineNotification 的回调来通知用户。 此回调的时机如下: 如果有成员信息的变更(而不是成员数量增减)或异常情况(有成员数量变更但是sdk没有回调SignallingServiceObserver#observeOnlineNotification )