1.具体的集成步骤就不在详细介绍,我们只说干货,附上融云IM官方文档地址,里面有更为详细的集成介绍
https://www.rongcloud.cn/docs/#necessary
集成后效果
2.AndroidManifest配置融云需要的配置
3.融云结构(各项目结构不同请自行参考)
4.融云需要进行的配置
//初始化融云
RongIM.init(this);
//初始化聊天界面底部的自定义按钮 具体在下面会详细介绍
RongExtensionManager.getInstance().registerExtensionModule(RecognizeExtensionModule2.getInstence());
//设置融云的消息记录的昵称和头像的内容提供者
RongIM.setUserInfoProvider(new RongIM.UserInfoProvider() {
@Override
public UserInfo getUserInfo(String userId) {
LogUtils.e("我执行了》》》》》》"+userId);//提供的是融云的ID
UserInfo userInfo = new UserInfo(userId, "", null);
//在这里通过融云ID向自己的后台请求用户数据
return userInfo;
}
}, true);
//群聊的用户数据提供者 同上
RongIM.setGroupUserInfoProvider(new RongIM.GroupUserInfoProvider() {
@Override
public GroupUserInfo getGroupUserInfo(String s, String s1) {
//设置数据
RongIM.getInstance().refreshGroupInfoCache(new Group(groupid, nickName, Uri.parse(avatar)));
return getGroupUserInfos(s, s1); //向自己后台获取
}
}, true);
//融云的配置
options = new DisplayImageOptions.Builder()
.showImageForEmptyUri(R.drawable.de_default_portrait)
.showImageOnFail(R.drawable.de_default_portrait)
.showImageOnLoading(R.drawable.de_default_portrait)
.displayer(new FadeInBitmapDisplayer(300))
.cacheInMemory(true)
.cacheOnDisk(true)
.build();
2.使用步骤
//Token是自己后台返回
private void connect(String rongCloudToken, String nickName, String phono) {
if (getApplicationInfo().packageName.equals(getCurProcessName(getApplicationContext()))) {
RongIM.connect(rongCloudToken, new RongIMClient.ConnectCallback() {
/**
* Token 错误。可以从下面两点检查
* 1. Token 是否过期,如果过期您需要向 App Server 重新请求一个新的 Token
* 2. token 对应的 appKey 和工程里设置的 appKey 是否一致
*/
@Override
public void onTokenIncorrect() {
ToastView("--------------------Token相关问题");
}
/**
* 连接融云成功
* @param userid 当前 token 对应的用户 id
*/
@Override
public void onSuccess(String userid) {
LoadingView.dismissLoading(mShowLoading);
Log.e("tag", "--------------------融云登录成功>>>用户id: " + userid);
Intent intent = new Intent(LoginActivity.this, HomeActivity.class);
intent.putExtra("noticeBean", gson.toJson(noticeBean));
startActivity(intent);
//设置自己的用户信息
RongIM.getInstance().refreshUserInfoCache(new UserInfo(userid, nickName, Uri.parse(phono)));
finish();
}
/**
* 连接融云失败
* @param errorCode 错误码,可到官网 查看错误码对应的注释
*/
@Override
public void onError(RongIMClient.ErrorCode errorCode) {
ToastView("--------------------登录失败" + errorCode);
}
});
}
}
2.消息界面
额…表示不全(拼音分类的还有列表哈)
private void initFragment() {
mFragments = new ArrayList<>();
Fragment conversationFragment = new MessageFragment();
FriendFragment friendFragment = new FriendFragment();
mFragments.add(conversationFragment);
mFragments.add(friendFragment);
}
先看看消息记录的Fragment怎么实现的
XML文件:
//重要代码
if(fragment != null){
transaction.remove(fragment);
}
//初始化融云自己的界面
fragment = initConversationList();
//添加到布局
transaction = getActivity().getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.mConversation, fragment);
transaction.commit();
/**
* 初始化会话列表
*
* @return
*/
private Fragment initConversationList() {
if (mConversationListFragment == null) {
ConversationListFragment listFragment = new ConversationListFragment();
listFragment.setAdapter(new ConversationListAdapterEx(RongContext.getInstance()));
Uri uri;
if (isDebug) {
uri = Uri.parse("rong://" + getActivity().getApplicationInfo().packageName).buildUpon()
.appendPath("conversationlist")
.appendQueryParameter(Conversation.ConversationType.PRIVATE.getName(), "false") //设置私聊会话是否聚合显示
.appendQueryParameter(Conversation.ConversationType.GROUP.getName(), "true")//群组
.appendQueryParameter(Conversation.ConversationType.PUBLIC_SERVICE.getName(), "false")//公共服务号
.appendQueryParameter(Conversation.ConversationType.APP_PUBLIC_SERVICE.getName(), "false")//订阅号
.appendQueryParameter(Conversation.ConversationType.SYSTEM.getName(), "true")//系统
.appendQueryParameter(Conversation.ConversationType.DISCUSSION.getName(), "true")
.build();
mConversationsTypes = new Conversation.ConversationType[]{Conversation.ConversationType.PRIVATE,
Conversation.ConversationType.GROUP,
Conversation.ConversationType.PUBLIC_SERVICE,
Conversation.ConversationType.APP_PUBLIC_SERVICE,
Conversation.ConversationType.SYSTEM,
Conversation.ConversationType.DISCUSSION
};
} else {
uri = Uri.parse("rong://" + getActivity().getApplicationInfo().packageName).buildUpon()
.appendPath("conversationlist")
.appendQueryParameter(Conversation.ConversationType.PRIVATE.getName(), "false") //设置私聊会话是否聚合显示
.appendQueryParameter(Conversation.ConversationType.GROUP.getName(), "true")//群组
.appendQueryParameter(Conversation.ConversationType.PUBLIC_SERVICE.getName(), "false")//公共服务号
.appendQueryParameter(Conversation.ConversationType.APP_PUBLIC_SERVICE.getName(), "false")//订阅号
.appendQueryParameter(Conversation.ConversationType.SYSTEM.getName(), "true")//系统
.build();
mConversationsTypes = new Conversation.ConversationType[]{Conversation.ConversationType.PRIVATE,
Conversation.ConversationType.GROUP,
Conversation.ConversationType.PUBLIC_SERVICE,
Conversation.ConversationType.APP_PUBLIC_SERVICE,
Conversation.ConversationType.SYSTEM
};
}
listFragment.setUri(uri);
mConversationListFragment = listFragment;
return listFragment;
} else {
return mConversationListFragment;
}
}
https://github.com/sealtalk/sealtalk-android
下篇将讲解单聊聊天界面以及群里聊天界面的使用以及坑…