可以发送文本消息和表情、语音消息、消息、地理位置消息以及文件消息。
发送文本消息及表情
//获取到与聊天人的会话对象。参数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
给伊雷娜的父亲,就是城主艾德格。
先去献祭大桥赐福旁边找城主女儿伊蕾娜对话,选择帮忙转达信,获取伊蕾娜的信;然后去摩恩城墙上找城主对话,选择交出“伊蕾娜的信”,可以获得牺牲树枝。
在清单文件AndroidManifestxml里加入以下权限,以及写上你注册的appkey
1权限配置:
<xml version="10" encoding="utf-8">
<manifest xmlns:android=">
离线推送收不到,按照下面步骤一步一步进行排查:
0、如果你的app之前可以收到离线推送,突然收不到了,那么先移步苹果开发者中心查看推送证书是否过期。如果过期了,需要重新制作证书,然后到环信管理后台(Console)将旧的删掉再上传新的。过期的一般会被封禁,需要联系环信进行解封 *** 作。
1、首先已经按照环信的文档集成了离线推送: APNs离线推送
2、如果是iOS13及以上的系统,那么需要将IM SDK更新到364或以上版本。
如果更新后还不行那么退出登录、重启app、再登录试下。
初始化sdk成功之后打印版本号:
NSString ver = [EMClient sharedClient]version;
3、测试APNs推送的时候,接收方的APP需要是杀死状态,需要用户长连接断开才会发APNs推送;
所以直接上划杀死APP测试。
4、要确保导出p12时使用的Mac和创建CertificateSigningRequestcertSigningRequest文件的Mac是同一台;导出证书的时候要直接点击导出,不要点击秘钥的内容导出;确认 APP ID 是否带有推送功能;
5、环信管理后台(Console)上传证书时填写的Bundle ID须与工程中的Bundle ID、推送证书的 APP ID 相同;选择的证书类型须与推送证书的环境一致;导出p12文件需要设置密码,并在上传管理后台时传入;
6、工程中初始化SDK那里填的证书名与环信管理后台上传的证书名称必须是相同的;
7、测试环境测试,需要使用development环境的推送证书,Xcode直接真机运行;
正式环境测试,需要使用production环境的推送证书,而且要打包,打包时选择Ad Hoc,导出IPA安装到手机上。
8、APP杀死后可调用“获取单个用户”的rest接口,确认证书名称是否有绑定(正常情况下,登录成功后会绑定上推送证书,绑定后会显示推送证书名称);还需要确认绑定的证书名称和管理后台上传的证书名称是否一致。
接口文档: 获取单个用户
如果没绑定上,那么退出登录、重启app、重新登录再试下。
如果证书名称不一致,改正过来后重新登录试下。
9、如果以上都确认无误,可以联系环信排查。需提供以下信息(请勿遗漏,以免反复询问耽误时间):
appkey、devicetoken、bundle id、证书的p12文件、证书名称、证书密码、收不到推送的环信id、测试的环境(development or production)、消息id、消息的内容和发送时间
消息id要在消息发送成功后获取,如图:
近日,环信联合Gartner发布了《智能客服机器人之客户服务行业最佳实践》报告。作为业界首个智能客服机器人选项报告,给方兴未艾的智能客服市场注入了一剂强心针,也给包括保险、证券、金融、教育、电商等强客服体验行业开辟了一条新的通途。
环信CEO刘俊彦表示:“很多甲方公司已经认识到智能客服机器人的可用性,所以很多传统行业的大企业今年拿出预算要上线客服机器人,可以说今年开始进入大规模商业化阶段。
我们预计智能机器人未来市场规模至少是百亿级。”Gartner数据显示,全球89%的公司主要竞争领域就在客户体验,同时Gartner预测,随着企业想方设法提高客户满意度和降低运营成本,2019年虚拟客户助手(智能客服机器人)的使用量将增至三倍。
随着消费升级的推动,中国从劳动密集型转向看重服务质量,从价格敏感逐步向服务体验敏感转化;中国社会移动化的趋势,用户无时无刻不在移动终端上,用户倾向用手机随时随地联系客服,现在对客服的请求量比以前呈指数型增加;随着人口红利消失,劳动力成本和工具成本倒挂,年轻人不愿意再从事这种简单、枯燥的客服工作。这些现状和矛盾,都促使了智能客服机器人的兴起和迅速落地。
如何才能科学的评测和选型智能客服机器人?
智能客服机器人的应用有着显而易见的优势。首先,提高用户感知,为企业在线客服、新媒体客服等提供统一智能的自助服务支撑,降低了用户问题得到解决的难度和复杂度;其次,提升服务效率,缩短咨询处理时限,分流传统人工客服压力,节省服务成本;再次,快速收集用户诉求和行为数据,支撑产品迭代优化。
然而,如何才能科学的评测和选型智能客服机器人?《智能客服机器人之客户服务行业最佳实践》报告给出了答案。
据Gartner报告显示,目前聊天机器人主要分为两个大类:闲聊机器人与任务目的导向机器人。
其中,闲聊机器人的主要目的是和用户交流情感,不一定需要解决实际问题,即我们通常所说的搭讪。这类机器人的代表是微软小冰,比如当用户问“明天天气怎么样?”,闲聊机器人不一定会给出正面回答,而是回复“你自己不会去查吗?”
任务目的导向机器人则包括个人助理机器人与客服机器人。
个人助理机器人主要目的是为用户提供一些服务,如设置提醒、查天气、订票、对其它设备的控制等,这类机器人的代表有Siri、微软Cortana、亚马逊Alexa。
客服机器人则是指帮助客服回答问题提高人工客服效率的机器人,目前商业领域有众多服务于企业智能客服的机器人厂商。
与闲聊机器人不同,这两类机器人都会帮用户真正解决问题,如同样对于“明天天气怎么样?”的问题,用户会收到更加具体如“明天天气:晴,4°C/15°C”的回复。
当虚拟机器人让企业客服也逐渐步入人工智能时代,对智能客服机器人有着更高的需求和要求,而不是简单的“卖萌陪聊”。换句话说,陪聊型机器人显然不是智能客服的最佳选择。
对进行咨询的用户而言,最基础的需求就是优良的客服体验。对企业而言,除了客服体验之外,如何解放人力成本同样是关注的重点。
以教育企业新东方为例,新东方有较强的服务+转化的需求。目前,新东方的主要校区都有上线环信智能客服机器人,极大的解决了效率问题。
以前,有很多重复的售后咨询问题消耗着商家大量的客服资源。如学生问“帮我查一下课程老师”,客服要回答“给我课程号”;学生不知道的情况下,还需要再提供手机电话。等客服按着给到的信息查完,这个过程通常要耗时五分钟,并且这种高频场景在其余行业也都时刻在发生着。
而这种情况通过环信的多轮对话机器人完全就可以完全解决,可以帮人工客服解决大量简单重复的问题,提升效率。
售前销售、售后服务哪家强,智能客服选型主要难点
一般来说,智能客服机器人问题按照业务场景主要分为售前销售和售后服务两大类。
售前销售的特点是引导需求变具体,通常会以销售为导向,需要非常多的技巧,更加个性化和艺术化,所以售前销售场景下,除了机器人单轮对话、多轮对话、API集成,还会用到人机协作,其中尤其对多轮会话和人机协作有更多的应用。
售后的特点是问题通常为一些重复性的服务性请求,比如退货,查订单,故障报告。在这种情况下,会使用到机器人单轮对话、多轮对话以及API集成,其中对单轮会话有更多的应用。
Gartner报告显示,单轮会话是指简单的一问一答,问题可以用一句话来描述,不依赖于上下文。比如问“你们发哪家快递”。答“我们发中通”。在客服场景下,大量的问题都是这样的单轮问答。一般这样的问答依赖于一个知识库,机器人从知识库里检索相似的问题,给出答案。
不过,说来简单,但真正想完成更流畅、体验更好的单轮会话同样有三个难点:
其一,需要识别同一问题的不同表达方式。譬如,“你们快递是用哪家”,做得不好的机器人,就需要把很多不同问法都输入到机器人的知识库里。
而做得好的机器人,只需要输入其中一个问法,其他的近似问法即可自动识别,返回一个相同的答案“亲,我们快递是申通和顺丰。”
其二,理解语义细微差别,处理差异性问法。高可用的机器人会以词+句式理解问句语义,即使问句相似,但语义存在差别,会自动匹配到对应的不同答案。
比如你干嘛的?你在干嘛?你干嘛啊!这三个句子从用词来说,看上去都差不多,但其实表达意思完全不同,机器人系统能否正确识别,十分考验技术功力。
其三,聚类高频问题,自动学习优化知识库。除了算法层面优化,要提高召回率和准确率,就需要完善知识库。
这里指的并非是人工补充知识库,而是指机器人需要有自主学习能力,即机器人根据历史对话数据,自动总结及挖掘不在知识库内的高频问句,补充和完善知识库。
不过,在客服场景中,很多问题不能通过简单的一问一答单论会话解决。比如当顾客提问订单什么时候能到?机器人回答请提供订单号,然而顾客很有可能记不住订单号,这时就需要机器人参考上下文信息,引导顾客提供其他信息或数据进入下一轮对话,直到准确回复用户想要的答案。
如何评价多轮会话的效率?这主要通过任务完成率和多轮会话开发定制的快速简单程度。一个多轮会话机制,成功结束的会话数量越多,则说明任务完成率相对较高,从而说明该多轮会话的可用性更好。
从技术角度,多轮会话比单论对话的难点显然要更多,这主要体现在准确的进行语义理解,状态管理和个性化语言生成,预装行业知识图谱、预构建行业业务场景,第三方系统集成这四方面。
此外,人机协作在智能客服领域同样不容忽视。单轮会话和多轮会话经常用于企业的售后场景,而在售前场景中,企业客服不仅要担负问题解决的任务,还要担负销售转化和成单的任务。
尤其当企业获客成本很高,潜在客户线索非常珍贵,直接交给机器人接待很容易造成流失。因此这时由人工客服负责接待,机器人进行辅助,是更可行的方式。当客户提出问题,机器人会根据自身的机器体系和历史会话数据计算,向人工客服推荐答案。
进击的环信“Alpha”,夯实算法、深挖行业、打造一体化解决方案
经过长期的积累,目前环信已经夯实了三方面的硬实力。
首先,技术团队上,环信有30多人的人工智能团队,其中算法的人占了一半。经过一年半的研究,环信在基础算法上做的已经比较深入,摸得比较透。
其次,工程能力,环信全公司270人,工程师有170人。工程团队有很好的正反馈,客户要什么,然后迅速给用户去实践和试错,不足之处继续改进,这是好的工程产品的做法。因为有客户的实践,所以工程化的迭代速度很快。整个环信的工程师团队都在支持着AI团队的每一次迭代。
再次,数据层面,客服系统每天下发大概几百万条消息。并且在证券、保险、教育等这些有价值的行业中有大量的行业支持和行业知识图谱。
2017年,环信整合旗下即时通信云、移动客服、智能客服机器人和主动营销产品线,推出环信CEC(Customer Engagement Cloud),向企业提供从客户互动渠道、到客户服务、再到精准营销的全流程客户互动解决方案。
像教育、保险、金融公司这样高客单价的行业客户,是环信关注的重点。这些客户具有两个鲜明特点,一方面,高客单价、高粘性互动;另一方面,高客单价客户对定制化服务水平格外看重,所以环信在深刻理解客户画像的情况下,做高定制的一体化互动解决方案。
现阶段,环信的智能机器人可帮企业主降低约80%的客服工作量。
首先,支持菜单导航功能,通过层级式引导帮助客户获取准确答案,提高用户体验;其次,预置行业知识库,行业相关的常见问答可以一键拥有,节约创建知识库时间;
再次,可导入客户现有知识库,无需重新录入。智能机器人在与人工客服的交互过程中不断学习,优化知识库,提高应答准确率;第四,机器人与人工客服之间无缝调度,切换至人工客服后依然可以使用智能应答简化搜索提高服务效率。
2016年环信作为国内唯一的SaaS厂商荣膺Gartner 2016 Cool Vendor,2017年3月环信刚获得由经纬中国领投、银泰嘉禾跟投的103亿元C轮融资,显示出包括国际顶级研究机构和资本市场对于环信商业模式和发展前景的认可。
正是得益于包括红杉资本、经纬中国、SIG和银泰嘉禾的鼎力支持,保障了环信持续巨额的研发投入,形成了公司业务发展的正向循环。
目前,环信的三条主要产品线中,即时通讯云和移动客服产品线分别都已经开展了三四年时间,两个产品线本身均已接近盈利。
同时,在产品能力、团队建设、品牌建设、客户影响力建设等方面,都已经做得很成熟。因此,获得C轮融资之后,环信主要会在两个方面加大投入。
首先是人工智能产品线的深化布局,这代表了行业和企业自身未来的发展方向;其次,打造更强大的销售团队,今年环信的销售目标是1个亿,这显然需要一个更强大的销售团队来支撑。
环信的中期目标是争取在今年底实现盈亏平衡,明年实现盈利,并且计划两年左右时间去冲击国内创业板IPO。
截至2016年年底,环信移动客服共服务了近6万家商业客户,涵盖保险、银行、电子商务、教育O2O等多个领域的众多标杆企业。这些企业包括泰康在线、中意人寿、中信证券、国美在线、优信二手车、新东方、新浪微博、链家、58到家等。
之前做过一个集成环信的项目,里面涉及到群聊部分,老大要求是做成微信群聊那种头像,自己写了个demo 模仿微信群聊头像
使用方法很简单,把 UIImage+Addtions 这个类拖到项目中,在需要显示的地方调用:
1加载网络使用此方法
2加载本地使用(一般用不到加载本地的):
3效果图:
4最后说一点,这是手机端进行得到icon *** 作,不可能每次加载都走这样的流程,影响APP性能,所以,比较合理的方法是:创建群组的时候,把通过这种方式得到的image上传到服务器,当我们获取群组信息时,服务器返回url,以后每次都通过url加载。
/!
@method
@brief 根据消息ID从数据库中加载消息
@discussion 如果数据库中没有这条消息, 方法返回nil
@param aMessageId 消息ID
@result 加载的消息
/
- (EMMessage )loadMessage:(NSString )aMessageId EM_DEPRECATED_IOS(2_0_0, 2_1_1, "Use - loadMessageWithId:");
- (EMMessage )loadMessageWithId:(NSString )aMessageId;
/!
@method
@brief 根据消息ID列表从数据库中加载消息
@discussion 如果数据库中没有某条消息对应的ID, 则不加载这条消息
@param aMessageIds 消息ID列表
@result 加载的消息列表
/
- (NSArray )loadMessages:(NSArray )aMessageIds EM_DEPRECATED_IOS(2_0_0, 2_1_1, "Use - loadMessagesWithIds:");
- (NSArray )loadMessagesWithIds:(NSArray )aMessageIds;
以上就是关于集成过环信SDK后 是怎么接受消息,又是怎么把消息显示到界面上的全部的内容,包括:集成过环信SDK后 是怎么接受消息,又是怎么把消息显示到界面上的、艾尔登法环信送给谁、环信camerahelper怎么获取等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)