Skip to content

3_6 直播_高级功能

HWilliamGo edited this page May 6, 2020 · 1 revision

1. 积分打赏

1.1 获取积分打赏数据

IPolyvPointRewardDataSource pointRewardRepository = new PLVPointRewardDataSource();

使用接口IPolyvPointRewardDataSource进行积分打赏数据的请求和发送。

public interface IPolyvPointRewardDataSource {

    /**
     * 获取对应频道的积分打赏设置
     *
     * @param channelId 频道
     */
    void getPointRewardSetting(String channelId, IPointRewardListener<PolyvPointRewardSettingVO> listener);

    /**
     * 用指定的商品进行积分打赏
     *
     * @param channelId 频道i
     * @param goodId    指定商品的id
     * @param goodNum   打赏的数量
     * @param viewerId  观众id
     * @param nickName  观众昵称
     * @param avatar    观众头像
     */
    void makeReward(String channelId, int goodId, int goodNum, String viewerId, String nickName, String avatar, IPointRewardListener<Integer> listener);

    /**
     * 获取指定观众的剩余的积分数量
     *
     * @param viewerID 观众id
     * @param nickName 观众昵称
     */
    void getRemainingRewardPoint(String channelId, String viewerID, String nickName, IPointRewardListener<Integer> listener);

    void destroy();

    interface IPointRewardListener<T> {
        void onSuccess(T t);

        void onFailed(Throwable throwable);
    }
}

1.2 监听积分打赏事件

请参考PolyvChatGroupFragment类中的

private void acceptEventMessasge(){
    //...
    //道具打赏
    case PolyvChatManager.EVENT_REWARD:
        PLVRewardEvent rewardEvent = PolyvEventHelper.getEventObject(PLVRewardEvent.class, message, event);
        if (rewardEvent == null) {
            break;
        }
        if (pointRewardEventProducer != null) {
            if (ScreenUtils.isPortrait()) {
                //横屏不处理积分打赏事件
                pointRewardEventProducer.addEvent(rewardEvent);
            }
        }
        if (rewardEvent.getContent() != null) {
            String goodImage = rewardEvent.getContent().getGimg();
            String nickName = rewardEvent.getContent().getUnick();
            int goodNum=rewardEvent.getContent().getGoodNum();
            Spannable rewardSpan = generateRewardSpan(nickName, goodImage,goodNum);
            if (rewardSpan != null) {
                rewardEvent.setObjects(rewardSpan);
                eventType = PolyvChatListAdapter.ChatTypeItem.TYPE_TIPS;
                eventObject = rewardEvent;
            }
        }
    break;
    //...
}

1.3 积分打赏UI

积分打赏的UI和动效位于包:com.easefun.polyv.cloudclassdemo.watch.chat.point_reward中。

其中类IPolyvPointRewardEventProducer作为积分打赏事件的队列来维护积分打赏特效。