邀请卡组件
版本历史
版本号 | 更新时间 | 更新描述 |
---|---|---|
1.0.1 | 2022.6.15 | 组件上线 |
1.0.2 | 2022.11.24 | 优化UI |
组件引入
注意:所有使用互动组件必须要引入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:invitationcardmodule:x.x.x')
}
Application的onCreate方法中,调用DWLiveEngine.init
初始化dwlivesdk后,添加代码:
InvitationCardInteractSDK.getInstance().init(app);
1. 组件描述
邀请卡组件是基于基础组件库扩展的组件服务,包括展示邀请卡,获取排行榜等功能,为业务方提供邀请卡能力。邀请卡组件包含管理器和基于管理器实现的UI界面,接入方可基于管理器对外API实现完全自定义UI的邀请卡,也可直接集成组件SDK提供的UI。
2. 组件架构
2.1 组件架构图
2.2 核心对外API
IInvitationCardManager内部唯一实现类为InvitationCardManagerImpl
作用 | API |
---|---|
初始化 | init(BaseInvitationCardListener listener, String userId, String roomId, String interactToken, String originUrl, String avatarUrl, Context context) |
获取邀请卡列表 | getCardList(IBaseCallBack<List> callBack) |
获取邀请卡配置 | getCardConfig(IBaseCallBack callBack) |
获取短链接 | getShortLink(String originUrl, IBaseCallBack callBack) |
获取排行榜 | getCardRankList(IBaseCallBack<List> callBack) |
重连 | reConnect() |
释放 | release() |
API接口代码
public interface IInvitationCardManager {
/**
* @param listener 监听
* @param userId viewerId
* @param roomId 房间id
* @param interactToken token
*/
void init(BaseInvitationCardListener listener, String userId, String roomId, String interactToken, String originUrl, String avatarUrl, Context context);
/**
* 重连
*/
void reConnect();
/**
* 释放
*/
void release();
/**
* 获取card列表
* @param callBack 回调
*/
void getCardList(IBaseCallBack<List<InvitationCardDataBean>> callBack);
/**
* 获取card配置
* @param callBack 回调
*/
void getCardConfig(IBaseCallBack<InvitationCardConfigBean> callBack);
/**
* 获取短链接
* @param originUrl 链接
* @param callBack 回调
*/
void getShortLink(String originUrl, IBaseCallBack<String> callBack);
/**
* 获取排行榜
* @param callBack 回调
*/
void getCardRankList(IBaseCallBack<List<InvitationCardRankBean>> callBack);
}
2.3 数据参数定义
数据类参数说明
public class InvitationCardConfigBean {
/**
* 邀请人头像, 0不显示1显示
*/
private int showHead;
/**
* 邀请人昵称, 0不显示1显示
*/
private int showName;
/**
* 时间,0不显示,1显示
*/
private int showTime;
/**
* 排行榜,0不显示,1显示
*/
private int showRank;
/**
* 水印, 0不显示1显示
*/
private int showWatermark;
/**
* 标题, 0不显示,1跟随直播间,2自定义
*/
private int showTitle;
/**
* 描述,0不显示,1跟随直播间,2自定义
*/
private int showDesc;
/**
* 水印内容, 默认, 获得场景视频技术支持
*/
private String watermark = "获得场景视频技术支持";
/**
* 自定义标题
*/
private String title;
/**
* 自定义描述
*/
private String description;
}
3. 组件接入
3.1 使用组件提供UI
邀请卡ViewGroup为InvitationCardMainLayout
-
登录业务SDK(云直播等)
-
xml中添加InvitationCardMainLayout
<?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.invitationcard.ui.InvitationCardMainLayout android:id="@+id/invitation_card" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout>
-
初始化组件
-
获取token-初始化组件需要传递参数token,可以通过业务SDK(云直播等)提供的对外API获取token
-
使用业务SDK提供的配置信息初始化组件SDK
代码示例(以云直播为例):
private void initInvitationCard() { invitationCard = findViewById(R.id.invitation_card); if (DWLiveCoreHandler.getInstance().getInteractionConfigure() != null && DWLiveCoreHandler.getInstance().getInteractionConfigure().getInviteSwitch() > 0) { String userId = ""; try { //从登录信息中获取(上个界面传入) userId = getIntent().getStringExtra("userId"); } catch (Exception e) { e.printStackTrace(); } String nickName = ""; try { //从登录信息中获取(上个界面传入) nickName = getIntent().getStringExtra("nickName"); } catch (Exception e) { e.printStackTrace(); } String roomId = ""; try { roomId = getIntent().getStringExtra("roomId"); } catch (Exception e) { e.printStackTrace(); } String viewerId = ""; try { viewerId = DWLiveCoreHandler.getInstance().getViewer().getId(); } catch (Exception e) { e.printStackTrace(); } String roomTitle = ""; try { roomTitle = DWLiveCoreHandler.getInstance().getRoomInfo().getName(); } catch (Exception e) { e.printStackTrace(); } String roomDesc = ""; try { roomDesc = DWLiveCoreHandler.getInstance().getRoomInfo().getDesc(); } catch (Exception e) { e.printStackTrace(); } String startTime = ""; try { startTime = DWLiveCoreHandler.getInstance().getRoomInfo().getEstimateStartTime(); //时间格式做一下转换 if (startTime.endsWith(".0")){ startTime = startTime.substring(0,startTime.length()-2); } } catch (Exception e) { e.printStackTrace(); } final String finalViewerId = viewerId; final String finalRoomId = roomId; final String finalRoomTitle = roomTitle; final String finalRoomDesc = roomDesc; final String finalStartTime = startTime; final String finalNickName = nickName; final String liveLinkUrl = "https://view.csslcloud.net/api/view/index?roomid=" + roomId + "&userid=" +userId; //获取组件token DWLive.getInstance().getInteractiveToken(new BaseCallback<String>() { @Override public void onError(String error) { Toast.makeText(LivePlayActivity.this, "获取组件token失败", Toast.LENGTH_SHORT).show(); } @Override public void onSuccess(final String token) { invitationCard.setListener(new InvitationCardMainLayout.IInvitationCardListener() { @Override public void onCardLongClick(View view) { //当前view生成Bitmap,保存的逻辑可以自定义实现 int width = view.getWidth(); int height = view.getHeight(); Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565); Canvas canvas = new Canvas(bitmap); view.draw(canvas); File file = ImageUtils.save2Album(LivePlayActivity.this, bitmap, Bitmap.CompressFormat.JPEG); Toast.makeText(LivePlayActivity.this, "已保存至相册", Toast.LENGTH_SHORT).show(); } @Override public void onClose() { invitationCard.setVisibility(View.GONE); } @Override public void onInitSuccess() { isInvitationCardInit = true; invitationCard.getRankList(new IBaseCallBack<List<InvitationCardRankBean>>() { @Override public void onSuccess(List<InvitationCardRankBean> invitationCardRankBeans) { //设置排行榜数据 mMoreFunctionLayout.setInvitationRankData(invitationCardRankBeans,false); } @Override public void onFailed(int code, String msg) { } }); } }); invitationCard.initialize( new InvitationCardBaseLayout .InvitationCardConfig() .setInteractToken(token) .setUserId(finalViewerId) .setRoomId(finalRoomId) .setOngoingId("") .setOngoing(false) //邀请卡内容相关 .setCardLiveTitle(finalRoomTitle) .setCardLiveTime(finalStartTime) .setCardLiveDesc(finalRoomDesc) .setCardNickname(finalNickName) .setCardQrCodeUrl(liveLinkUrl) .setCardAvatarUrl("") ); } }); } }
-
-
销毁组件
@Override protected void onDestroy() { super.onDestroy(); if (invitationCard!=null){ invitationCard.release(); } }
3.2 使用组件管理器+自定义UI
邀请卡管理器实现类为InvitationCardManagerImpl,对外方法参照IInvitationCardManager,UI可以参考InvitationCardBaseLayout以及其子类InvitationCardMainLayout实现
4. 混淆配置
混淆配置
-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:3.7.0'
implementation 'com.google.zxing:core:3.3.3'