## 投票组件

### 版本历史

版本号 | 更新时间 | 更新描述
--- | --- | ---
1.0.0 | 2022.8.1 | 直播带货组件上线
1.1.0 | 2022.2.15 | 直播带货支持多平台链接
1.2.4 | 2023.8.7 | 修复已知问题
1.2.6 | 2023.12.1 | 升级依赖Glide4.x版本
1.2.7 | 2024.2.2 | 修复已知问题
1.2.8 | 2024.3.18 | 新增点击商品购买按钮回调商品信息

### 组件引入

注意：所有使用互动组件必须要引入basemodule库，最新版本见 互动组件对接文档

项目根目录build.gradle引入：

     repositories {     maven { url 'http://nexus-app.bokecc.com/repository/sdk-group/' } }

module的build.gradle引入：

     dependencies {     api ('com.bokecc:basemodule:x.x.x')     api ('com.bokecc.module:commercemodule:x.x.x') }

Application的onCreate方法中，调用 `DWLiveEngine.init` 初始化dwlivesdk后，添加代码：

    CommerceInteractSDK.getInstance().init(app);

### 1. 组件描述

直播带货组件是基于基础组件库扩展的直播带货组件服务，通过IM组件实现带货活动事件的实时推送，包括获取推送商品，获取商品列表等功能，为业务方提供直播带货能力。带货组件包含管理器和基于管理器实现的UI界面，接入方可基于管理器对外API实现完全自定义UI的带货，也可直接集成组件SDK提供的UI。

### 2. 组件架构

#### 2.1 组件架构图

#### 2.2 核心对外API

IVoteManager内部唯一实现类为VoteManagerImpl

作用 | API
--- | ---
初始化 | init(CommerceListener listener)
设置token | sendToken(String interactToken，String userId，String roomId，String viewId，String username，boolean isRegisterIm)
获取商品列表 | getGoodsList(boolean isClear)
获取商品详情 | getGoodsDetail(String productId)
获取商品链接 | getGoodsDetail(int type,String productId)
重连 | reConnect()
释放 | release()

API接口代码

    public interface CommerceManager {    /**     * 初始化电商模块     * @param giftListener 模块回调监听     */    void init(CommerceListener giftListener);
        /**     * 设置token及相关参数     * @param interactToken     * @param userId     * @param roomId     * @param viewId     * @param username     * @param isRegisterIm     */    void setToken(String interactToken,String userId,String roomId,String viewId,String username,boolean isRegisterIm);
        /**     * 获取商品列表     */    void getGoodsList(final boolean isClear);
        /**     * 获取商品详情     * @param productId     */    void getGoods(String productId);
        /**     * 获取商品链接     * @param type     * @param productId     */    void getGoodsLink(int type,String productId);
        /**     * 重连     */    void reConnect();
        /**     * 释放     */    void release();
    }

#### 2.3 数据参数定义

数据类参数说明

    public class CCGoodsModel {
        /**商品id*/    private long id;    /**封面*/    private String cover;    /**标题*/    private String title;    /**描述*/    private String desc;    /***/    private String[] tag;    /**当前价格*/    private int currentPrice;    /**原价*/    private int originPrice;    /**按钮文案*/    private String button;    /**0-未置顶；1-置顶*/    private int top;    /**0-未推送；1-推送*/    private int push;    /**序号*/    private int score;
        /**获取更多视图，0不显示/1获取更多/2到底了*/    private int loadMoreStatus = 0;       /**     * 1 多平台链接，0 通用链接，判断，如果是0，走接口获取商品地址，判断如果是1，遍历platformLink，取terminal是2得链接，没有置灰按钮     */    private int linkType;    /**     * 平台链接数组     */    private ArrayList<PlatformLinkDTO> platformLink;
    }

     public static class PlatformLinkDTO{        /**         * 1:PC   2:H5         */        private int terminal;        /**         * 链接         */        private String link; }

### 3. 组件接入

#### 3.1 使用组件提供UI

推送商品视图CCRecommendGoodsView

1. 登录业务SDK（云直播等）

2. xml中添加VoteMainLayout

       <?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="#eeeeee"    android:orientation="vertical">

           <com.bokecc.commerce.view.CCRecommendGoodsView     android:id="@+id/recommerce_goods_view"     android:layout_width="match_parent"     android:layout_height="match_parent"/>
       </LinearLayout>

3. 推送商品的使用

   （1）获取token-初始化投票需要传递参数token，userId，roomId，viewId，username，可以通过业务SDK（云直播等）提供的对外API获取token

   （2）获取正在进行活动-如果需要进入时就展示互动组件，需要调用业务SDK提供的正在进行中组件活动API获取正在进行的活动

   （3）初始化组件-使用前两步获取的信息初始化组件SDK

       .initialize(String interactToken,String userId,String roomId,String viewId,String username,new CommerceUiListener() {         @Override         public void onClose() {             //关闭         }
                @Override         public void onCommercePush(String id) {             //推送         }
                @Override         public void onProductLink(String link) {             //商品链接，跳转浏览器等操作         }     });

4. 商品列表的使用

   （1）获取token-初始化投票需要传递参数token，userId，roomId，viewId，username，可以通过业务SDK（云直播等）提供的对外API获取token

   （2）获取正在进行活动-如果需要进入时就展示互动组件，需要调用业务SDK提供的正在进行中组件活动API获取正在进行的活动

   （3）初始化组件-使用前两步获取的信息初始化组件SDK

       .initialize(token,userId,roomId,"","", new CommerceUiListener() {         @Override         public void onClose() {             recommerce_goodslist_view.setVisibility(View.GONE);         }
                @Override         public void onCommercePush(String id) {
                }
                @Override         public void onProductLink(String link) {             //获取商品链接，跳转浏览器         }     });

5. 商品列表刷新

       xxxxxxxxxx@Override    protected void flushList() {            }

6. 销毁组件

       xxxxxxxxxx@Override    protected void release() {    }

### 4. 混淆配置

混淆配置

    xxxxxxxxxx-keep class com.bokecc.**{*;}-keep interface com.bokecc.**{*;}

### 5. 组件库依赖

    implementation 'com.android.support:appcompat-v7:28.0.0'implementation 'com.android.support:recyclerview-v7:28.0.0'implementation 'com.github.bumptech.glide:glide:4.9.0'