可以发送文本消息和表情、语音消息、消息、地理位置消息以及文件消息。
发送文本消息及表情
//获取到与聊天人的会话对象。参数username为聊天人的userid或者groupid,后文中的username皆是如此
EMConversation conversation = EMChatManagergetInstance()getConversation(username);
//创建一条文本消息
EMMessage message = EMMessagecreateSendMessage(EMMessageTypeTXT);
//如果是群聊,设置chattype,默认是单聊
messagesetChatType(ChatTypeGroupChat);
//设置消息body
TextMessageBody txtBody = new TextMessageBody(content);
messageaddBody(txtBody);
//设置接收人
messagesetReceipt(username);
//把消息加入到此会话对象中
conversationaddMessage(message);
//发送消息
EMChatManagergetInstance()sendMessage(message, new EMCallBack(){});
发送语音消息
EMConversation conversation = EMChatManagergetInstance()getConversation(username);
EMMessage message = EMMessagecreateSendMessage(EMMessageTypeVOICE);
//如果是群聊,设置chattype,默认是单聊
messagesetChatType(ChatTypeGroupChat);
VoiceMessageBody body = new VoiceMessageBody(new File(filePath), len);
messageaddBody(body);
messagesetReceipt(username);
conversationaddMessage(message);
EMChatManagergetInstance()sendMessage(message, new EMCallBack(){});
发送消息
EMConversation conversation = EMChatManagergetInstance()getConversation(username);
EMMessage message = EMMessagecreateSendMessage(EMMessageTypeIMAGE);
//如果是群聊,设置chattype,默认是单聊
messagesetChatType(ChatTypeGroupChat);
ImageMessageBody body = new ImageMessageBody(new File(filePath));
// 默认超过100k的会压缩后发给对方,可以设置成发送原图
// bodysetSendOriginalImage(true);
messageaddBody(body);
messagesetReceipt(username);
conversationaddMessage(message);
EMChatManagergetInstance()sendMessage(message, new EMCallBack(){});
发送地理位置消息
EMConversation conversation = EMChatManagergetInstance()getConversation(username);
EMMessage message = EMMessagecreateSendMessage(EMMessageTypeLOCATION);
//如果是群聊,设置chattype,默认是单聊
messagesetChatType(ChatTypeGroupChat);
LocationMessageBody locBody = new LocationMessageBody(locationAddress, latitude, longitude);
messageaddBody(locBody);
messagesetReceipt(username);
conversationaddMessage(message);
EMChatManagergetInstance()sendMessage(message, new EMCallBack(){});
发送文件消息
EMConversation conversation = EMChatManagergetInstance()getConversation(username);
// 创建一个文件消息
EMMessage message = EMMessagecreateSendMessage(EMMessageTypeFILE);
// 如果是群聊,设置chattype,默认是单聊
if (chatType == CHATTYPE_GROUP)
messagesetChatType(ChatTypeGroupChat);
//设置接收人的username
messagesetReceipt(username);
// add message body
NormalFileMessageBody body = new NormalFileMessageBody(new File(filePath));
messageaddBody(body);
conversationaddMessage(message);
EMChatManagergetInstance()sendMessage(message, new EMCallBack(){});
接收消息
通过广播接收新消息
注意事项:为了防止新消息来时,因为没有注册广播接收者,导致漏接消息的情况,注册完接受者以及好友监听等事件后,需要调用以下 SDK 才会发送新消息的广播,只需调用一次即可,可参考 Demo 的 mainactivity。
EMChatgetInstance()setAppInited()
另外,当 APP 在后台时,SDK 默认以 notification 的形式通知有新消息,不会走广播,如果需要走广播,可以调用以下 SDK 关闭 notification 通知,这样新消息还是走发送广播的形式。
EMChatManagergetInstance()getChatOptions()setShowNotificationInBackgroud(false)
注册一个相应 broadcast,用来接收消息。
NewMessageBroadcastReceiver msgReceiver = new NewMessageBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter(EMChatManagergetInstance()getNewMessageBroadcastAction());
intentFiltersetPriority(3);
registerReceiver(msgReceiver, intentFilter);
private class NewMessageBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//消息id
String msgId = intentgetStringExtra("msgid");
//发消息的人的username(userid)
String msgFrom = intentgetStringExtra("from");
//消息类型,文本、、语音消息等,这里返回的值为msgtypeordinal()。
//所以消息type实际为是enum类型
int msgType = intentgetIntExtra("type", 0);
Logd("main", "new message id:" + msgId + " from:" + msgFrom + " type:" + msgType);
//更方便的方法是通过msgId直接获取整个message
EMMessage message = EMChatManagergetInstance()getMessage(msgId);
}
}
通过监听事件来接收新消息
注意事项:注册消息事件监听,此 listener 会收到所有类型的 event 事件,如果对某种或某些类型的事件感兴趣,可以用 registerEventListener(EMEventListener listener, EMNotifierEventEventType[] types)。
EMNotifierEventEventEventDeliveryAck;//已发送回执event注册
EMNotifierEventEventEventNewCMDMessage;//接收透传event注册
EMNotifierEventEventEventNewMessage;//接收新消息event注册
EMNotifierEventEventEventOfflineMessage;//接收离线消息event注册
EMNotifierEventEventEventReadAck;//已读回执event注册
EMNotifierEventEventEventConversationListChanged;//通知会话列表通知event注册(在某些特殊情况,SDK去删除会话的时候会收到回调监听)
接收所有的 event 事件:
EMChatManagergetInstance()registerEventListener(new EMEventListener() {
@Override
public void onEvent(EMNotifierEvent event) {
// TODO Auto-generated method stub
EMMessage message = (EMMessage) eventgetData();
}
});
有选择性的接收某些类型 event 事件:
EMChatManagergetInstance()registerEventListener(new EMEventListener() {
@Override
public void onEvent(EMNotifierEvent event) {
// TODO Auto-generated method stub
EMMessage message = (EMMessage) eventgetData();
}
}, new EMNotifierEventEvent[]{EMNotifierEventEventEventNewMessage,}
);
注:广播和监听事件不可同时混用。
解除监听事件
如果不想收到回调,则执行解除监听事件。
EMChatManagergetInstance()unregisterEventListener(new EMEventListener() {
@Override
public void onEvent(EMNotifierEvent event) {
// TODO Auto-generated method stub
}
});
获取聊天记录
EMConversation conversation = EMChatManagergetInstance()getConversation(username|groupid);
//获取此会话的所有消息
List<EMMessage> messages = conversationgetAllMessages();
//sdk初始化加载的聊天记录为20条,到顶时需要去db里获取更多
//获取startMsgId之前的pagesize条消息,此方法获取的messages sdk会自动存入到此会话中,app中无需再次把获取到的messages添加到会话中
List<EMMessage> messages = conversationloadMoreMsgFromDB(startMsgId, pagesize);
//如果是群聊,调用下面此方法
List<EMMessage> messages = conversationloadMoreGroupMsgFromDB(startMsgId, pagesize);
消息管理(单一聊天人、所有聊天人)
获取未读消息数量
EMConversation conversation = EMChatManagergetInstance()getConversation(username|groupid);
conversationgetUnreadMsgCount();
未读消息数清零
指定会话消息未读数清零。
EMConversation conversation = EMChatManagergetInstance()getConversation(username|groupid);
conversationmarkAllMessagesAsRead();
所有未读消息数清零
EMChatManagergetInstance()markAllConversationsAsRead();
获取消息总数
EMConversation conversation = EMChatManagergetInstance()getConversation(username|groupid);
conversationgetMsgCount();
清空会话聊天记录
//清空和某个user的聊天记录(包括本地),不删除conversation这个会话对象
EMChatManagergetInstance()clearConversation(username|groupid);
删除单个聊天记录
//删除和某个user的整个的聊天记录(包括本地)
EMChatManagergetInstance()deleteConversation(username|groupid);
//删除当前会话的某条聊天记录
EMConversation conversation = EMChatManagergetInstance()getConversation(username|groupid);
conversationremoveMessage(deleteMsgmsgId);
删除所有聊天记录
//删除所有会话记录(包括本地)
EMChatManagergetInstance()deleteAllConversation();
设置某条消息为已读
//markAsRead为true,则标记msgid的消息位已读
conversationgetMessage({msgid},markAsRead);
设置自定义的消息提示
APP 在后台时,新消息会通过 notification 的方式,在手机状态栏提示新消息,可以把提示的内容换成自定义的内容(在application的oncreate()里设置)。
//获取到配置options对象
EMChatOptions options = EMChatManagergetInstance()getChatOptions();
//设置自定义的文字提示
optionssetNotifyText(new OnMessageNotifyListener() {
@Override
public String onNewMessageNotify(EMMessage message) {
//可以根据message的类型提示不同文字,这里为一个简单的示例
return "你的好基友" + messagegetFrom() + "发来了一条消息哦";
}
@Override
public String onLatestMessageNotify(EMMessage message, int fromUsersNum, int messageNum) {
return fromUsersNum + "个基友,发来了" + messageNum + "条消息";
}
});
设置自定义 notification 点击跳转 intent。
用户点击 notification 消息,SDK 会有默认的跳转 intent,开发者可以设置自己的跳转 intent,这里以 UIdemo 的代码为例。
// 获取到EMChatOptions对象
EMChatOptions options = EMChatManagergetInstance()getChatOptions();
//设置notification点击listener
optionssetOnNotificationClickListener(new OnNotificationClickListener() {
@Override
public Intent onNotificationClick(EMMessage message) {
Intent intent = new Intent(applicationContext, ChatActivityclass);
ChatType chatType = messagegetChatType();
if(chatType == ChatTypeChat){ //单聊信息
intentputExtra("userId", messagegetFrom());
intentputExtra("chatType", ChatActivityCHATTYPE_SINGLE);
}else{ //群聊信息
//messagegetTo()为群聊id
intentputExtra("groupId", messagegetTo());
intentputExtra("chatType", ChatActivityCHATTYPE_GROUP);
}
return intent;
}
});
新消息提示
SDK 中提供了方便的新消息提醒功能。可以在收到消息时调用,提醒用户有新消息。
首先获取EMChatOptions。
chatOptions = EMChatManagergetInstance()getChatOptions();
设置是否启用新消息提醒(打开或者关闭消息声音和震动提示)。
chatOptionssetNotifyBySoundAndVibrate(true|false); //默认为true 开启新消息提醒
设置是否启用新消息声音提醒。
chatOptionssetNoticeBySound(true|false); //默认为true 开启声音提醒
设置是否启用新消息震动提醒。
chatOptionssetNoticedByVibrate(true|false); //默认为true 开启震动提醒
设置语音消息播放是否设置为扬声器播放。
chatOptionssetUseSpeaker(true|false); //默认为true 开启扬声器播放
设置后台接收新消息时是否通过通知栏提示。
chatOptionssetShowNotificationInBackgroud(true|false) //默认为true
附:
chatOptionssetAcceptInvitationAlways(false);
//默认添加好友时为true,是不需要验证的,改成需要验证为false
集成环信是比较简单的。根据环信平台上部分app的反馈,集成环信的时间,如果不对聊天页面做大的修改,只是修改下颜色,背景等来配合app的风格,大概是在2天左右。以上是指集成单聊的时间。如果是群聊,会更复杂些,通常需要一周时间。
集成环信大概有4个步骤:
1、注册环信开发者账号。得到appkey
2、服务器端集成:如果是一个已经上线的app,需要为该app的每个用户创建一个环信账号。环信提供了一个REST API,传入Id和密码,就可以创建一个环信账号。如果有10万用户,那么就写个脚本,循环调用10万次就可以了。3、客户端集成:在客户端是先登录自己的服务器,然后登陆环信的服务器。这个2次登陆的过程是程序做的,所以用户是不会知道有2次登陆的。登录环信服务器成功后,就在手机客户端和环信的聊天服务器建立了一个聊天的长连接。
4、注册新用户:对于新创建的用户,通常做法是用户自己的app客户端去连接用户自己的服务器,用户的服务器再去连接环信的服务器去创建用户。比如先在自己的服务器创建用户成功后,调用环信的接口,创建环信的账号。删除用户也是,先删除环信的账号,再删除自己的账号。这里要注意的一点是因为创建环信账号时是服务器对服务器,所以一般来说网络连接是比较可靠的。但是用户自己的服务器端程序也还是应该去catch创建环信账号返回的错误码。通常来说,可以重试2次。如果还是失败,应该Log失败错误码,并通知管理员处理。 有以下指引文档链接,指导从注册账号到集成,一步一步 *** 作方法: >
微信小程序可以实现群聊功能。具体步骤如下:
1 创建小程序:在微信公众平台上创建小程序,获取小程序的 AppID。
2 集成即时通讯 SDK:选择一个即时通讯 SDK,如融云、环信等,按照其提供的文档集成到小程序中。
3 创建群聊:在 SDK 中创建一个群组,将需要加入的用户添加到群组中。
4 实现群聊界面:在小程序中实现群聊界面,包括消息列表、输入框、发送按钮等。
5 发送消息:在小程序中实现发送消息功能,将消息发送到群组中。
6 接收消息:在小程序中实现接收消息功能,实时更新消息列表。
需要注意的是,群聊功能的实现需要考虑消息的安全性和隐私保护,防止用户信息泄露。
以上就是关于集成过环信SDK后 是怎么接受消息,又是怎么把消息显示到界面上的全部的内容,包括:集成过环信SDK后 是怎么接受消息,又是怎么把消息显示到界面上的、在android端集成环信出现连接不到聊天服务器的情况有哪些、微信小程序群聊功能等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)