融云红包集成文档_一切从简

news/2024/5/18 12:01:45 标签: ui, cookie, sdk
1. redpacketlibrary简介
redpacketlibrary,在融云sdk2.5.2的基础上提供了收发红包和零钱页的功能。
2. redpacketlibrary目录说明
libs :redpacket2.0.jar是集成红包功能所依赖的jar包。
res :包含了红包SDK和聊天页面中的资源文件。(红包SDK相关以rp开头)
callback :此接口只有群/讨论组红包用到
1、GetGroupInfoCallback 获取群/讨论组里面的人数(app开发者需要自己处理)的接口回调。
2、ToRedPacketActivity 打开发红包界面接口回调
message :
1、RongRedPacketMessage 自定义红包消息。
2、RongNotificationMessage 自定义通知消息,用于领取了红包之后,回执消息发给红包者
3、RongEmptyMessage 自定义空消息,用于群/讨论组领取了红包之后,1、接受者先向本地插入一条“你领取了XX的红包”,然后发送一条空消息(不在聊天界面展示),发送红包者收到消息之后,向本地插入一条“XX领取了你的红包”,2、如果接受者和发送者是一个人就直接向本地插入一条“你领取了自己的红包”
provider :
1、RongRedPacketProvider 扩展栏单聊红包提供者
2、RongRedPacketMessageProvider 红包消息UI展示提供者
3、RongNotificationMessageProvider 回执消息UI展示提供者
4、RongGroupRedPacketProvider 扩展栏群聊/讨论组红包提供者
RPContext.java 封装了融云消息类型和模板注册以及插入消息的方法。

注意: redpacketlibrary依赖了IMKIT,可以查看redpacketlibrary的build.gradle。



LoginActivity登录时初始化用户信息。


import com.easemob.redpacketui.RPContext; /** * 以下是demo 的逻辑,与sdk 没有关系。 * 1,登录成功,获得 cookie 和 token * * @param obj */ private void loginApiSuccess(Object obj) { if (obj instanceof User) { final User user = (User) obj; if (user.getCode() == 200) { if (DemoContext.getInstance() != null && user.getResult() != null) { //获得token,通过token 去做 connect 操作 httpGetTokenSuccess(user.getResult().getToken()); SharedPreferences.Editor edit = DemoContext.getInstance().getSharedPreferences().edit(); edit.putString(Constants.APP_USER_NAME, user.getResult().getUsername()); edit.putString(Constants.APP_USER_PORTRAIT, user.getResult().getPortrait()); edit.putString(Constants.APP_TOKEN, user.getResult().getToken()); edit.putString(INTENT_PASSWORD, mPassWordEt.getText().toString()); edit.putString(INTENT_IMAIL, mUserNameEt.getText().toString()); edit.putBoolean("DEMO_ISFIRST", false); edit.apply(); //初始化红包用户信息 RPContext.getInstance().initUserInfo(user.getResult().getId(), user.getResult().getUsername(), user.getResult().getPortrait()); Log.i(TAG, "----login success---"); } } else if (user.getCode() == 103) { if (mDialog != null) mDialog.dismiss(); WinToast.toast(LoginActivity.this, R.string.app_pass_error); } else if (user.getCode() == 104) { if (mDialog != null) mDialog.dismiss(); WinToast.toast(LoginActivity.this, R.string.app_user_error); } else if (user.getCode() == 111) { if (mDialog != null) mDialog.dismiss(); WinToast.toast(LoginActivity.this, R.string.app_user_cookie); } } }


LoginActivity快速登录时初始化用户信息。
import com.easemob.redpacketui.RPContext; protected void initData() { ... if (!token.equals(Constants.DEFAULT) && !cookie.equals(Constants.DEFAULT)) { if (mDialog != null && !mDialog.isShowing()) { mDialog.show(); } //初始化红包用户信息 String userID = PreferenceManager.getDefaultSharedPreferences(this).getString( Constants.APP_USER_ID, "default"); String userName = PreferenceManager.getDefaultSharedPreferences(this).getString( Constants.APP_USER_NAME,"default"); String userAvatar = PreferenceManager.getDefaultSharedPreferences(this).getString( Constants.APP_USER_PORTRAIT, "none"); RPContext.getInstance().initUserInfo(userID, userName, userAvatar); httpGetTokenSuccess(token); } }

3.5 RongCloudEvent中、在扩展栏中增加红包按钮
需要导入的包
import com.easemob.redpacketui.provider.RongGroupRedPacketProvider; import com.easemob.redpacketui.provider.RongRedPacketProvider;
添加单聊红包入口
InputProvider.ExtendProvider[] privateProvider = { new ImageInputProvider(RongContext.getInstance()),//图片 new CameraInputProvider(RongContext.getInstance()),//相机 new RealTimeLocationInputProvider(RongContext.getInstance()),//地理位置 new VoIPInputProvider(RongContext.getInstance()),// 语音通话 new RongRedPacketProvider(RongContext.getInstance())//单聊红包 }; RongIM.resetInputExtensionProvider(Conversation.ConversationType.PRIVATE, privateProvider);
添加群聊红包入口
InputProvider.ExtendProvider[] groupProvider = { new ImageInputProvider(RongContext.getInstance()),//图片 new CameraInputProvider(RongContext.getInstance()),//相机 new RealTimeLocationInputProvider(RongContext.getInstance()),//地理位置 new ContactsProvider(RongContext.getInstance()),//通讯录 new RongGroupRedPacketProvider(RongContext.getInstance(), new GetGroupInfoCallback() { //获取群组信息,并回调把群里面人数给回调接口 @Override public void getGroupPersonNumber(final String groupID, final ToRedPacketActivity mCallback) { if (DemoContext.getInstance().getGroupNumberById(groupID) != null) { //这里的缓存群组信息的逻辑仅供参考 int number = Integer.parseInt(DemoContext.getInstance().getGroupNumberById(groupID)); mCallback.toRedPacketActivity(number); } else { DemoContext.getInstance().getDemoApi().getGroupByGroupId(groupID, new ApiCallback<GroupInfo>() { @Override public void onComplete(AbstractHttpRequest<GroupInfo> abstractHttpRequest, GroupInfo groupInfo){ if (groupInfo.getCode() == 200 && groupInfo.getResult() != null) { Log.e(TAG, groupInfo.getResult().getNumber()); int number = Integer.parseInt(groupInfo.getResult().getNumber()); //缓存群人数 if (DemoContext.getInstance() != null) DemoContext.getInstance().putGroupNmber(groupID, String.valueOf(number)); //打开发红包界面 mCallback.toRedPacketActivity(number); } else { WinToast.toast(mContext, String.valueOf(groupInfo.getCode())); } } @Override public void onFailure(AbstractHttpRequest abstractHttpRequest, BaseException e) { Log.e(TAG, e.toString()); } }); } } })//群红包 }; RongIM.resetInputExtensionProvider(Conversation.ConversationType.GROUP, groupProvider);
添加讨论组红包入口
InputProvider.ExtendProvider[] discussionProvider = {//讨论组 new ImageInputProvider(RongContext.getInstance()),//图片 new CameraInputProvider(RongContext.getInstance()),//相机 new RealTimeLocationInputProvider(RongContext.getInstance()),//地理位置 new ContactsProvider(RongContext.getInstance()),//通讯录 new RongGroupRedPacketProvider(RongContext.getInstance(), new GetGroupInfoCallback() { //获取群组信息,并回调把群里面人数给回调接口 @Override public void getGroupPersonNumber(final String groupID, final ToRedPacketActivity mCallback) { RongIM.getInstance().getRongIMClient().getDiscussion(groupID, new RongIMClient.ResultCallback<Discussion>() { @Override public void onSuccess(Discussion discussion) { //打开发红包界面 mCallback.toRedPacketActivity(discussion.getMemberIdList().size()); } @Override public void onError(RongIMClient.ErrorCode errorCode) { } }); } })//讨论组红包 }; RongIM.resetInputExtensionProvider(Conversation.ConversationType.DISCUSSION, discussionProvider);


http://www.niftyadmin.cn/n/862127.html

相关文章

cmd /c和cmd /k 以及CMD命令

java的Runtime.getRuntime().exec(commandStr)可以调用执行cmd指令。 cmd /c dir 是执行完dir命令后关闭命令窗口。 cmd /k dir 是执行完dir命令后不关闭命令窗口。 cmd /c start dir 会打开一个新窗口后执行dir指令&#xff0c;原窗口会关闭。 cmd /k start dir 会打开一个新窗…

使用属性动画实现星光四射的动画效果

在Android中, 属性动画是非常有意思的功能, 控制参数变换动画效果.与使用gif图片相比, 动画控件要节约空间和增加响应速度.要点:(1) 使用PercentLayout设置自定义控件的大小.(2) 属性动画的两个重要函数, 中值和映射.(3) 擦除画笔(PorterDuff.Mode.CLEAR)的使用方法.(4) 使用颜…

自定义view实现画折线图

实现分析我们要实现这样一个折线统计图&#xff0c;必要的信息主要有下面几个先看纵轴&#xff0c;纵轴需要的信息有最大值&#xff0c;还有用来确定每个间距代表的单位&#xff0c;比如最大值是100&#xff0c;我们还要有一个将值分为几份的数据。接下来看横轴&#xff0c;因为…

在AndroidStudio下JNI开发的详细步骤

安装NDK 在工具栏点击File->Settings->Appearance & Behavior->System Settings->Android SDK->SDK Tools选中LLDB和NDK&#xff0c;点击确认&#xff0c;软件会自动安装NDK。默认安装路径: 你的sdk路径\ndk-bundle文件夹 新建一个工程 在main文件夹下新建…

Android studio中正确引入so文件的方法

如何引入第三方so文件的问题&#xff0c;然而第三方官方仅仅给出了ADT环境下的集成方式。 Android studio中默认使用的是gradle编译方式&#xff0c;与ADT编辑方式不一样&#xff0c;那么so文件应当如何引入呢&#xff1f; 其实很简单。这里以集成JPUSH为例&#xff0c;看一下s…

Android 清空缓存

public class ClearCatchApp {/*** param context* param catchPathString 缓存路径* return* throws Exception* 当前缓存大小*/public static String getTotalCacheSize(Context context, String catchPathString) throws Exception {long cacheSize getFolderSize(new File…

跨进程启动Activity黑屏(白屏)的三种解决方案

当Android跨进程启动Activity时&#xff0c;过程界面很黑屏&#xff08;白屏&#xff09;短暂时间&#xff08;几百毫秒&#xff1f;&#xff09;。当然从桌面Lunacher启动一个App时也会出现相同情况&#xff0c;那是因为App冷启动也属于跨进程启动Activity。为什么没会出现这种…

Android-气泡对话框(根据被点击View位置显示、可定制)

气泡布局的形状可以改变&#xff0c;如四角弧度、气泡颜色、箭头大小和阴影。 气泡Dialog可以根据被点击的view的位置来确定自己展示的位置。 如何开始? 在你模块中的build.gradle添加上HappyBubble依赖 compile com.github.xujiaji:happy-bubble:1.0.1如何使用 HappyBubble-B…