玩过微信直播吗?---凡信3.0携直播和红包而来
资源相关:APK体验地址:http://fir.im/wy79
github工程源码(主要更新源):https://github.com/huangfangyi/FanXin3.0
二维码安装:
作者QQ:84543217(QQ也只处理外包开发需求)
凡信开发者讨论群:366135448
APP红包功能讨论群(android+ios):437758366(1500名小伙伴等着你哦!)
凡信背景介绍
对于凡信项目的背景在此不再赘述,不了解的前往:https://github.com/huangfangyi/FanXin2.0_IM
或者:http://www.imgeek.org/article/825307627
前言:
由于凡信的1.0和2.0都是基于环信SDK 2.x系列开发,而当前环信官方力推的是3.x的系列SDK,在此背景下,作者决定将凡信迁移至3.x的demo上。迁移的同时,对存储机制和网络接口做了一定的优化。与此同时,针对时下火热的直播APP,结合环信的聊天室功能和ucloud,做了两个模块-观看直播和进行直播;针对IM场景中常见的发红包/抢红包,集成了由环信提供的红包SDK,对于想做红包以及账户管理的开发者,是一种非常值得推荐的解决方案,一是开发者不用头疼于安全问题,以及开发中逻辑不严谨导致的资金转移丢包的问题。
此次更新分三个部分进行详细介绍
- 直播功能
- 红包功能
- 对凡信2.0已有功能的重构以及优化
- 一是观看的视频来源(拉流)
- 二是主播直播的实时视频的推送(推流)
- 三是直播间:主播与粉丝之间、粉丝和粉丝之间的字幕互动
- 观看直播(拉流)和开始直播(推流)只需要传入一个rtmp视频流即可,本项目用了一个香港卫视的电台直播视频流方便大家测试,另外一种就是通过设置直播间id进行推流,然后输入对应id进行拉流的方式,开发者可以通过两部手机进行测试。前提是保证网络环境良好。
- 直播间的互动,一般直播直播平台会有打字弹幕、赠送礼物、私聊等功能,综合起来也就是通信问题。目前凡信中基于环信的聊天室功能,完成了打字互动的部分,其他部分可以依据这个原理实现,无非就是对消息进行分类(聊天消息、礼物消息、私聊消息)。
二、红包功能:-采用云账户提供的红包SDK实现 红包在社交APP中的需求越来越多,对于这块的自主开发涉及问题至少会包含以下两点:一是安全问题--支付安全和资金安全。二是丢包问题,如红包玩法中,发红包的资金涉及冻结资金,领取的要结算,过期的要回账,还例如领取状态的通知回调等等。越是复杂高频的收发红包及转账场景,怎么在移动端及服务端保证每笔交易都有完善的跟踪和容错机制,都是开发者必须要考虑的问题。然而设计一个完整的解决方案并研发成功,需要投入的技术成本和时间成本是非常高的,然而红包仅仅是APP的一个辅助模块而已,占据过高的成本得不偿失。为此,环信联合云账户推出了适用各种应用场景的红包SDK,帮助解决这个效率问题,开发者可以利用简单的几个小时完成一套红包解决方案。如果有小伙伴对红包或者账户资金管理功能感兴趣的,可以加入红包功能讨论QQ群:366135448,一起探讨APP变现模式,以及红包的新玩法。 部分APP截图如下:
三、针对凡信2.0已有功能的优化[list=1]
部分APP相关截图
1.朋友圈相关
2.主页相关
收起阅读 »
趋势•变革--2016中国企业互联网技术论坛
地点:北京市海淀区板井路69号 地铁10号线“车道沟”A口出,直走步行15分钟
时间:2016年07月30日 08:00
参会报名:立即报名
会议简介
这是有史以来第一场专为企业级服务领域量身打造的技术论坛;
大咖云集,也是洞察TO B领域技术的豪门盛宴!
7月30日北京世纪金源大酒店,崔牛会夏季论坛精彩呈现……
你可以与行业技术大咖零距离探讨,可以感受这群正在改变未来企业服务领域的幕后英雄;
与他们一起去思考不断涌现的新技术会对未来企业级市场的影响。
CEO,应该关注,因为技术会决定未来的商业模式;
CTO,更应该关注,他可以让你站在技术的最前端;小技术大场景,透过趋势看变革,你值得参与 TO B豪门盛宴……
附:论坛日程
收起阅读 »
产品经理千人峰会--环信邀您共探大变革时代的产品设计创新
由中国最大的产品经理社群PMCamp和易观联合主办的第六届中国产品经理大会((PMCon2016)将于2016年7月23日-24日在上海举行。
本届大会主题为: “大变革时代的产品设计创新”。我们正处于一个过度竞争、注意力过度分散、变化太快、资本市场太冷的艰难时代。也是一个机会超多,用户基数巨大,好产品能快速脱颖而出的幸运时代。大会将邀请来自互联网、传统行业、服务业、新型创新企业的CEO、产品总监/VP、战略专家们,产品实战派专家们,将邀请各个领域的专家来分享如何在大变革时代进行产品设计创新,如何在资本狂潮消退后理性地看待产品价值,通过良好的产品设计和卓越的产品增长运营获得成功,如何抓住大航海时代的机会出海淘金等话题。围绕大变革时代的各种机会和问题,探讨产品商业模式、产品设计方法、产品运营、数据分析,展示产品成果,为CEO,产品经理,一切关注产品创新、创业的人搭建一个学习交流、思想碰撞的干货分享平台。
自2010年起,PMCamp已经举办过五届产品经理大会,三届互联网运营大会、两届数字营销大会、五届人本设计大会,以及近百场的产品经理工作坊、设计工作坊、产品经理沙龙等线下聚会活动。正在筹办互联网产品增长大会。5年来,已经有超过10万人关注PMCamp,1万多人参加过PMCamp的活动,600家企业代表参加过PMCamp组织的活动。届时将会有数十家媒体报道,国内著名门户网站、社交网站、O2O、移动互联网等各个领域产品和设计专家参与,无论您处于互联网行业的哪个领域,这都将是让您受益匪浅不可错过的一次盛会
大会日程
7月23日是大会,全天共有8个演讲,2个圆桌论坛,1次茶歇。
08:15-08:50 签到
08:50-09:00 开场演讲和日程介绍 大会主持人
09:00-09:40 演讲1
09:40-10:20 演讲2
10:20-10:25 休息
10:25-10:55 演讲3
10:55-11:25 演讲4
11:25-12:05 圆桌论坛
12:05-13:30 午餐
13:30-14:10 圆桌论坛
14:10-14:50 演讲5
14:50-15:30 演讲6
15:30-15:45 茶歇
15:45-16:25 演讲7
16:25-17:05 演讲8
17:05-17:10 合影、抽奖
大会嘉宾:
1 苏杰,良仓孵化器创始合伙人,B12合伙人,前阿里巴巴产品专家
2 laladu(杜娟),滴滴国际部负责人,曾任腾讯微信事业部品牌广告第一人
3 蒋越,平安好医生医疗线资深产品总监,前阿里巴巴产品专家
4 季毅华,携程旅行网基础业务产品总监,11年+产品经理
5 郭炜,易观 CTO,曾任联想研究院大数据总监,曾在IBM任职
6 姜沈励,1号店产品总监,1号店产品大学创始人和负责人,曾在新浪、安居客等负责产品
7 张溪梦,GrowingIO创始人及CEO,前LinkedIn高级总监
8 百度地图 产品总监 (确认中)
移动互联网产品出海淘金论坛嘉宾:
1 Summer Xia,夏雯,谷歌开发技术推广部中国谷歌开发者社区项目经理
2 范路,猎豹移动投资总监
3 袁潜龙,乐蛙科技联合创始人兼COO,前龙旗控股VP
4 王佳梁,触宝科技联合创始人兼CEO(确认中)
互联网金融圆桌论坛嘉宾:
1 孔令欣,点融网 CTO,美国斯坦福大学计算机学和心理学双学位,四次互联网公司创业
2 蚂蚁金服 产品总监(确认中)
3 唐灏,陆金所 产品研发部副总经理(确认中)
4 挖财 产品总监(确认中)
报名连接 PMCamp 收起阅读 »
android扩展消息(名片集成)
首先呢,大家要注意环信IOS版的扩展消息ext不能接收json格式数据。。。(之前不知道,ios把我坑了一次)
接下来,我就给大家来集成下名片消息
要想在ios端显示出来,那么必须两个客户端的扩展字段必须相同,这个大家一定要知道
我的扩展字段是这样的,上面也解释的很清楚,大家不要看错,是名片上的,不是自己的id,昵称
接下来我们要去定义几个常量在chatFragment里面,这里的常量需要该小,不然会报数组越界错误
定义好之后,那么接下来我们需要到chatFragment里面去注册这个按钮
对,没错,就是这么简单,注册一个按钮,然后,我们需要到onExtendMenuItemClick这个方法中写名片按钮的点击事件
大家看到了是个startActivityForResult,看到这里,肯定接下来就是去到REQUEST_CODE_SELEST_MINGPIAN里面接收data
REQUEST_CODE_SELEST_MINGPIAN是写在if(resultCode == Activity.RESULT_OK) {}里面的
接下来我们需要去CustomChatRowProvider这个内部类里面去设置发送接收,大家需要注意getCustomChatRowTypeCount(){}方法里面必须要加上2,这个2的意思就是说发送和接收名片
这里大家应该可以看到,我只写了发送名片,没有写接收名片,原因就是我不需要自己点自己发送出去的名片,所以没写,这个如果要的话,照葫芦画瓢,SoEasy
接下来这个非常重要,这个是名片消息的ChatRow,就是载体
对,就是new一个chatRow出来,这个chatRow在easeui里面是没有的,所以需要我们自己写
必须注意,一定要继承EaseChatRow,不然就调不出onInflatView,onFindViewById,onUpdateView,onSetUpView,onBubbleClick这几个方法
这个方法名已经很明显了onFindViewById,也就是说,在这里绑定布局里面的id,最重要的方法是onSetUpView
这里设置完了之后,基本上就好了,布局我没有放出来,等会看运行之后的效果
这几个方法的意思大家去看EaseUI里面的EaseChatRow
到最后,我们还需要一个步骤,就是去DemoHelper里面监听消息是不是名片扩展消息
是不是很好理解,这个完了之后,运行。。。。
完美!!!
如果大家还有什么问题,那么就加入环信IM互帮互助群 340452063认准杭州-android-中草,龙瞎头像,找我,帮你解答一切扩展消息问题 收起阅读 »
ios V3.1.4 Android V3.1.4 release,支持华为推送,新增群组@功能
本次SDK更新主要是对红包、UI 功能的优化,支持了支付宝、解绑银行卡 ,Android支持了华为推送,群组新增@功能,具体如下
Android V3.1.4更新日志
新功能/优化:ios V3.1.4更新日志
1. 支持华为推送
2. 聊天室获取详情后可以通过相应api获取到成员列表及成员数
3. easeui及demo增加@消息
红包相关:
1. 支持群内的专属红包,只有指定用户才能抢红包;
2. 支持支付宝;
3. 支持系统发的群红包,用户只能看到自己的领取情况;
4. 支持绑定多张银行卡,支持解绑银行卡;
5. 零钱页支持充值;
6. 改版零钱页;
7. 支持上传身份证照片做第三通道验证;
8. 红包UI细节打磨,包括双title和各个页面细节,安卓和iOS文案统一;
9. 错误信息梳理,关键错误基于对话框引导;
10. 服务端性能数倍的提升;
11. 红包数据平台完善统计项;
12. 其他优化:优化代码结构,剥离第三方库减少和开发者库的冲突;透传消息仅给发红包用户而非群内全部用户;优化token获取和更新机制;修复若干bug。
新功能:
1. 聊天室增加可以获取成员和成员数的接口
2. 会话增加接口- (BOOL)appendMessage:(EMMessage *)aMessage
3. 提高SDK稳定性
4. 支持群消息@功能(在EaseUI和Demo中实现)
• 支持@all, “ext”:{“em_at_list”:“ALL”}支持
• @单个或多个成员, “ext”:{“em_at_list”:[“username1”,“username2”]}
• 如果用户设置了推送显示消息详情,被@的用户会收到推送 “XXX在群中@了我”
红包相关:
1. 支持群内的专属红包,只有指定用户才能抢红包;
2. 支持支付宝;
3. 支持系统发的群红包,用户只能看到自己的领取情况;
4. 支持绑定多张银行卡,支持解绑银行卡;
5. 零钱页支持充值;
6. 改版零钱页;
7. 支持上传身份证照片做第三通道验证;
8. 红包UI细节打磨,包括双title和各个页面细节,安卓和iOS文案统一;
9. 错误信息梳理,关键错误基于对话框引导;
10. 服务端性能数倍的提升;
11. 红包数据平台完善统计项;
12. 其他优化:优化代码结构,剥离第三方库减少和开发者库的冲突;透传消息仅给发红包用户而非群内全部用户;优化token获取和更新机制;修复若干bug。
版本历史:Android sdk更新日志 ios sdk更新日志
下载地址:sdk下载
关于新版sdk使用有任何问题或建议欢迎在下方评论留言。 收起阅读 »
android怎么导入demo(androidstudio和eclipse)
不多说,首先下载官方demo
然后呢,你就会看到这里面很复杂很复杂,像eclipse项目也像androidstudio项目
对不对,如果你用的是androidstudio,那么请按照下面的步骤继续往下看。。。。如果你是用的是eclipse别急,等会再给步骤
对没错,删除红框框里面的东西,然后打开androidstudio
选择import project(eclipse ADT,Gradle,etc),然后一直next,到最后等待。。
完成之后,这就是你的项目结构。然而,别激动,
请将jni里面的文件删除,我也不知道为什么,如果不删除编译的话,机会报ndk错误,什么的,但是我的ndk已经配置了,如果有知道为什么的大神请告诉我。。。。
下面开始eclipse的导入介绍部分:
删掉这些,删掉原本不属于eclipse项目的东西,然后打开eclipse导入。
最后,你会看到这个项目结构,如果有报错的话,请用android6.0去编译项目,总体来说,eclipse简单一点
那么,到现在,这个是可以运行的,如果还有其他错误,请联系我QQ:2116572866 收起阅读 »
环信刘俊彦:做2B产品 在资源投入上BAT没什么优势
在TMT及人工智能分会场企业服务论坛中,环信CEO刘俊彦表示,“做2B产品,做SAAS产品,是研发驱动的产品,BAT擅长的是资源,就像我们挖坑种树一样,刚开始我的人才架构,我的产品架构决定我前面只能挖十个坑,只有十个坑可以种树,所以BAT虽然有再多的钱再多的人投不上来也是没有用的,如果我投的早,其实还是很难赶超我,在资源投入上BAT没有什么优势。”刘俊彦说。
以下为环信CEO刘俊彦在TMT及人工智能分会场企业服务论坛中的发言速记整理:
大家好,我是七期的星友是环信的CEO刘俊彦。环信有两个企业级服务产品,一个叫环信及时通讯云,这是一个2D的产品,开发者如果想做一个APP,想有微信的功能,单聊、群众聊,发语音、发图片、发文字,以前要自己开发,今天找到我来,可能只需要半天时间,像插件,就有完整的像微信这样的功能。第二是SAAS产品,是环信客服,是一个客户服务软件。说我们为什么做企业服务呢?我做这些年最大的感触是企业服务是脏活、累活,很难,有时候是劳动密集型的行业,尤其是做SAAS,我算过在SAAS客户上已经投入几千个人/月,以前做传统软件,客户给你200万,你签了合同,投进了去开发,你上来就有钱花。
SAAS软件不是这样,客户有很多的功能,达不到这个基本的功能门槛,根本不可能跟用户签合同,用户也不会给你付钱,但你要达到这些功能,没有几天或者一个月的投入开发,你可能根本没有进到这个市场的资格。所以这是劳动密集型的行业。好处是一旦做好了,它的门槛很高,而且后续的发展也比较稳定。举个例子,看到很多最近从去年到今年比较新的SAAS公司,我知道一些SAAS公司做了一两年之后,很快他们的月度可重复性收入,做了一年就达到几百万人民币。什么概念呢?什么叫MR,一个企业,SAAS服务是按月交钱,一般来说你不能一个月给我,你得一年给我钱,给我十万块钱,每个月会计的收入可能是十万块钱的1/12,当你积累到每个月MR都在增加,现在有的企业一个月200万的MR什么意思呢?就是这个企业今天不干活,大家除了研发、销售都歇着了,只要你这个客户没有流失的话,他其实想离开你很难,每个月这个企业再活五年、六年,这个企业每个月都可以有几百万的收益进来。做SAAS企业的好处是现金流很好,一点都不愁钱,只要你不断的在改进产品,不断的吸引新的客户进来,你的收入就会不断增加。这个生意是非常稳定的生意。现在我们看到有一些资本寒冬,为什么很多投资人可能创业者非常关注企业峰顶,其实某种程度上就是企业级服务领域,包括SAAS的软件力,他的投入非常简单、非常清晰,是绝对不烧钱的,这也是很多人现在大家非常关注企业服务领域的主要原因。
这个问题我也经常被问到,就我自己的行业来说,SAAS客服和通讯云来说,有几点决定了和BAT跟我们创业公司竞争并没有太大优势。2B和2C的产品完全不一样,2C的产品好多时候可以用程式来驱动,你看一看别人怎么做你就可以回去抄了,决定这个东西产品成败的元素不是产品做得多好,技术多好,是资源技术推广运营做得怎么样,以我们的行业为例,我们做SAAS客服,有没有见过两千个客服坐在一个屋子里怎么工作,怎么排班,怎么管理,我们普通人想像不到的,咱们没有这个知识,对于BAT来说,他们获得这个知识跟我们获得是一样难的,作为创业公司如果早进入这个领域它的壁垒比较高,BAT也没有这个知识,不是靠常识获得的。
第二,做2B产品,做SAAS的产品是研发驱动的产品,是研发运营的东西,BAT擅长的是资源,就像我们挖坑种树一样,刚开始我的人才架构,我的产品架构决定我前面只能挖十个坑,只有十个坑可以种树,所以BAT虽然有再多的钱再多的人投不上来也是没有用的,所以这种情况下就是你有做的钱、做多的人我们都在前线只能投10个人,如果我投的早,其实还是很难赶超我,在资源投入上BAT没有什么优势。
第三,从销售上来说也是这样的,做电梯广告的时候有就要用到了,做多的广告,对2B的销售没有任何帮助。作为很多BAT来说,他们擅长什么,有的是流量,有的是钱,但是很可惜这个流量和钱对于2B软件的销售没有任何帮助,你不能投电梯广告,你现在的用户都是2C的用户,你再怎么导也导不成2B的用户,你真的要养几十个、几百个销售,躬下腰去干活,BAT来说他与其挣钱挣的很容易,他愿不愿意躺着挣钱,愿不愿意爬着挣钱,养几千个销售挣这么累的钱,从现在看事实是这样,他们很多是选择不挣这个钱。
从这三点综合来看,我们认为在2B行业竞争从BAT来说和创业来说,大家的门槛都差不多,他们没有任何额外优势。具体到我们的案例来说,我们做环信通讯云的来说,在过去两年里面,腾讯、阿里都有跟我们类似的产品,曾经有一段时间各方面都做了很多宣传推广,现在我还坐在这儿跟大家聊天,我们曾经的竞争对手可能都销声匿迹了。这是一个事实的证明。
其实我最开始创业的目的是希望能够让创业者更轻松的创业。当时我做环信这个项目,根本源大家知道在三年前陌陌刚刚兴起,所以很多创业者都在做移动社交方面的创业,总找我来说他想做一个聊天的应用,像微信一样,以前的话是要自己搞好几个工程师,搞上半年到一年的时间,做的基本可用,我觉得这个事情其实大家每个项目创业者在这方面浪费太多的时间,能不能找到我来花一小时就把这个事情搞定,把节约下来的时间和钱雇更好的美工和工程师,来做更好的用户体验,这是我当时想创业的核心目标。其实在过去两年里面,我们有更多的产品线,我们一直是在往这个目标努力,希望做得更好。最近视频直播很火,我们一直有视频直播的解决方案,后来发现其实做得还不够好,拿到我们方案去之后,很多开发者在集成视频各方面的时候还需要一个月的时间。所以我们最近正在做一个工作,一站式的视频直播解决方案,把客户端的DEMO都做好了,看上去跟花椒、映客都差不多,开源的,你拿回去之后你要是一个土豪,你可能有很多美女,把这个皮换一下,两天就上线了,你的专业价值不在于你懂这个视频直播技术怎么做,体的专业价值在于你的资源,你知道运营怎么搞,所以这是我们一直想做的事情,让有资源的人更好的发挥自己的资源,把他的时间、精力不要花在他不擅长的地方,我们去做某个点,把这个点做好,你付给我钱,这就是我们想做的事情。 收起阅读 »
为啥说“PaaS+SaaS”正逐渐成为企业级服务标配?
环信获得“2016年度最具投资价值企业级服务商”奖
以下为专访实录:
环信当前有两条产品线,一个是即时通讯云平台,一个是环信移动客服,两个产品间有什么关系?
刘俊彦:这个问题非常好,最近有谣传说我们不做即时通讯云了,只做移动客服了,其实环信即时通讯云和环信移动客服一直都是我们的核心业务,我们的环信即时通讯云不仅在做而且做得很好一直是行业第一。环信移动客服就是在我们环信即时通讯云PaaS平台上孵化出来的SaaS产品。这种SaaS产品具有天然的技术优势和获客优势。比如环信移动客服所使用到的环信IM长连接技术可以保证消息必达,不丢客服不丢单,而SaaS客服友商们一般都需要集成第三方的IM服务。环信即时通讯云PaaS平台的用户有SaaS客服需求自然会第一时间选择了环信的服务,一家2B企业有一个稳定的持续的优质的流量来源,对于企业的快速发展帮助很大。也正是因为环信这种“PaaS+SaaS”布局使环信获得了包括红杉、经纬、SIG这些世界一流的投资机构的投资。同时,最近您会发现市场上有几家企业级服务SaaS领导厂商都在补齐自己的PaaS产品,你就可以看出“PaaS+SaaS”是最有生命力最具投资价值的企业级服务模式,环信因此也获得了品途和清华颁发的“2016年度最具投资价值企业级服务商”大奖。
环信移动客服产品线的使用场景有哪些?
刘俊彦:我们以前以为环信就是做社交,连接人和人。做了以后,很多用户在我们不知道的情况下,已经用环信即时通讯云在做客服了,在连接人和商业。比如跨境电商应用,买手在威尼斯,在罗马,买家在国内,他们通过环信沟通货品颜色,款式。其实这个时候就是客服,环信IM天然就有两个场景,一个就是连接人和人,一个场景就是连接人和服务。
环信移动客服现已覆盖包括电商、O2O、互联网金融、在线教育、在线旅游、移动医疗、智能硬件、游戏等领域的Top10客户,典型用户包括国美在线、58到家、楚楚街、海尔、神州专车,猎聘、汽车之家、链家自如客等众多标杆企业。
哪些场景适合通过智能客服机器人去参与?
刘俊彦:客服行业落地,有几个场景。第一,售后领域,问题比较集中,可能就是50个到200个最常问的高频问题,这些问题如果通过大量的历史数据,通过机器学习模型总结就会节省很大的人力成本。第二,售前领域。环信针对售前场景推出了人机混合模式技术,机器人可以提供给人工客服最优备选答案,人工客服需要选择最合适回答点击发送即可。因为售前领域是很多做人工智能客服的公司没有很好的解决的领域。环信在探索中看到人机混合模式确实给企业带来了价值,提升了很多的效率。
怎么平衡用户使用产品过程当中成本和收益?
刘俊彦:收多少钱一定带来足够回报才可以。所以,我们看到了整个企业服务行业里面看到很有意思现象。很多企业在提价,这个事情在过去一年里面,都是有很多的争论,做免费企业服务,还是收费企业服务。做中小企业,还是做大企业。两个争论到今年基本上已经盖棺定论。第一,要收费,第二,做大型企业。最后都要回归商业的本质,就是可以给用户带来多少价值?给企业带来多少回报。。
环信即时通讯云在接下来半年中将会有什么新的布局?
刘俊彦:环信即时通讯云一直是我们的核心产品。最近推出几个新产品,首先推出了环信反垃圾系统。我们很多做社交的APP,上了IM以后遇到很多困扰,比如说各种垃圾信息骚扰、各种广告、以及黄赌毒信息等。以上问题很多企业没有能力做大量投入,所以,环信就基于人工智能和行为规则做一套反垃圾系统。
环信最近还推出了社交大数据平台。很多企业用IM目的是什么?是希望IM帮助他提高用户黏性,提高活跃度,提高留存率。而环信社交大数据平台,是分析用户的关系链,分析用户的聊天行为。他们的社交关系链在增强还是在减弱?同时,环信产品一直在根据市场的变化孵化新的产品,包括最近很火的红包和视频直播。环信红包可以帮助APP提高活跃度,后续还可以帮助APP变现以及嫁接更多增值服务,是环信探索的一条新路。视频直播现在是风口,环信客户也有很多这种需求,自然而然环信也推出视频直播一站式解决方案。
环信作为中国最大的即时通讯云PaaS平台,您认为企业服务商可以触碰客户数据吗?
刘俊彦:不可以。这一点环信的态度非常的坚定。环信只通过标准的产品和服务收费,绝不触碰客户的数据做任何其余变现。 收起阅读 »
环信凭什么入局Gartner报告 影响Saas客服未来的三要素
环信荣膺Gartner 2016 Cool Vendor
对于何为“cool”,在中国可能的理解有很大不同,是最快融资?被巨头收购?还是被媒体热捧....而在Gartner的眼里,只有“拥有重塑行业的破坏性技术或商业模式创新”,才能被称为“cool”。酷公司需要具有领导某个垂直领域强大的、让人耳目一新的能力,稳健的把握了高热度的市场趋势。
最近,有外电给出了答案,仅有包括环信等5家在云计算、大数据和移动领域引领了市场趋势并专注革命性创新的公司最终进入了Gartner 2016 Cool Vendor China名单,这几家公司名头也许都不是很大,也不像BAT那样光鲜亮丽,但却都有“酷”的共同创新潜质。当然,这也符合 Cool Vendor一向的评选规则,就是专门选择那些创新性强、知名度局限在一定范畴内的技术、服务企业。它们就像重型炸弹,一旦爆发,就会重新定义市场。
怎么看待环信入选Gartner Cool Vendor China这回事
登入Cool Vendor的名单并不是一件容易的事,与国内一些数据报告、企业排行的榜单比,惯性思维猜测,Gartner会不会是一份商业化的名单?答案是否定的,因为这是Gartner分布在全球的分析师调查、研究的结果。
Gartner Cool Vendor通常遵循如下三条标准:
第一,创新性,参评企业是否有前瞻性的技术、产品,是否能够为用户提供“以前没有听说过的、没有用过的”产品技术,是否能够为用户“创造全新的体验”;
第二,影响力,这一影响力并非是参评企业是否在行业或市场内具有影响力,而是其技术是否对用户的业务产生影响。
第三,这家企业在过去一年一定是引起了Gartner的关注的。每一年,Gartner的分析师们都会在各个领域寻找新鲜血液,搜寻行业内新兴发展起来的初创公司,加以关注和分析,从中挖掘其独特的价值。
对于进入这一名单,环信CEO刘俊彦认为,入围的企业往往是创新性、技术影响力表现突出的企业,有没有前瞻性的商业或技术创新,以及技术是否对用户、市场产生重大颠覆和影响,这很关键。看看之前上榜的名单就明白了,Skype、Snapcha、Instagram、VMware,以及当前的明星企业Nutanix、Splunk,都曾榜上有名。
环信能入选,在于其背后的云通讯能力正成为新商业的标配,在任何生意模式都回归到“连接人与商业”的本质后,通讯能力就变成了一个开放性的功能模块,并且给企业带来创新性的业务模型。SaaS客服就是云通讯平台上“生长”出来的场景化的应用。Gartner为什么认为环信是Cool Vendor的代表呢?Gartner给出的评价是这样描述的——环信的移动客服SaaS平台提供了强壮的APP内置客服支持能力,并集成了支持多渠道接入的客服工作台,截止2016年上半年,服务了国内2万多家客户,经受住了5亿用户的验证。
表面看起来,SaaS客服领域的门槛并不高,实际上技术上难度相当大。目前,SaaS客服产品在宣传层面趋于同质化,比如噱头上都贴着“支持全媒体接入”的标签,包括电话呼叫中心、网页客服、微信公众号、APP内置客服,但前三个渠道技术很成熟,难度也低,只有APP内置客服接入这一渠道,有非常高的技术门槛。
环信CEO刘俊彦表示,传统网页在线客服基于HTTP轮询技术,不断向服务器发送查询请求来收取消息。但APP内置客服要解决移动弱网络环境下客服咨询绝不掉线、绝不丢消息的挑战,还要对数千款碎片化的Android手机的完美适配,并支撑亿级用户的同时在线,传统网页客服所使用的技术是完全不适用的。截止2016年上半年,环信独有的IM长连接技术经历了82149家APP及5.64亿用户在线的实践考验,每日发送信息5.57亿条。这一移动端上的技术领先优势是同行所难以企及的。道理很简单,其他平台从未承载过亿级规模的海量用户,没有经过验证的高并发能力,在移动弱网络环境下,消息容易延迟或丢失,在“连接人与商业”的时代,这是致命的。
移动+智能机器人是SaaS客服核心竞争力
其实,SaaS客服市场在中国有不少的选手,但只有环信一家进入了Gartner的Cool Vendor名单,很多人觉得奇怪,但理由其实很简单,客服软件的主战场一定是在移动端,谁在今后2年里赢得了移动端客服软件这场战役,谁就可能赢得整个客服软件的竞争。而移动端APP上最好的消费者和客服的沟通形式,只有一种,就是IM。这已经被微信,陌陌,淘宝旺旺的成功所验证。恰恰,环信最擅长的就是移动IM长连接技术。按Gartner的评价说,环信在移动端客服软件市场处于一个绝对垄断地位。
同时,人工智能正在改变客户服务行业的工作方式和劳动力结构。未来,中国劳动力人口呈现连续下降趋势,传统客服行业是劳动密集型行业,运营成本将越来越高,这会倒逼企业从传统客服转向SaaS客服市场,从话音呼叫中心转而采用全媒体客服的模式,尤其是智能机器人的广泛应用,将取代大部分的人工,以往的人工会向高级咨询顾问升级,所以说,出现普通劳动力失业的现象会是必然。因为这是一场效率的革命。而这也是环信能拿到Cool Vendor称号的另一个重要原因。环信智能客服机器人已经在客户服务的售前,售中,售后的多个环节得到了大量的应用和实践。这其中即包括售后环节下标准化的,重复性的客服需求,也包括售前,售中等环节中高客单价,需要深度挖掘销售机会的场景。
基于人工智能和大数据的“客户声音”才是未来
有人会问,SaaS客服的未来究竟在哪里?在传统客服链条上,客户服务被认为是成本中心。但实际上未来SaaS客服一定会承载营销、销售的功能,从成本中心转向利润中心。Gartner就SaaS客服的发展趋势也给出了预判,环信能上榜,也是因为这一点。因为一些企业已经开始利用环信的SaaS客服产品实现服务式的反向营销,通过人群打标签的画像能力进行精准营销,转化率也极高,帮电商企业实现了订单数与客单价的双重提升。
环信推出的“环信客户声音”就是一款基于人工智能和大数据挖掘的客户行为透析产品。可以通过自然语言解析,主题聚类,情感度分析等技术挖掘和分析热点话题,发现畅销或问题商品,分析发现服务中存在的问题,企业就此可以优化运营,还能利用大数据洞察力来发现销售机会。相比,国内同类的SaaS客服产品大多还停留在全媒体客服的接入整合阶段。环信CEO刘俊彦认为,未来,无论是哪个渠道进入的用户,都可以自动识别,并将多方数据统一到某一用户身上,只有这样,用户在任何接入点上,都能更准确地了解用户的需求、消费倾向。
Gartner将SaaS客服列入重点研究领域,也是因为看到了技术创新所带来的颠覆效应,而且,不管是传统行业,还是互联网行业,“连接人与商业”是未来五年的重要发展方向,SaaS客服扮演的正是连接工具的角色,其普适性及对商业的改造毋庸置疑,这恰恰也印证了Gartner对Cool Vendor公司的定义。
附Gartner高级分析师解析环信入选理由:
环信成立于2013年,成立之初专注于为APP提供即时通信能力推出了即时通讯云PaaS平台。截至2016年,环信已拥有两大核心产品线:即时通讯云PaaS平台以及移动客服SaaS平台。
其中,即时通讯云为移动APP提供嵌入式的移动即时通讯服务。这个包含了可定制UI的解决方案已被中国众多移动应用开发商采用,每天为超过60000家移动APP提供服务,日发送信息量超过两亿条。
移动客服SaaS平台包含了移动APP内置客服功能,并集成了支持多渠道客服接入的客服工作台。该SaaS客服产品的后端集成了环信的即时通讯云PaaS平台。在两年的时间内,环信客服产品就获得了中国国内11000家客户。2015年,该公司发布了智能客服机器人功能,并成为了其SaaS移动客服解决方案的组成部分。环信还进一步拓展完善了其SaaS客服平台的全渠道的接入能力,包括语音呼叫中心、网页客服、社交网络和移动APP。
为了能够在中国的社交媒体和消费级APP上提供客户服务,国际CRM供应商投入了大量的研发。有迹象显示他们将为应对该挑战增加投资。过去两年中环信在该领域非常成功,而且在市场上几乎没有竞争对手。
Easemob Beijing, China (www.easemob.com)
Analysis by Olive Huang
Why Cool: Founded in 2013, Easemob started as a communication platform as a service (PaaS) vendor that focused on instant messaging services. By 2016, Easemob had two key products in its portfolio: a mobile messaging as a service platform and a SaaS-based mobile customer service application.
The mobile messaging as a service platform serves as the foundation for mobile communications within mobile apps. This solution, which includes a customizable UI, is used by a large group of mobile app developers in China to power messaging communications for more than 60,000 mobile apps and deliver more than 200 million messages per day.
The SaaS-based mobile customer service application includes mobile in-app customer support functionalities and an integrated agent console supporting multiple channels; its back end runs on Easemob's mobile messaging as a service platform. In two years' time, Easemob's customer service app has accumulated more than 11,000 customers in China. Since 2015, the company has released virtual customer assistance functionality as part of its SaaS-based customer service solution. It also has further developed its mobile customer service platform to support multichannel customer services including voice, web, social media and mobile.
International CRM vendors have long struggled in their R&D to support customer service functionalities on Chinese social media platforms and consumer mobile apps. There are few signs that they will increase investments to deal with this challenge. Easemob has become very successful in the last two years with very little competition in the market. 收起阅读 »
iOS 1分钟集成环信单聊
上一篇:环信SDK思路
前言:
1.为了实现一分钟,我们只需要知道怎么做实现单聊功能就好。至于为何可以自己看源码。
2.这种集成方式适合在新建的工程中,或者是 你添加的工程的第三方与环信本身中的第三方没有冲突的工程中。
3.这是集成了一位我的好朋友的代码,因此我将时间缩短,并且会一直更新代码。
4.你需要原来已经在环信官网注册拥有了自己的账号,并且已经创建好了一个工程拥有至少一个Appkey。
5.功能并不完善,因此要是看完善功能,建议看官方demo或者其他的博客文章资源。
6.目前版本是最新环信V3.0.准确点是V3.1.3版本。
一.资源准备:
1.下载资源官方demo。ios官方demo
2.下载资源ChatDemo-UI3.00-Simple
3.下载360云盘内容网址(提取码:73a8)
二.集成过程:
1.新建工程“personChat”在桌面上。
2.解压ChatDemo-UI3.00-Simple会看到如下内容,并且将ChatSDK于ChatUI添加到自己的工程里面。
添加到工程.png
3.解压打开官方的demo,找到并将libHyphenateFullSDK.a 文件添加到目录【ChatSDK/HyphenateFullSDK/lib】下。(该目录是你刚刚拖进去工程中的目录)。
a.找到文件:
找到.a文件.png
b.添加到路径中:
添加到路径中.png
4.添加10个类库名字如下:
CoreMedia.framework
AudioToolbox.framework
AVFoundation.framework
MobileCoreServices.framework
ImageIO.framework
libc++.dylib
libz.dylib
libstdc++.6.0.9.dylib
libsqlite3.dylib
libiconv.dylib
添加类库
5.添加pch文件:将ChatDemo-UI3.00-Simple中的pch直接拖到自己的工程来。并且引用头文件。将pch中的红包功能注销掉。如下图:
a.引入pch文件:
pch添加
b.注销红包:
注销
6.把bitcode设置成NO,因为环信SDK不支持,如下:
bitcode设置为NO
7.comd+B编译运行。运行成功。
8.打开360云盘下载的demo。复制代码在AppDelegate.m 与 viewController里面。如下:
AppDelegate.m里面
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {在viewcontroller.m 里面如下:(不要忘记引入头文件)
self.window =[[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor=[UIColor whiteColor];
ViewController *VC = [[ViewController alloc]init];
UINavigationController *nav =[[UINavigationController alloc]initWithRootViewController:VC];
nav.navigationBar.backgroundColor =[UIColor whiteColor];
self.window.rootViewController = nav;
[self.window makeKeyWindow];
//为了实现单聊功能,我们可以先忽略推送证书
[[EaseSDKHelper shareHelper] easemobApplication:application
didFinishLaunchingWithOptions:launchOptions
appkey:appKey
apnsCertName:nil
otherConfig:nil];
EMError *error = [[EMClient sharedClient] registerWithUsername:@"1" password:@"1"];
if (error==nil) {
NSLog(@"注册成功");
}else{
NSLog(@"注册失败");//注册失败的原因往往是因为用户已经存在了,如果这样子就需要我们重新输入一个ID,重新注册
}
//此处是为了检查注册的账户能不能成功登陆成功。
error = [[EMClient sharedClient] loginWithUsername:@"1" password:@"1"];
if (!error) {
NSLog(@"登录成功");
}else {
NSLog(@"登录失败");
}
return YES;
}
#import "ViewController.h"9.最后更改plist文件允许访问http与https:
#import "UserCacheManager.h"
#import "ChatViewController.h"
#import "ChatUIHelper.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
UIButton *my =[UIButton buttonWithType:(UIButtonTypeCustom)];
my.frame = CGRectMake(100, 200, 200, 100);
my.backgroundColor =[UIColor greenColor];
[self.view addSubview:my];
[my addTarget:self action:@selector(myEvent) forControlEvents:UIControlEventTouchUpInside];
}
- (void)myEvent{
//注意此处的用户名与你的注册用户名应该一致,同时用户名就是ID
NSString *userName = @"1";
NSString *pwd = @"1";
[self showHudInView:self.view hint:@"Loading..."];
[[EMClient sharedClient] asyncLoginWithUsername:userName password:pwd success:^{
dispatch_async(dispatch_get_main_queue(), ^{
[self hideHud];
// 保存用户信息
[UserCacheManager saveInfo:userName imgUrl:@"http://img.yxbao.com/news_img/201312/10/1386652628_1.jpg" nickName:@"哈哈"];
//设置是否自动登录
[[EMClient sharedClient].options setIsAutoLogin:YES];
[[ChatUIHelper shareHelper] asyncGroupFromServer];
[[ChatUIHelper shareHelper] asyncConversationFromDB];
[[ChatUIHelper shareHelper] asyncPushOptions];
//发送自动登陆状态通知
[[NSNotificationCenter defaultCenter] postNotificationName:KNOTIFICATION_LOGINCHANGE object:@([[EMClient sharedClient] isLoggedIn])];
//在跳转的过程中需要写一个你已经注册好的用户ID,这样两个不同的用户ID才能实现单聊功能(我用了两个测试机测试,每一个测试机是一个ID)
ChatViewController *vc = [[ChatViewController alloc]initWithConversationChatter:@"werqwe" conversationType:EMConversationTypeChat];
[self.navigationController pushViewController:vc animated:YES];
});
} failure:^(EMError *aError) {
NSLog(@"%@",aError.description);
}];
}
更改pist文件.png
10搞定了。我去我算了算好像超过1分钟了。(ps:写了一个半小时我去!)
作者:环信热心用户 广州-ios-小草
环信IM互帮互助QQ群:340452063 收起阅读 »
环信集成SDK的思路
思路总结:
1.官方下载demo。
2.拿到环信的HyphenateFullSDK(包括实时语音、视频功能)与HyphenateSDK,任选其一。
3.新建一个工程或者是拿到要植入的工程。
4.把环信sdk拖到工程中(HyphenateFullSDK或者HyphenateSDK)。
5.添加类库,如下:
CoreMedia.framework如果使用的是 xcode7,后缀为 tbd。一共10个类库。
AudioToolbox.framework
AVFoundation.framework
MobileCoreServices.framework
ImageIO.framework
libc++.dylib
libz.dylib
libstdc++.6.0.9.dylib
libsqlite3.dylib
libiconv.dylib
6.SDK 不支持 bitcode,向 Build Settings → Linking → Enable Bitcode 中设置 NO。
7.更改网址设置为http与htpps全部允许。
8.comd+B 编译要是没有错误,证明导入没有问题。
9.添加EaseUI导入到工程中。
10.comd+B编译报错。
注意:此处是关键的部分,也是最浪费时间的部分,因此一定要有耐心,把所有编译爆红的都要一一解决掉。
错误类型:一般是三方类库冲突。(重复引入)11.comd+B编译,运行成功。
更改原则:仅仅保留环信的MJ刷新类库不变,其他有冲突的 三方库全部注释掉(仅仅指环信里面跟你工程有冲突的类库)。
12.单独的将环信demo中ChatViewController搞出来,直接添加到文件里面,把编译报错的地方注释掉。再次运行直到不再报错。
13.随便写一个点击方法,并且实现跳转到ChatViewController里面。
14.跳转过去基本上就能实现单聊功能了。
写这篇文章是为了下一篇详细的环信集成总结做概括。
下一篇:1分钟集成环信单聊
本文作者:环信热心用户广州-ios-小草,联系方式:环信IM互帮互助群QQ群340452063
收起阅读 »
【有奖调查】作为环信的一员,关于环信 数据你知多少?
环信成立于2013年4月,是一家企业级服务软件提供商。产品包括国内上线最早规模最大的即时通讯云平台——环信即时通讯云,以及移动端最佳实践的全媒体智能云客服平台——环信移动客服。
炎炎夏日,环信为小伙伴们准备了一批USB小风扇,让环信陪伴给您一丝清凉。下面做一套竞(song)猜(fen)题,只要您全部答对,就有机会获得定制版环信小风扇,包邮哦。
截至2016年上半年,环信共服务了___家APP客户?
50000/60000/82149
SDK覆盖手机终端__台?
3亿/5亿/5.64亿
平台日发送消息__条?
3亿/5亿/5.57亿
环信2015年底数据参考http://www.easemob.com/about
上次有奖调查(关于环信直播,你了解多少?)没有拿到奖的同学可以积极参与啦!
本次有奖调查的时间为: 2016年7月7日-7月14日
开奖时间: 7月15日下午3:00
友情提示:
活动奖品由ImGeek提供,由ImGeek抽取中奖用户,最终解释权归ImGeek所有。
话不多说,上风扇!
开奖开奖!中奖用户请私信我【地址、联系电话、姓名】,你的环信小风扇下周就会到达你身边!
采用我们写的Luckyone抽奖程序在线抽奖,代码已经开源,确保公平公正
@舟舟
@陈日明
@江南孤鹜
@-人至贱则无敌-
@♓️Le vent se lève
@hzw87383197
@huangfangyi
@一直走,累了我背你。
@ly9999
@xihayouyi
@我心中尚未崩坏的地方
@思航
@wzpforwork
@rongrong
@HONG
@617714867qq
@易智科技
@逍熊
@zoulu1
@leeii
收起阅读 »
基于环信做一个”微信“项目,高仿微信2.0 Github 2,406 Star,你值得参考!
关于高仿微信不了解的同学可以点击查看高仿微信1.0
每个程序员心中都有一个自己的微信,而我要找到属于我的微信!
高仿微信 2.0版本发布了
V 2.0
1、重构项目,代码逻辑更清晰。
2、加入红包功能,使聊天更有趣味性。
3、让微信更好玩儿,将用户体验做到极致!
微创新
很多人觉得产品创新是很简单的事,无非是在已有的产品上修改或者增补。这是我们看到的诸多创新的来源。
创新并不需要颠覆,哪里有那么多颠覆性创新。但是,这并不是说我们就应该无所作为。创新不是为了和竞争对手比较,不是为了让媒体多一个传播噱头,创新只是为了让用户可以更好的解决问题,或者拥有更好的使用体验。
驱动力
创造价值与分享价值
在真正能够解决市场上的某类问题,提出解决方案,只有有价值,才能被认可。
做开源项目不易,真正能够坚持下来的动力,寻求价值感,也就是希望能够被认可。
好玩儿
我觉得 “ 好玩儿” 才是做开源项目的兴趣所在!
微信那么庞大的体系,细微调整必将引起行业轩然大波,
而我的高仿微信项目,就可以随便玩儿了,可以加入更多微信想做而做不了的事情。
比如 微信红包
其实 红包是很好的需求,能够真正把社交给搅活,而且细分场景很多,微信只能实现大众的需求,不能做场景细分,满足特定人群的需求。我觉得,微信在红包这个功能点上,只发挥了20%的价值,还有80%价值未发挥出来。
人人都是产品经理
当你站在微信产品经理张小龙的角度,来看待微信,重新组织微信的功能架构,用户体验如何去做,每个功能点背后都有哪些洞察人性的考虑,相信,等自己真正梳理一遍的时候,发现对产品的理解已经提高的很多,比起整天看一些产品经理的文章要有效的多,实践大于理论。
写到最后,有人问我,你为什么要做个微信啊?
我回答到,每个程序员心中都有一个自己的微信,而我要找到属于我的微信。
另外附上一首简单的禅诗:
To follow the path:
沿着这样一条道路:
look to the master,
关注大师,
follow the master,
跟随大师,
walk with the master,
与大师同行,
see through the master,
洞察大师,
become the master.
成为大师。
高仿微信2.0 源码下载点击进入
安装包下载点击这里
QQ交流群:476988719 收起阅读 »
imGeek“开源专区”全新上线,改变世界从这里开始
imgeek的创办者们,都是在即时通讯(IM)领域的极客们, imgeek就是指即时通讯领域的极客们
imgeek,也意指I'm极客,统指所有极客们的家园
imGeek社区标识
imgeek社区成立之初,我们就努力将imgeek造成为一个充满开放、互助、协作、创意的极客社区 !你在这里的提问和分享,都将得到伙伴们的热情回复,在这里,你的问题将不再是你一个人在思考。
环信CEO刘俊彦赠书
响应着社区“我为人人,人人为我”口号的号召,涌现了一大批“赠人玫瑰,手留余香”的极客们。
正是这些义无反顾的极客们,开放出了各类原创的开源项目,与全社区共享,感谢你们!
imGeek社区代码模板截图
imGeek开源专区http://www.imgeek.org/code/ 收起阅读 »
环信移动客服v4.9产品更新--客服在线状态自定义切换
【新增】在线状态
客服和管理员的在线状态增加忙碌和离开,更新为五种:空闲、忙碌、离开、隐身、离线。
- 空闲:当客服以常规方式登录客服系统时,状态为空闲。空闲时,可以自动接入新会话以及同事转接的会话。
- 忙碌:当客服工作量达到饱和时,可以主动将状态切换为忙碌。忙碌时,不会自动接入新会话,但可以继续处理当前接待的会话以及接入同事转接的会话。
- 离开:当客服需要暂停工作时,可以主动将状态切换为离开。离开时,不会自动接入新会话,但可以继续处理当前接待的会话以及接入同事转接的会话。
- 隐身:当客服以“隐身登录”方式登录客服系统时,状态为隐身。隐身时,不会自动接入新会话,但可以继续处理当前接待的会话以及接入同事转接的会话。
- 离线:当客服点击“退出”,或直接关闭浏览器30秒后,状态为离线。离线时,不会自动接入新会话,也不能接入同事转接的会话。
【新增】导入公共常用语
当您已有常用语列表,或需要设置较多常用语时,可以批量导入常用语。
【新增】访客统计
在管理员模式,点击“统计查询 > 工作质量”,可以查看访客统计报表。
访客统计报表包含独立访客总数、访客数趋势图、按渠道/关联/访客标签统计的独立访客数及其占比。支持通过时间段、渠道、关联、访客标签查询。
【优化】访客端显示客服昵称
使用管理员账号登录环信移动客服,选择“管理员模式 > 设置 > 系统开关”可以设置访客端是否显示客服昵称。开关打开时,当访客收到客服的消息,访客端显示客服的昵称;开关关闭时,访客端默认显示客服所属企业的名称。
【优化】工作量导出报表细化在线时长数据
使用管理员账号登录环信移动客服,选择“管理员模式 > 统计查询 > 工作量”,选择筛选条件,点击“导出报表”,可以导出工作量报表。
工作量导出报表细化在线时长数据,包含空闲时长、忙碌时长、隐身时长、离开时长、在线时长、离线时长。其中:在线时长=空闲+忙碌+隐身+离开,离线时长=统计的总时长-在线时长。
【优化】工作质量报表修正机器人客服的部分指标数据
工作质量报表修正机器人客服的部分指标数据,包括:响应时间和有效/无效会话。
使用管理员账号登录环信移动客服,选择“管理员模式 > 统计查询 > 工作质量”,可以查询工作质量报表。在客服的工作质量报表和导出报表中,机器人的数据一栏显示为0。
体验环信移动客服http://kefu.easemob.com/
收起阅读 »
环信入门demo,用最少的代码、最短的时间快速集成环信即时通讯功能
还在为APP加入即时通讯功能而苦恼吗?还在研究集成环信该从何下手吗?别傻啦!来这里看吧,赶紧收藏star!本篇教程持续更新ing!
环信现有官方demo对新手还是不太友好的,写这样一个简版demo,代码和文件很少,可以通过这个demo先了解环信IM的初始化和体验IM功能,再看环信的官方的完整demo更有针对性的研究和学习
在使用本demo过程中遇到问题请加--环信IM集成互助群:340452063。吃瓜群众 勿加!勿加!
本篇文章所讲的简版demo为Android版,ios或其他请移步imgeek代码专区 ,那里有你想要的。
简版demo体验:仅2.7M
点击扫码安装:http://fir.im/xy1z
Android Studio兼容工程包
git源码:https://github.com/huangfangyi/EaseDemoLite
简版demo Eclipse工程包:仅5.5M
http://pan.baidu.com/s/1jIPg70i
鉴于还有部分刚接触android studio的同学,写一个导入编译的流程文档
1、Download ZIP
2、解压得到 EaseDemoLite-master文件夹
3、打开Android Studio ->File->Import Project->选定EaseDemoLite-master
4、导入工程后 Build->Clean Project/Rebuild Project.
5、Build->Build APK.如果成功就是可以了。
Eclipse导入
1、Download ZIP
2、解压得到 EaseDemoLite-master文件夹
3、打开Eclipse->File->Import 导入工程包,勾选主工程即可。
4、Project->clean
如果实在有问题,请联系QQ84543217吧,备注“简版demo编译”
全部类文件:
收起阅读 »
开源项目-《方圆十里》-基于IM(环信即时通讯云)+LBS(百度地图SDK+GeoHash距离算法)的社交APP
2、用户资料:头像、昵称、性别、生日、地区(本地arrays.xml存储地区数据库)、个性签名
3、Tab1.-“人”---- 百度地图中显示十公里内的人(如果用户位置集中或者人数过少会导致无法测试,因此“更远”选项,搜寻更多,并且本身的十公里概念也未进行筛选)
4、Tab2.“事”----十公里内的动态--文字、图片、位置的动态(发布、回帖、通知提醒)
5、Tab3.“聊”----IM会话
6、Tab4. “友”---通讯录及好友申请
7、我的动态
8、二维码---通过扫二维码加好友
二、特点备注:
1、本项目中采用geohash算法编码用户的位置坐标,达到位置的粗分区,而后进行精确精算实现十公里之内的人和事的概念。
2、创建自定义的百度地图标注。
3、一套将环信IM系统和开发者自身的用户体系融合的解决方案(当前的解决方案在多个项目中得到检验,成熟稳定)。
4、常见的发帖回复模块的处理解决。
5、利用环信的透传消息进行用户的帖子发布、回复等提醒通知。(待更新)
6、UI优化,如电话聊天背景的取自用户头像的毛玻璃特效--参考微信电话聊天背景(待更新)
项目地址:https://github.com/huangfangyi/fangyuanshili
体验包: http://fir.im/ld6m
项目近期在着手更新,有兴趣加入本项目开源组的可以联系QQ:84543217,备注“方圆十里开源组” 收起阅读 »
IOS V2.2.6 Android V2.3.0 release ,环信红包大升级:支持支付宝,支持群内专属红包!
环信红包支持支付宝支付、支持群内专属红包
Android V2.3.0 2016-6-28 更新日志:
修复NetUtils::hasDataConnection()方法在有线网下判断不准确的问题;
红包若干优化和修改:
1、支持群内的专属红包,只有指定用户才能抢红包;
2、支持支付宝;
3、支持系统发的群红包,用户只能看到自己的领取情况;
4、支持绑定多张银行卡,支持解绑银行卡;
5、零钱页支持充值;
6、改版零钱页;
7、支持上传身份证照片做第三通道验证;
8、红包UI细节打磨,包括双title和各个页面细节,安卓和iOS文案统一;
9、错误信息梳理,关键错误基于对话框引导;
10、服务端性能数倍的提升;
11、红包数据平台完善统计项;
12、其他优化:优化代码结构,剥离第三方库减少和开发者库的冲突;透传消息仅给发红包用户而非群内全部用户;优化token获取和更新机制;修复若干bug。
iOS V2.2.6 2016-06-28 更新日志:
红包功能优化和修改:
1. 支持群内的专属红包,只有指定用户才能抢红包;
2. 支持支付宝;
3. 支持系统发的群红包,用户只能看到自己的领取情况;
4. 支持绑定多张银行卡,支持解绑银行卡;
5. 零钱页支持充值;
6. 改版零钱页;
7. 支持上传身份证照片做第三通道验证;
8. 红包UI细节打磨,包括双title和各个页面细节,安卓和iOS文案统一;
9. 错误信息梳理,关键错误基于对话框引导;
10. 服务端性能数倍的提升;
11. 红包数据平台完善统计项;
12. 其他优化:优化代码结构,剥离第三方库减少和开发者库的冲突;透传消息仅给发红包用户而非群内全部用户;优化token获取和更新机制;修复若干bug。
版本历史:Android sdk更新日志 ios sdk 更新日志
下载地址:sdk下载
关于新版sdk使用有任何问题或建议欢迎在下方评论留言。 收起阅读 »
环信小伙伴ZANK获数千万元B轮融资,将发力直播业务
目前 Zank 在国内有 7000 万左右国内用户,其电商业务也在增长中,从导购逐渐转变为自营。创立之初,电商平台是淘宝的流量入口,业务发展起来后,Zank 已经有了近 1000 个 SKU 的自营商品,总 SKU 数量超过 5000 多个, 由稳定的运营商持续供货。为适应业务的快速拓展,团队开发了一个「商品推荐系统」,以机器算法为支撑、用爬虫的方式完成快速联想和产品推荐,以辅助 SKU 扩张。
去年 10 月,Zank 开始利用男同在服装和护肤品方面的独到品味,尝试同志电商变现活动。据公司创始人凌绝顶称,目前相关商品的客单价在 100 元左右,毛利率 20%,用户的付费转化率在 3%,不过并没有透露具体的交易单数和营收情况。
除继续完善电商业务外,Zank 还将在今年 6 月上线直播功能,目前已经初步筛选出一些具备才艺的主播,功能上线后会同步推出王牌栏目来吸引用户。面对同类型竞品 Blued 类似的动作,凌绝顶表示,Zank 的直播围绕兴趣、表演以及情感等内容展开,始终不会偏离「同志」这条主线。此外,Zank 已经扩充了专门团队为直播功能提供保障。据悉,Zank是环信即时通讯云早期种子用户之一。同时,环信视频直播解决方案即将出炉,敬请期待。
关于ZANK团队:
ZANK创始人凌绝顶毕业于清华大学计算机系,自 2006 年开始陆续在网易、新浪微博等公司工作,先后从事研发、产品等,于 2010 年兼职创立国内第一个同志 SNS「飞赞网」。其他团队成员均来自腾讯、360、陌陌等知名企业。 收起阅读 »
移动时代的服务营销新体验,环信闪耀2016CMAC
作为拥有国内最大的即时通讯云PaaS平台——环信即时通讯云,以及国内最大的全媒体智能云客服平台——环信移动客服的全通讯能力云品牌服务商,环信也受邀出席了本次行业盛会。随着客服中心不断的被新时代赋予新的含义,传统的客服中心也正逐渐从成本中心向营销中心和利润中心转化。其中众多电商标杆企业均使用环信移动客服实现了服务式反向营销,先通过"客户标签"功能+"大数据分析"找到目标群体,然后通过环信移动客服的精准营销推送接口,将富媒体商品信息定向推送给目标客户。这种反向营销不仅用户体验好,转化率也极高,帮助电商企业实现了订单数和客单价双丰收。
环信营销总经理申斌主题演讲
此次受邀出席“中国互联网企业服务论坛”,环信营销总经理申斌也结合企业实战经验,就主题发表了“移动时代的服务营销新体验”的精彩演讲,为现场参会的观众和业内人士带来了创新启发,以下为演讲实录:
申斌:大家好,今天我们为大家带来移动时代的服务营销新体验。未来大概有60%或者70%的客服请求是来自移动端的,这一块趋势比较明显,特别是在电商,70%来自移动端,我们通过线上线下,会发现如果没有一个好的营销方式,90%的客户会流失掉,营销的重要性在新时代移动互联网时代尤为凸显。我们在全民时代将会遇到哪些挑战呢?要解决多渠道、成本高、效率低、弱网络、转化低这五大客服挑战,环信首推的全媒体智能云客服提供了最佳解决方案。
在服务客户的时候,第一个阶段是当没有电脑时你的用户购买产品时是通过线下或者到店里面咨询,或者通过电话咨询,这是第一代服务客户时的方式,第二代是PC时代,这个时候出现网络,有甚么问题通过投诉处理。第三个是移动互联网时代,就是官网,你的APP会有咨询,这个就不一样了,新的时代就是我可以通过图片、语音,形式多样化,90后、00后更喜欢这种方式。
中国的互联网环境网络特别复杂,偏远地区网络信号很弱,我们保障你的消息能够及时到达,跟用户交流及时返回,这个很重要。针对转化低的问题,如果没有一个精准的反向营销,成本资金都是浪费的,我们会讲到怎么去解决目前碰到的问题。
很多企业有APP,微信公众号,H5以及网站,每个平台都需要一套客服系统。你们会发现每一个咨询,都有自己一个服务体系,这里面有一个问题,我的数据怎么办,每个系统是独立的。这意味着很多工作是重复的,而且是效率低下,这个需要有一个平全媒体接入台,就能解决把所有的渠道把他打通,这些数据全部打通,意味着当有个用户上午打电话说要处理,如果没有第一时间处理。下午又提出咨询,你的数据是单独隔离开的话就根本不知道上午有人咨询过,如果打通过就会看到记录。上午确实有一个咨询,现在到什么程度了,我上午在线咨询,下午电话咨询,这个数据都是打通的。这是一个高效的会话支撑系统。
这是链家客自如客使用环信实现全媒体客服接入。环信移动客服开启了移动客服长连接时代,我们保证发送给客户的每一条消息必答都不会丢失,这是环信的一个核心技术优势。同时环信在电量和流量的优化上也是做了很多技术工作,因为APP可能需要推送,很多用户特别是有一些学生这类用户会比较在意手机的流量,这块我们做了很多的优化。我们目前大概覆盖有3.19亿的移动终端设备。环信移动客服还有很多功能点,包括有轨迹跟踪,有机器人回复,另外就是智能机器人,效率高,智能机器人可以帮助解决80%常见性问题。
这个是新时代的营销方案,你可以看到不管是线下还是楼宇电梯里面,你把这些流量从线下到线上,如果没有精准的营销,没有好的云服务,你的用户可能会流失。
这是我们另外一个大客户楚楚街,做了一个基于大数据的精准营销,用户在交流时可以知道他是一个妈妈,有一个小孩,我根据这种标签,需要安全座椅,推出消息,我们做过统计有两万多张安全座椅卖出。今天关于环信的介绍就到这里,如果大家有什么需求可以直接登陆我们的官网。谢谢大家! 收起阅读 »
swift集成环信(1)
1. 为了swift工程能使用OC编写的环信文件,我们需要一个桥接文件。在这里有个简单的方法,我们创建一个OC的Test类。如下,点击 Create Bridging Header 。系统就自动为我们生成了一个 桥接文件。 以后要在swift文件中引用的OC类 我们就需要把OC的头文件(*.h文件)导入到桥接文件里面。
ps. 如果操作失误没有自动提示生成,请自己创建并加入以下设置
2. 首先根据官网SDK导入流程 导入SDK 以及 easeUI.
3. 导入所需要的静态库, 此版本不包含实时语音。向Build Phases → Link Binary With Libraries 中添加依赖库
CoreMedia.framework
AudioToolbox.framework
AVFoundation.framework
MobileCoreServices.framework
ImageIO.framework
libc++.dylib
libz.dylib
libstdc++.6.0.9.dylib
libsqlite3.dylib
4. 将以下头文件加入到 Bridging Header 文件(Xcode自动生成的那个头文件)
#import "EMSDK.h"此时运行工程大部分的时候会报错。 我们需要将EaseUI-Prefix.pch 加入到以下位置
#import "EaseUI.h"
// pch中的代码
#ifdef __OBJC__ // 这个在自己写pch的时候也必须加
#import <UIKit/UIKit.h>
#import "EMSDK.h"
#import "EaseUI.h"
#endif
5. 此时运行工程一般来说就没什么问题了,我们来初始化SDK试试
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
EaseSDKHelper.shareHelper().easemobApplication(application,
didFinishLaunchingWithOptions: launchOptions,
appkey: "appkey",
apnsCertName: "apnsCertName",
otherConfig: ["SDKConfigEnableConsoleLogger":"1"])
return true
}
6. 集成SDK以及easeUI到此结束。
swiftDemo git 地址:https://github.com/myafer/SwiftEaseUIDemo 收起阅读 »
java.lang.UnsatisfiedLinkError: 的问题
集中回复
导致产生unsatisfiedlink的几个原因
1. 相关信息
hyphenatechatsdk提供的指令集类型仅提供armeabi, arm64-v8a, x86三种,这里需要解释一下相关信息。
armeabi和armeabi-v7a是相近似的指令集,v7a是增强型指令集,运行速度,效率均有所提高,他们都是32位指令,并且兼容。
arm64-v8a对应arm 64位指令集,arm的64位策略和intel IA32不一样,intel的64位指令是兼容32位指令,32位指令编译的程序可以直接在64位机器上运行。
但是arm不是,arm64位和arm32位是彼此独立的指令系统,不兼容。arm这样设计的原因是因为运行在嵌入式上,设计指标更趋向于效率,和耗电考量。
实际上arm64位芯片上同时包含着64指令处理器,和32位指令处理器,只不过两个处理器彼此独立。
2. 影响链接的限制条件
armeabi的so实际上可以运行在64位机器上,只不过google增加了限制条件。
a. Android4.x, 只要能找到so,就可以运行,so可以在armeabi,armeabi-v7a, arm64-v8a,so位置可以很随意。
b. Android5.x开始,检查更加严格,会只有和芯片型号对应目录的so会安装到手机中。
举个例子,开发环境下目录结构如下
libs/armeabi/: libhyphenate.so libhyphenate_av.so
libs/armeabi-v7a: libmediadata.so
手机对应的指令集是armeabi-v7a,之中安装到手机的只有libmediadata.so
c. Android6.x下,检查更加严格。有一条规则,之前测试又遇到,现在不太确认。
libs/armeabi/: libhyphenate.so libhyphenate_av.so。
libs/arm64-v8a (没有此目录)。
在64位机器上也可以运行。
但是作为开发者通常会依赖其他开发包,比如baiduMap,也会用其他so,不能让所有开发者都删掉libs/arm64-v8a的目录。
不过开发者可以尝试下删除arm64-v8a,只留armeabi,这样安装包会很小,在各个平台上也能运行。google考量点是执行速率,更流畅的用户体验,作为开发者。服务提供者,我们希望apk尽可能小,对执行速度要求不高。
d. armeabi和armeabi-v7a可以互换,现在市面上的手机很少有armeabi的,基本上是armeabi-v7a,或者64位的高端机器。
e. 查看手机芯片型号: cat /proc/cpuinfo, 仔细看一下打印信息,能够看明白手机指令集,是32位还是64位。
f. x86目录,通常对应虚拟机,很多开发者喜欢在genymotion上开发调试,这个就对应x86. x86和前面说的intel IA32是一回事,所以只提供32位的,也能在x86-64位机器上运行。
g. 我们的so还依赖于libsqlite.so,不过由于这个包从来没有变化,使用的是系统默认提供的(/system/lib/)。在Android 6.x及以下的平台可以运行。
Android7.x执行更严格的安全检查,禁止使用系统目录的内容。所以如果希望在7.x以上版本,需要把系统目录的libsqlite.so拷贝出来,也放在自己app对应指令目录下。
由于目前Android7.x市面上没有机型,所以目前不在考虑范围。目前微信...等大app都不能在7.x上运行。
i. mips指令集的手机很少见,听说联想有出过,没见过。
h. libs/armeabi/libhyphenate.so 和libs.without.audio/armeabi/libhyphenate.so是不同,libs/armeabi/libhyphenate.sos会依赖于libs/armeabi/libhyphenate_av.so,如果找不到会报java.lang.UnsatisfiedLinkError. 收起阅读 »
准备万全的应用还是无法通过App Store审核?别着急,可能是IPv6的锅
这是因为有些开发者可能没有注意到,5月4日的时候苹果在其开发者官网上有发过这样一条通知
这条通知中提到,2016年6月1日开始,所有提交到App Store上的应用必须支持IPv6-only的网络。
苹果还在最新的 App Store Review Guidelines中增加了这样的表述
同时苹果也声明,大部分应用不需要进行任何更改,因为NSURLSession和CFNetwork API已经支持IPv6了,所以使用NSURLSession和CFNetwork API进行开发的开发者们大可不必担心这个问题。
但是,如果你的应用使用了IPv4专属API或硬编码IP地址,那么就需要开发者对自己的应用做出一些更改了。
这样看来,那些应用没有过审的开发者们可能就恍然大悟了,不是自己不给力,而是苹果太淘气。
那么问题来了,到底怎样才能让自己的应用支持IPv6-only网络呢?
在苹果官方的文档中,给出了以下几个解决方案确保IPv6 DNS64/NAT64的兼容性:
使用高级网络框架
不要直接使用IP地址
使用容量更大,足以存储IPv6地址的地址结构,比如sockaddr_storage
检查并删除不兼容IPv6 DNS64/NAT64的代码,比如:
inet_addr()将IPv4类型的代码转换为IPv6的形式
inet_aton()
inet_lnaof()
inet_makeaddr()
inet_netof()
inet_network()
inet_ntoa()
inet_ntoa_r()
bindresvport()
getipv4sourcefilter()
setipv4sourcefilter()
无需预检(Preflight),直接连接网络
使用系统API生成IPv6地址
那么如何用Mac在本地搭建一个IPv6的测试环境呢?这里是操作步骤:
1.确保你的Mac以非Wi-Fi的方式连接到互联网
2.通过Dock、LaunchPad或Apple菜单打开系统偏好设置
3.按住键盘上的Option键并点击共享,且不要松开Option键
4.在共享服务列表中选择互联网共享
5.松开Option键
6.选择创建NAT64网络
7.选择一个网络接口,提供您的互联网连接
Tip:如果你的Mac是用有线拨号上网的话,请选择PPOE选项作为共享源。如果你的Mac是用有线上网(不用拨号的)的话,请选择Thunderbolt以太网有线网选项作为共享源。
8.将Wi-Fi选项打勾
9.点击Wi-Fi选项,配置网络名称和安全选项
10.选择互联网共享,启动本地网络
当共享处于活动状态后,在Wi-Fi显示处,会有一个朝上的箭头,这表示互联网共享已经启用,现在就有一个IPv6 NAT64网络可以让开发者并可以从其他设备访问并测试应用了。
Tip:为了确保测试只发生在本地IPv6网络上,请确保你的测试设备没有其他活动的网络接口。例如,如果你正在使用iOS设备进行测试,请确保蜂窝服务被禁用,所以你只能通过Wi-Fi测试。
环信IM已经支持IPv6,如果遇到提交审核因为网络问题没通过的检查下sdk版本号,V3.1.3/V2.2.5 以后支持IPv6,最新sdk下载地址http://www.easemob.com/download/im
收起阅读 »
环信参展世界O2O博览会,“一言不合”就拿奖!
环信联合创始人王明成做主题演讲
本届大会的特别板块OSCA2016最佳应用评选颁奖典礼也于当日下午隆重开幕。OSCA2016最佳应用评选是世界O2O组织(WOO)围绕移动互联网最佳应用及商业模式为核心内容展开的全球性评选活动,由第三方权威数据研究机构易观、Talking Data提供的TOP榜单,并参考百度指数,通过报名参评、联合60+媒体展开公众投票、专家评审团最终评审的方式,含金量极高。其中环信凭借其在即时通讯云和全媒体智能云客服领域的深耕和市场优势一举夺得“OSCA最佳服务商奖”。
环信荣获“OSCA最佳服务商奖”
环信获奖专家组评语:环信作为国内最早和最大的即时通讯云PaaS厂商,通过一段代码即可让APP实现单聊、群聊、发语音图片以及实时音视频等社交功能。让开发者摆脱繁重的移动IM通讯底层开发,让所有的App从此都能“聊”起来。环信首推的全媒体智能云客服深度契合O2O行业的客服特点,包括来自网页端、APP端、社交媒体端(微博、微信)的服务请求均可以一键接入一键处理,其自主研发的智能机器人帮助“58到家”等标杆O2O企业降低了客服成本提高了效率,实现了订单、客单价双丰收。
据gartner预测未来60%的客户服务都将来自移动端,70%的O2O和电商业务将发生在移动端,而O2O业务流最关键的就是移动端服务营销。如果做不好包括移动端的全渠道客户服务,辛辛苦苦通过各种渠道引流到自己App、网站、平台、账号的客户,90%都会流失掉。因此,移动端的客户服务体验显得尤为重要。环信联合创始人王明成认为要解决多渠道、成本高、效率低、弱网络、转化低这五大客服挑战,环信首推的全媒体智能云客服提供了最佳解决方案。
对于O2O企业而言,无需任何技术投入,集成环信移动客服马上就可以享受全媒体客服带来的优势。首先是服务渠道的一体化,不论客户是来自APP端、微信公众号、微博还是网站,都可以实现客户请求的统一接入,统一分配和统一管理。其次是服务的专业化,可以进行客户画像、订单轨迹、服务质检、报表统计等,使商户拥有了媲美大型呼叫中心的的服务品质。环信提供的智能机器人更是帮助客户大幅降低了人工服务成本,80%的重复问题机器人都可以帮助解答。在下班时间,可以由智能机器人代替人工客服,提供7*24的不间断服务。
环信基于自有的长连接技术优势,在移动客服产品上提供了一个主动外呼功能,帮助商户轻松实现客服营销。长连接技术的关键之处在于为每一个客户维持一个 TCP连接,可以随时向客户端发送消息(当然,这种设计对后台系统资源和调度能力有很高要求)。客服人员可以把最新的优惠促销以后台消息的形式发送给指定人群。
随着交易平台的扩大,对客服系统的即时消息传递能力也将提出更高的要求。在所有SaaS客服厂商中,环信是唯一一家同时拥有即时通讯云PaaS产品和 SaaS客服产品的厂商,即时通讯技术是环信的起家之本。截至2015年12月,环信即时通讯SDK已覆盖手机终端3.19亿,日发送消息2.1亿,这些数据展示了环信即时通讯技术的强劲性能和扩展性,也是环信登顶SaaS客服行业的致胜法宝。对于58到家这种平台级的O2O服务商而言,选择环信,意味着性能将不会成为瓶颈,能够为未来快速扩张扫除障碍。 收起阅读 »
使用PullToRefreshListView代替ChatFragment里的SwipeRefreshLayout时出现的界面适配问题
于是我写了个简单的demo,里面只有一个Activity,fragment。fragment布局上有个TextView充当TitleBar,下方有个EditText充当输入框,中间有个PullToRefreshListView充当聊天内容。当最外层布局为RelativeLayout时,随着键盘的弹出/收回,界面可以自适应。但是当最外层的布局为LinearLayout时,输入框被挤上去之后,就下不来了。到此,不敢说是PullToRefreshListView在fragment里有问题,因为毕竟这个控件的使用量非常大,如果有问题,不可能google不到同样的问题的。
最终在StackOverflow上发现一篇文章:点击http://stackoverflow.com/questions/25303285/activity-with-fragments-does-not-resize-when-the-keyboard-opens?answertab=votes#tab-top
这篇文章中提到了键盘弹出界面适配的原理:
1.如果界面上包含ListView,ScrollView,应用会缩放这两个view的尺寸以显示全部的内容。2.如果这方法不可用,则滚动整个view,以确保当前获取焦点的view不被遮挡。但是LinearLyout是不支持滚动的,所以1和2都无效。
When the soft keyboard appears on the screen, the amount of space available for the application's UI reduces. The system makes decision on how to organize the available space between the application's UI and soft keyboard.
If the window content contains ListView, ScrollView, the application's window is resized provided all the content is visible.
If re-sizing is not feasible, pan and scan approach is used, which simply involves scrolling the application's window so that the currently focused view is visible.
Since your layout does not contain any ListView, ScrollView, re-sizing is ruled out.
The window's root view is a FrameLayout to which you were originally adding LinearLayout. Since LinearLayout does not support scrolling, pan and scan approach is also ruled out. Hence wrapping the layout inside ScrollView solves the scrolling issue.
于是我想到了如果让RelativeLayout加上可以滚动的属性,是不是就能解决问题了。我的chatFragment布局如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animateLayoutChanges="true"
android:background="#f2f0eb" >
<com.hyphenate.easeui.widget.EaseTitleBar
android:id="@+id/title_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:titleBarBackground="#F15645"
app:titleBarLeftImage="@drawable/back_icon"
app:titleBarRightImage="@drawable/ic_share" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/input_menu"
android:layout_below="@id/title_bar" >
<****.ease.widget.ChatMessageListLife
android:id="@+id/message_list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<****.ease.widget.VoiceRecorderViewLife
android:id="@+id/voice_recorder"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:visibility="invisible" />
</RelativeLayout>
<com.hyphenate.easeui.widget.EaseChatInputMenu
android:id="@+id/input_menu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" />
</RelativeLayout>
ChatMessageListLife是继承自EaseChatMessageList
package *****.ease.widget;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.ListView;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.hyphenate.easeui.widget.EaseChatMessageList;
import ******.R;
public class ChatMessageListLife extends EaseChatMessageList {
protected static final String TAG = "EaseChatMessageList";
private PullToRefreshBase<ListView> ptrListView;
public ChatMessageListLife(Context context, AttributeSet attrs, int defStyle) {
this(context, attrs);
}
public ChatMessageListLife(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ChatMessageListLife(Context context) {
super(context);
}
protected void init(Context context) {
this.context = context;
LayoutInflater.from(context).inflate(
R.layout.ease_chat_message_list_life, this);
ptrListView = (PullToRefreshBase<ListView>) findViewById(R.id.listView1);
listView = ptrListView.getRefreshableView();
}
public PullToRefreshBase<ListView> getRefreshListView() {
return ptrListView;
}
}
R.layout.ease_chat_message_list_life就是我替换PullToRefreshListView的布局:
<?xml version="1.0" encoding="utf-8"?>
<com.handmark.pulltorefresh.library.PullToRefreshListView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ptr="http://schemas.android.com/apk/res-auto"
android:id="@+id/listView1"
style="@style/pulltorefresh_style"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:transcriptMode="alwaysScroll"
ptr:ptrMode="pullFromStart" >
</com.handmark.pulltorefresh.library.PullToRefreshListView>
现在重新回到chatFragment布局。最外层是RelativeLayout,于是我尝试着在chatFragment布局聊天内容的RelativeLayout中增加了
android:scrollbars="vertical"
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/input_menu"
android:layout_below="@id/title_bar"
[b]android:scrollbars="vertical"[/b] >
<****.ease.widget.ChatMessageListLife
android:id="@+id/message_list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<****.ease.widget.VoiceRecorderViewLife
android:id="@+id/voice_recorder"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:visibility="invisible" />
</RelativeLayout>
这个属性。谢天谢地,it works. 收起阅读 »
环信移动客服v4.8产品更新--客户留言全面处理
【新增】留言
在长时间排队或者客服忙碌无法及时回复时,访客可以选择主动进入留言页面给客服留言;在下班时间并且机器人客服处于关闭状态时,网页端的访客会直接进入留言页面。访客的留言不会再创建待接入的会话。
客服和管理员可以查询等待处理的留言,选择某个留言进行处理,或对留言进行评论。
客服可以在客服面板查询所有未分配的留言和分配给自己的留言;
管理员可以在管理员面板查询所有留言,包括未分配和已分配的留言。
目前,只有APP端和网页端(包括桌面网页和H5网页)支持留言功能。其中,APP端需要集成留言功能,网页端可以直接使用。
【优化】工作质量导出报表增加评分明细
工作质量导出报表增加客服获得的满意度评分明细,即获得的评分1、评分2、评分3、评分4、评分5的数量。
使用管理员账号登录环信移动客服,选择“管理员模式 -> 统计查询 -> 工作质量”,筛选需要的工作质量数据,并点击“导出报表”,可以将工作质量数据以Excel表格形式导出到本地。
体验环信移动客服http://kefu.easemob.com/
环信移动客服v4.8.1_产品更新说明_v1.1 收起阅读 »
IOS快速集成环信IM - 基于官方的Demo优化,5分钟集成环信IM功能
领导说一天内要集成IM功能,我顿时被吓尿了~~
说明
本项目是基于官方 ChatDemo-UI3.0 (官方Demo源码下载)项目的简化封装,目的是为了让大家更加方便快速地集成环信IM功能。
环信IOS简版DemoGit地址:https://github.com/mengmakies/ChatDemo-UI3.00-Simple (本项目会保持与环信的SDK同步更新)
环信Android简版Demo地址:
https://github.com/mengmakies/ChatDemo-UI3.00-Simple-Android
奋斗目标
分离第三方依赖库,避免与开发者现有项目的其它类库发生冲突;
抽象开发者可定制化的方法或配置参数;
其它未确定的封装工作,最终目的:高内聚,低耦合;
整理开发者开始集成时反馈的常见性问题,从实际项目考虑优化SDK集成的简易度。
最终成果
1.便于开发者在新项目或现有项目快速集成环信SDK,实现聊天界面和会话列表功能,而且可以灵活地定制化一些基础模块;
2.低耦合,用尽可能少的代码集成环信功能,尽量少污染开发者的项目代码;
如有任何问题,请联系QQ: 364223587
注意:由于Git不支持上传大于100MB的文件,所以项目源码中不包含 HyphenateFullSDK 和HyphenateSDK动态库,下载地址https://pan.baidu.com/s/1c1RsUrA ,解压后后将HyphenateFullSDK和HyphenateSDK文件夹拷贝到目录【/ChatDemo-UI3.0-Sample/ChatDemo-UI3.0/ChatSDK/】下才能正常运行。
经过对ChatUIDemo-UI3.0中的源码进行分析可知,用户初次集成EaseUI时,会遇到如下几个常见问题:
问题1
引用Parse.framework、Bolts.framework时项目容易出错或出现Not found问题,其实这两个库并不是必须的,而且Facebook已经确定在2017年1月份停止提供Parse服务。
解决方案:删除Parse相关类,用 UserCacheManager替代管理用户缓存。
问题2
ChatDemoHelper辅助类集成了很多聊天相关界面的操作方法,开发者一般会直接复用,但是ChatDemoHelper对MainViewController的函数依赖度比较高,比如
[weakself.mainVC setupUnreadMessageCount];
[self.mainVC networkChanged:connectionState];
解决方案:
(1)将ChatDemoHelper中的mainVC类型更换成UIViewController;
(2).将MainController中的几个方法用通知(NSNotificationCenter)实现;
问题3
聊天相关页面与业务逻辑页面放在同一目录中,对于开发者来说,需要分拣;
解决方案:将环信相关的文件、资源统一放在【ChatUI】和【ChatSDK】目录中,方便开发者直接拖拽这两个文件夹即可快速集成聊天功能。
关于昵称和头像的问题
IOS中如何显示开发者服务器上的昵称和头像 http://community.easemob.com/article/825307855
草草们的忧伤:环信IM昵称和头像 http://www.imgeek.org/article/825308536
>>>>>>>>接下来,我们就一步步教大家如何快速集成环信IM功能:
1.新建一个IOS项目。打开XCode -> 【File】 -> 【New】 -> 【Project...】-> 【Single View Application】 ,如下图所示:
项目命名为【HxChatDemo】,然后选择路径保存即可:
2.加入环信IM相关的SDK以及界面代码。下载源码https://github.com/mengmakies/ChatDemo-UI3.00-Simple,将解压后文件夹中的【3rdparty】、【ChatSDK】和【ChatUI】目录复制到新建项目【HxChatDemo】目录下,然后下载SDK(地址https://pan.baidu.com/s/1c1RsUrA) ,解压后后将HyphenateFullSDK和HyphenateSDK文件夹拷贝到目录【/ChatDemo-UI3.0-Sample/ChatDemo-UI3.0/ChatSDK/】目录下, 然后将【ChatSDK】和【ChatUI】这两个目录拖入Xcode中:
3.引入SDK的依赖库。在Xcode中为项目新建一个名为【Frameworks】的group,然后依次按照下面的目录添加依赖库:
SDK 包含实时语音依赖库有:
CoreMedia.framework
AudioToolbox.framework
AVFoundation.framework
MobileCoreServices.framework
ImageIO.framework
libc++.dylib
libz.dylib
libstdc++.6.0.9.dylib
libsqlite3.dylib
libiconv.dylib
// **********官方漏了以下这些系统库********************
CoreMotion.framework
UserNotifications.framework
AssetsLibrary.framework
MapKit.framework
Photos.framework
libbz2.1.0.dylib
// **********官方漏了以下这些系统库*****end***************
后端云LeanCloud需要引入的依赖库:
libicucore.dylib
SystemConfiguration.framework
CoreTelephony.framework
CoreLocation.framework
(如果使用的是 xcode7+,后缀为 tbd。)
4.向General → Embedded Binaries 中添加依赖库.【千万别漏了这个步骤!!!】
注意:在【Linked Frameworks and Libraries】中,找到【HyphenateLite.framework】和【Hyphenate.framework】,然后将【Required】改为【Optional】。
5.增加预编译头文件pch,保证头文件的全局引用。在【Supporting Files】目录上单机右键 -> 【New File...】 -> 【Other】 -> 【PCH File】 -> 命名为【HxChatDemo-Prefix.pch】,加入如下代码:
#import
#ifndef __IPHONE_3_0
#warning "This project uses features only available in iOS SDK 3.0 and later."
#endif
// 如果不需要红包功能,直接把这个REDPACKET_AVALABLE宏注释掉,然后:
// 1.删掉红包相关代码:注释掉后,建议在xcode中搜索“REDPACKET_AVALABLE”,然后删掉相关代码;
#define REDPACKET_AVALABLE
// 如果不需要语音通话功能,直接把这个宏注释掉或者改成0,然后:
// 1.删掉音视频相关代码:注释掉后,建议在xcode中搜索“DEMO_CALL”,然后删掉相关代码;
// 2.隐藏音视频通话按钮:EaseChatBarMoreView.m 第115-131行代码注释掉。
#define DEMO_CALL 1 // 1:启用音视频通话;0:禁用音视频通话
#ifdef __OBJC__
#import
#import
#import "ChatUIDefine.h"
#import "EMAlertView.h"
#import "TTGlobalUICommon.h"
#import "EaseUI.h"
#if DEMO_CALL == 1
#import // 包含音视频通话功能
#else
#import // 不包含音视频通话功能
#endif
#import "AVOSCloud/AVOSCloud.h"// 后端云LeanCloud
#import "UserCacheManager.h"
#import "UserWebManager.h"
#endif
效果如下图:关联PCH文件,打开【Build Settings】,在【Apple LLVM7.1- language】组中进行如下设置:
1.将【Precompile Prefix Header】设置为YES,预编译后的pch文件会被缓存起来,可以提高编译速度;
2.修改pch文件路径按照如下格式:将【Building setting】中的【Prefix Header】选项的路径设置为“$(SRCROOT)/项目名称/pch文件名”,例如:
$(SRCROOT)/HxChatDemo/HxChatDemo-Prefix.pch
如下图所示:
记得将ENABLE_BITCODE设置为NO
OK~编译运行成功!!!大功告成!经过如上几个步骤,环信IM功能所需要的SDK以及EaseUI界面代码都被成功导入项目了。
--------->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
如果需要引入单聊、群聊、联系人列表等界面功能,你就要参考简版Demo项目中的代码一步步操作了,比如:
1.在项目中注册环信APPKEY,参考Appdelegate.m中的代码
2.注册【接收消息】、【好友通知消息】、【网络变化】等回调事件,参考MainViewController.m中的代码
NOTIFY_ADD(setupUntreatedApplyCount, kSetupUntreatedApplyCount);
NOTIFY_ADD(setupUnreadMessageCount, kSetupUnreadMessageCount);
NOTIFY_ADD(networkChanged, kConnectionStateChanged);
3.注意,某些回调事件已经在ChatUIHelper.m里实现,所以需要在适当的位置初始化相关的ViewController:
[ChatUIHelper shareHelper].contactViewVC = _contactsVC;
[ChatUIHelper shareHelper].conversationListVC = _chatListVC;
[ChatUIHelper shareHelper].mainVC = self.mainController;
------》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
盆友,先别急关掉页面~~~~彩蛋往往都是最后才隆重登场的~~~
不信?那我们就举个例子,一分钟内快速集成单聊功能:
1.在AppDelegate.m加入如下代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 注册环信SDK以及推送证书
[[EaseSDKHelper shareHelper] hyphenateApplication:application
didFinishLaunchingWithOptions:launchOptions
appkey:@"easemobdemo#chatdemoui"
apnsCertName:@""// 推送证书名称
otherConfig:@{kSDKConfigEnableConsoleLogger:[NSNumber numberWithBool:YES],@"easeSandBox":@NO}];
[ChatUIHelper shareHelper];// 初始化环信相关回调
// 初始化web缓存配置, appkey需要自己去LeanCloud官网注册存储服务
// http://www.imgeek.org/article/825308536
[UserWebManager config:launchOptions
appId:@"utUG5ot9Y64dqJIFG9Ir2rqu-gzGzoHsz"
appKey:@"IbHhNkPo4gfrFFc3epCw3eG2"];
return YES;
}
2.然后,在ViewController.m中添加一个按钮,并加入按钮响应代码,实现环信登录成功后自动打开单聊页面的功能:// 登录环信并打开单聊界面
- (IBAction)doChat:(id)sender {
NSString *userName = @"martin1234";
NSString *pwd = @"martin1234";
// 因为设置了自动登录模式:[[EMClient sharedClient].options setIsAutoLogin:YES];
// 所以,登录之前要先注销之前的用户,否则重复登录会抛异常
EMError *error = [[EMClient sharedClient] logout:YES];
if (!error) {
NSLog(@"退出成功");
}
[self showHudInView:self.view hint:@"Loading..."];
[[EMClient sharedClient] loginWithUsername:userName password:pwd completion:^(NSString *aUsername, EMError *aError) {
[self hideHud];
if (error) {
[self showHint:aError.errorDescription];
NSLog(@"登录报错了:%@",aError.errorDescription);
return ;
}
// 测试:登录成功后,自动添加martin1234为好友
EMError *error = [[EMClient sharedClient].contactManager addContact:@"martin12345" message:@"我想加您为好友"];
if (!error) {
NSLog(@"添加成功");
}
NSString *userOpenId = userName;// 用户环信ID
NSString *nickName = [NSString stringWithFormat:@"小草%d", arc4random_uniform(100)];// 用户昵称
NSString *avatarUrl = @"http://avatar.csdn.net/E/8/5/2_duruiqi_fx.jpg";// 用户头像(绝对路径)
// 登录成功后,如果后端云没有缓存用户信息,则新增一个用户
[UserWebManager createUser:userOpenId nickName:nickName avatarUrl:avatarUrl];
//设置是否自动登录
[[EMClient sharedClient].options setIsAutoLogin:YES];
[[ChatUIHelper shareHelper] asyncGroupFromServer];
[[ChatUIHelper shareHelper] asyncConversationFromDB];
[[ChatUIHelper shareHelper] asyncPushOptions];
//发送自动登陆状态通知
[[NSNotificationCenter defaultCenter] postNotificationName:KNOTIFICATION_LOGINCHANGE object:@([[EMClient sharedClient] isLoggedIn])];
ChatViewController *vc = [[ChatViewController alloc]initWithConversationChatter:@"admin" conversationType:EMConversationTypeChat];
vc.title = @"江南孤鹜";
[self.navigationController pushViewController:vc animated:YES];
}];
}
效果图如下:注意:IOS9以上系统如果头像不显示,是因为IOS9禁止了非https的请求,只要在Info.plist中增加App Transport Security Settings子项Allow Arbitrary Loads设置为YES。
要不你也动手试试,看看能否5分钟内集成环信IM功能?记得在文章底下留言告诉我们花了多长时间哦 ~.~
相关问题:
1.环信MJRefresh与自己项目已有的MJRefresh冲突,怎么办?
解决:保留自己项目的MJRefresh,删除环信里的MJRefresh文件夹即可。MBProgressHUD也是同样的情况,但是不能直接删除环信里的MBProgressHUD目录,只需删除MBProgressHUD.h和MBProgressHUD.m即可。
2.环信EaseUI里将SDWebImage改名为EMSDWebImage,与自己项目中的SDWebImage冲突,怎么办?
解决:删除环信里的EMSDWebImage文件夹,去掉EaseUI中引用SDWebImage中的【EM】前缀,例如:
(1).#import "UIImageView+EMWebCache.h" 换成 #import "UIImageView+WebCache.h";
(2).#import "UIImage+EMGIF.h" 换成 #import "UIImage+GIF.h";
(3).#import "EMSDWebImageDecoder.h" 换成 #import "SDWebImageDecoder.h"
(4).EMSDImageCache改为SDImageCache;
3.编译运行时报错:Reason: image not found
解决:【Build Phases】-> 【Link Binary With Libraries】->找到【HyphenateLite.framework】和【Hyphenate.framework】->将【Required】改为【Optional】
4.登录的时候界面一直显示【loading】,或者音视频通话时,安卓端无法收到通话请求。
解决:一般都是漏了这个步骤【4.向General → Embedded Binaries 中添加依赖库】引起的,此外,在【Linked Frameworks and Libraries】中,找到【HyphenateLite.framework】和【Hyphenate.framework】,然后将【Required】改为【Optional】。
本文HxChatDemo项目下载地址:http://git.oschina.net/markies/HxChatDemo
简版Demo下载地址:https://github.com/mengmakies/ChatDemo-UI3.00-Simple
如有任何问题,请咨询【环信IM互帮互助群】,群号:340452063
或者加本人QQ:[b]364223587 (好友数已达1000人,如无特殊问题,请到群里询问)
收起阅读 »
iOS 环信Demo集成即时聊天和UI 经验分享
刚做完一个拥有即时聊天模块的项目,项目中用的是环信3.0,虽然感觉中间有点小坑,但是总体感觉还是棒棒哒,比我两年前纯用XMPP+openfire便捷多了,而且环信的开发文档感觉好对我的胃口,写的很用心,所以喽,今天分享一下环信的集成和UI页面的摘取。一、准备工作
1、sdk和静态库的导入
首先是导入环信的sdk,编译,这个过程的困难不是很多,简单提一下,首先下载好EaseMobSDK,这里注意一点的是,lib静态库中包括EaseMobClientSDKLite和EaseMobClientSDK这两种,如果你需要实时语音的话选择EaseMobClientSDK,否则选择EaseMobClientSDKLite,两者只能导入一个。
添加静态库
CoreMedia.frameworkSDK包含实时语音依赖库有
AudioToolbox.framework
AVFoundation.framework
MobileCoreServices.framework
ImageIO.framework
libc++.dylib
libz.dylib
libstdc++.6.0.9.dylib
libsqlite3.dylib
CoreMedia.framework(注意:SDK 不支持 bitcode,向 Build Settings → Linking → Enable Bitcode 中设置 NO。)
AudioToolbox.framework
AVFoundation.framework
MobileCoreServices.framework
ImageIO.framework
libc++.dylib
libz.dylib
libstdc++.6.0.9.dylib
libsqlite3.dylib
libiconv.dylib
然后编译工程,不出意外就成功啦。啊哈哈,开瓶啤酒庆祝一下自己的智商。如果,有些小猴子不成功,例如我
上面的原因是,导入的静态库重复,自己检查吧
二、移植环信的demo中需要的到自己的项目
我这里用到了聊天列表,消息的页面和聊天的主页面,大家再倒入这个之前,一定要先备份!项目,否则一失足成千古恨,或者把svn中的项目弄坏了,就自己站墙角去吧。做这个一定要细心,不能着急,最好要记录移过来的每一个类都是干啥的,防止出错,不知道怎么排查。直接看我的图,按照我这张图细心点,相信可以的。
1.以下这张是消息列表需要导过来的类,有些View里面的类是我自己添加的,和demo比对吧,有的就添加进来
消息列表
2.以下是聊天页面需要的类,CL开头的类,是我自己写的,不用管,剩下的都是需要的
聊天页面
3.剩下需要的东西,这个很重要,要细心哦
相关
其中有些文件夹里的东西,也需要注意,上图:
环信相关
还有,这里面APPDelegate的拓展也比较重要,AppDelegate+EaseMob这个不用白不用了,很方便。
4.做完这些,细活出来啦
做完这些,就是表演真正的技术的时候了。不要想着运行程序跑起来,那肯定是和中彩票一样的概率。具体的报错地方很多,但是都是一些用不上的类不错,我也记不清楚了,只能你们一点一点把不用的地方删除就ok。这个东西不少,但是不复杂,要细心(说了好几遍了)
常见问题:
1.当你导入FixFopen.c的时候会出现
这个是因为添加chatView聊天页面时候缺少依赖库
依赖库
2.如果你需要pch文件,可能会遇见下面问题,需要加上#ifdef __OBJC__ #endif 就好了
pch问题
3.一些警告的问题,都可以忽略了。因为聊天列表和聊天页面,demo3.0中有环信机器人相关的代码,通通删除,不会有影响的。
三、经验之谈
1.环信好用的首要一点就是,各种方法都包含EMMessage这个模型,里面可以用到自己需要的东西,还有拓展,如果开发什么新的模块和写新的方法,建议都传过去EMMessage。
2.chatViewController是继承于EaseMessageViewController这个基类的,里面包含了基本用到的代理方法,方便灵活使用。
3.肯定会操作聊天气泡和自定义消息,就是从MessageCellBubbleView里面修改的,自定义消息,也是要重新写view的拓展,例如下图中我订制的EaseBubbleView+Card类等
消息cell和自定义消息
4.自定义消息的发送直接调用就好了,这个很方便,消息拓展Ext的字段和类型需要提前商定
[EaseSDKHelper sendTextMessage:@"自定义消息"暂时完结
to:self.easeGroupId
messageType:eMessageTypeGroupChat
requireEncryption:NO
messageExt:tmpDict];
暂时分享这么多,希望大家都能成功集成,顺利拿下项目。用第三方的demo集成,一定要知其所以然,一点一滴做起。有什么问题可以随时留言交流,希望我写的能让你们少走点弯路。谢谢大家支持。
作者:环信热心用户睡不着的叶 收起阅读 »
环信亮相第十四届软交会,摘取“2016中国最佳SaaS产品奖”
被誉为国内软件业第一展,为期四天的2016中国国际软件和信息服务交易会于6月19日在大连落下帷幕。随着“互联网+”与各行业的深度融合,软件和信息服务行业将发挥更加重要的作用。作为企业级服务的明星垂直领域,SaaS客服也成为此次大会关注的焦点。本届软交会共吸引60多个国家和地区的743家企业、1.5万名业内人士和3.6万名观众参会。
“企业服务创新论坛”是一年一度的软交会的重点组成部分,前面已成功举办三届。在第十四届大连软交会“2016企业服务创新论坛”上,企业家们齐聚一堂共同探讨中国企业级服务的未来。同时,2016企业服务创新论坛金i奖颁奖盛典揭晓,环信作为中国企业级服务明星企业一举摘取“2016中国最佳SaaS产品奖”。
环信荣膺“2016中国最佳SaaS产品奖”
评委们给了环信企业级服务的最高评价:“当企业级SaaS服务如雨后春笋般涌现,我们在百花齐放的景象中能找到如此坚实沉静一朵,绽放自身的光彩。作为SaaS客服软件行业唯一一家同时拥有PaaS和SaaS产品的公司,环信以此建立其强大的壁垒;不急不缓,水到渠成,它们为中国企业提供着最高效可靠的SaaS服务。”
环信副总裁发表主题演讲《客户服务的智能时代》
环信副总裁程旭文在论坛做主题演讲诠释了在“互联网+”时代智能SaaS客服的重要性。程旭文认为,互联网+时代的用户获客成本非常高,例如电商行业获取一个新用户成本是维护一个老用户的三倍到十倍。如何能让一个用户长期留在我们的产品和服务上?而且客户的渠道来源多种多样,解决这些问题非常重要。环信移动客服全媒体接入可以实现多渠道的用户来源一键管理一键回复。客户服务是有温度的,温度的高低同时决定了服务的满意度,环信移动客服可以实现对客户的交互进行情感分析,基于大数据技术的环信客户声音可以极大提升留存和转化从而实现精细化运营。
随着人口红利消失,人工成本上升,企业客服面临的“用工荒”将持续扩大,运营成本将越来越高。环信利用智能机器人技术实现精准高效自动推送,自动问答,可以帮助客户解答80%的常见问题,极大提升效率降低成本,而环信首推的“人工+智能机器人”的协作服务被证明是现阶段最适合的客户服务方式。
本届软交会以“数据·共享,智慧·创新”为主题,企业级服务应以构建生态圈的创新能力为本,以客户为中心迭代,最终演变为“连接、创新改变生意”,环信即时通讯云就是这样一根连接“人与人”的管道。资源共享整合,以开放的态度,方能合作共赢。大数据是另一种连接,是海量的、相关或非相关的数据的连接,连接创造价值,并且数据的价值因连接的广度和共享而产生质变。环信移动客服基于大数据研发的创新产品“客户声音”,通过热点话题分析发现新畅销商品,通过情感度分析发现服务问题,帮助企业实现广度客户的连接从而创造更大价值。
环信移动客服致力于连接“人与商业”,作为全媒体智能云客服倡领者,支持全媒体接入,包括网页在线客服、社交媒体客服(微博、微信)、移动端客服和呼叫中心等多种渠道。基于业界领先的IM长连接技术保证消息必达,不丢消息不丢单,并通过强大的智能机器人技术极大降低人工客服工作量。
截至2015年底,环信移动客服共服务了12000家企业用户,现已覆盖包括电商、O2O、互联网金融、在线教育、在线旅游、移动医疗、智能硬件、游戏等20大领域的Top10客户,典型用户包括国美在线、58到家、楚楚街、随手记、海尔、51talk,链家自如客、神州专车等众多互联网和传统企业。根据易观国际发布的《中国SaaS客服市场专题研究报告2015》显示:截至2015年第三季度,环信移动客服在SaaS移动端客服用户覆盖占比为77.4%,以绝对优势稳居行业第一。收起阅读 »
【环信招聘】精英人才邀请
即时通讯云技术团队简介
环信即时通讯云是一个提供即时通讯服务的PaaS平台,迄今为止,平台已经支持:
超过100000家App开发者
每天10000000+同时在线长连接
服务1000000000+不同用户
为了实现这个目标,通过分布在中国和美国的 5+ 主要IDC 以及日本、香港、欧洲多个中转节点,为全球用户提供即时可靠的通讯通道。
前端SDK已经可以横跨iOS、Android、Windows以及众多Linux系统,React Native、Swift等等跨平台技术也在不断扩展。
后台的大规模分布式的系统也正在进行微服务化改造,全球多机房同步技术、容器化技术也在深入研究。
这里的每一项技术都会直接帮助平台上的App开发者,并在真正的应用里得到实践检验。
我们不仅是技术的研发者,也是技术的输出方。
这里的每一项技术都在改变世界!
欢迎加入!我们支持开源运动!
查看热门职位,敬请 查看详情
系统研发高级工程师
您的职责:
负责开发和维护大规模分布式系统,为环信上亿用户 提供稳定可靠的服务;
或负责完善基础组件,完成后端系统的微服务改造;
或负责环信开放平台的开发,构建安全可靠的服务平 台;
通讯工程师
您的职责:
负责开发和维护即时通讯系统,优化提高后端服务的 承载能力;
或负责优化、改进和实现IM协议,为移动互联网以及 物联网用户提供可靠实时的即时通讯服务;
高级产品经理
您的职责:
负责环信即时通讯云产品;
负责编写产品需求书、产品原型,协助开发团队理解和 掌握需求,对产品求方向和易用性负责;
对所负责的产品进行用户行为数据监测、性能跟踪、数 据分析、提出产品优化方案;
研究市场上各种产品和应用,挖掘与把握在目标用户对 于信息不同层面的需求,并形成具体的产品功能;
研究市场和用户需求,竞品分析,不断优化产品,提升 用户体验及活跃度,同时策划有竞争力的产品;
还想看看别的高薪职位,点击查看
有意者请发简历至邮箱:
talent@easemob.com / job@easemob.com
收起阅读 »
环信CEO:SaaS客服的难点和坑点全解析
移动和社交风头正劲,企业协作与通信市场风云变幻。互联网巨头和创业公司纷纷入场,共同分食企业协作与通信这块大蛋糕,也深度促进了中国企业级服务的市场繁荣。 6月14日,国内企业协作与通信市场最大的盛会——第十八届CENCE 企业协作及通信大会在北京国际会议中心盛大开幕。包括国内三大运营商、IBM、Cisco、华为、环信等几十家行业领头羊均受邀参展本次大会,共同探讨移动社交时代的企业协作、OA、音视频通信、企业社交、CRM、客服联络中心等领域的重要议题。
大会深受企业IT信息主管、CIO、渠道、ISV人群高度关注
环信展台人头攒动,同时,环信CEO刘俊彦作为企业级服务KOL受邀发表主题演讲《智能全媒体客服时代的最佳实践》,用环信的真实大客户案例与会众共同探讨客户服务的痛点以及SaaS客服的难点和坑点!
环信CEO刘俊彦认为,虽然目前SaaS客服产品同质化严重,但只是宣传同质化严重,主流厂商产品成熟度和差异化还是明显。比如现在领先的 SaaS客服厂商都可以提供全媒体接入。国内主流的全媒体接入渠道包括电话呼叫中心,网页在线客服,微信公共账号客服,APP内置客服。前3个渠道因为所需要的技术已经很成熟,技术难度低,所以在这3个接入渠道上,各个厂家确实是同质化的。但在APP内置客服这个接入渠道上,各个厂家的解 决方案差异会非常大。怎么解决移动弱网络环境下客服咨询绝不掉线,绝不丢消息,怎么解决数千款碎片化Android手机的适配,怎么支撑千万级乃至亿级用户同时在线等。环信客服SDK历经6万家APP验证,覆盖3.19亿独立手机终端,完美适配所有中高低端安卓和IOS机型。所以环信在全媒体接入的移动APP端是有巨大优势的。
虽然智能机器人处在风口,但是客服智能机器人有些被厂商过度消费。刘俊彦认为目前客服智能机器人的成熟应用还主要在售后阶段,解决标准化重复性问题为主,比如在电信和银行业,解答海量用户的海量重复标准化咨询问题。而在售前和售中需要深度挖掘销售机会且客单价还高的行业,比如电商、O2O、教育、医疗行业等,环信主推的“人机混合模式”将发挥更大价值,而且环信移动客服在这些行业大客户众多,优势明显。
同时刘俊彦透露环信基于大数据分析的创新产品“环信客户声音”,通过热点话题分析发现新畅销商品,通过情感度分析发现服务问题,将给SaaS客服市场带来更多惊喜。以下是本次主题演讲干货内容:
全媒体客服接入核心在于移动端,移动端核心在于用户体验为王!
环信CEO总结到:“来自不同媒体的服务请求均可以统一接入,一键回复,打造跨网、跨界、跨平台的极致客户服务体验。”链家自如客使用环信实现了全媒体客服接入,环信帮助链家自如客打通了来自App端的客服入口+网页端客服入口+微信端客服入口,不仅可以统一接入回复且后台数据打通共享,此举帮助链家自如客优化了客服团队,提升了效率,节省了成本。
链家自如客使用环信实现全媒体客服
同时,环信还提供“一体化”客服工作台,支持从APP、微信公众号、微博、网页、呼叫中心等渠道接入,且每个不同渠道均有不同标识进行识别。
从传统呼叫中心到全媒体客服,一场“效率”革命!
随着人口红利消失,呼叫中心的升级转型将越来越普遍,2015年中国劳动力规模由2012年的9.37亿降至9.11亿人。中国劳动力人口连续4年绝对值下降企业客服面临的“用工荒”将持续扩大,运营成本将越来越高,越来越多的企业将复制环信客户“学而思”的客服转型之路,从语音呼叫中心为主转而采用全媒体客服,拥抱移动互联网。
学而思每年10—11月是交费季,以前主要靠呼叫中心外呼,工作量巨大,效果不满意。学而思在2015年集成环信移动客服以后,服务模式改为 APP内缴费,并在APP内提供客服支持。整个2015年缴费季,APP客服部门数十人完美解决了往年数百个语音客服的工作。环信CEO刘俊彦认为:“APP在线客服相比电话客服,大幅度提高了服务效率,从一对一的独占式的同步沟通,变成了一对多的异步式沟通,是一场效率革命,全渠道客服也已经成为企业刚需。”
ITR将取代IVR进入触摸时代,“人工+智能机器人“混合模式将是现阶段最适合客服方式!
传统IVR,用户需要听完所有菜单再做选择。而现在主流的ITR导航,用户只需在手机上直接选择关注的问题,简单方便。其中神州租车就采购环信移动客服,其中的智能ITR大大缓解了人工客服压力。Gartner预测到2020年,ITR将完全取代IVR全面进入触摸时代。
神州租车使用环信智能ITR缓解人工客服压力
环信是客服行业少数自主开发智能应答机器人产品的公司,环信首推的“人机混合模式”将在现阶段的客服服务中发挥更大价值。环信知识库+智能聊天机器人可以帮助人工坐席挡住80%的常见问题。同时具有以下特性:1,灵活可定制的智能会话、自定义菜单导航功能。2,预置的行业知识库,行业相关的常见问答可以一键拥有。3,与现有知识库系统对接,机器学习,智能优化知识库。4,人机无缝配合,更少的成本,更好的客户体验 。
环信首推的人机混合服务极大提高客服应答效率
环信CEO表示“人机混合服务”将是现阶段最适合也是最具效率的客户服务方式。
服务式营销,从成本中心转向利润中心
随着客服中心不断的被新时代赋予新的含义,传统的客服中心也正逐渐从成本中心向营销中心和利润中心转化。其中众多电商标杆企业均使用环信移动客服实现了服务式反向营销,先通过“客户标签”功能+“大数据分析”找到目标群体,然后通过环信移动客服的精准营销推送接口,将富媒体商品信息定向推送给目标客户。这种反向营销不仅用户体验好,转化率也极高,帮助电商企业实现了订单数和客单价双丰收。
移动互联网的电话外呼——金融界为电话销售配置环信APP主动营销平台
近期,环信还上线了业界首个“客户声音”产品,可以通过热点话题分析发现新畅销商品,通过情感度分析发现服务问题,来帮助企业更好的来倾听客户的声音。
最后,环信CEO预测:“随着国内SaaS客服产品的逐渐成熟完善,中小企业将全面拥抱SaaS客服,建设全媒体客户关系中心。而传统大型企业也将增量部署全媒体客服,保护已有投资,拥抱移动互联网。”SaaS客服也将逐渐成长为一个千亿级市场。同时,环信CEO认为未来远程办公,移动办公和众包客服将解决客服行业人力资源不足的问题,而环信移动客服的手机端工作后台将提供很大的助力。
收起阅读 »
ios 关于GCD 浅谈
- 笔者也是在边学习边整理,有不对的地方欢迎指出
- 类型:
- (1)并发队列(Concurrent Dispatch Queue)
- 可以让多个任务并发(同时)执行(自动开启多个线程同时执行任务)并发功能只有在异步(dispatch_async)函数下才有效
- (2)串行队列(Serial Dispatch Queue)
- 让任务一个接着一个地执行(一个任务执行完毕后,再执行下一个任务)
- 将任务添加到队列中,GCD会自动将队列中的任务取出,放到对应的线程中执行,任务的取出遵循队列的FIFO原则:先进先出,后进后出
- 同步和异步决定了要不要开启新的线程
- 同步:在当前线程中执行任务,不具备开启新线程的能力
- 异步:在新的线程中执行任务,具备开启新线程的能力
- 并发和串行决定了任务的执行方式
- 并发:多个任务并发(同时)执行
- 串行:一个任务执行完毕后,再执行下一个任务
- (1)用异步函数往并发队列中添加任务
- 总结:同时开启多个子线程
- (2)用异步函数往串行队列中添加任务
- 总结:会开启线程,但是只开启一个线程
- (3)用同步函数往并发队列中添加任务
- 总结:不会开启新的线程,并发队列失去了并发的功能
- (4)用同步函数往串行队列中添加任务
- 总结:不会开启新的线程
- 说明:同步函数不具备开启线程的能力,无论是什么队列都不会开启线程;异步函数具备开启线程的能力,开启几条线程由队列决定(串行队列只会开启一条新的线程,并发队列会开启多条线程)。
- 同步函数
- (1)并发队列:不会开线程
- (2)串行队列:不会开线程
- 异步函数
- (1)并发队列:能开启N条线程
- (2)串行队列:开启1条线程
- dispatch_async(queue,block) async 异步队列,dispatch_async 函数会立即返回, block会在后台异步执行。
- dispatch_sync(queue,block) sync 同步队列,dispatch_sync 函数不会立即返回,及阻塞当前线程,等待 block同步执行完成。
- 下面上代码,可以理解的更透彻一些:
- (1)同步串行队列
- 这里加sleep方便从运行结果更好的看出区别
- 如图-同步串行队列
- 可以看出,这里的时间间隔就是sleep,也就是说会按顺序添加到队列中,并且只能等上一个任务结束才能进行下一个任务,所有的操作都是在主线程中进行,并不会开辟新的子线程。
- 如图-同步串行队列-2
- (2)同步并发队列
- 从运行结果显而易见,同步串行和同步并发结果是相同的,也是上一个任务结束才能进行下一个任务,也是在主线程中进行,并且也没有开辟新的子线程,也就是说同步函数不具备开启线程的能力。
- 如图-同步并发队列、同步并发队列-2
- (3)异步串行队列
- 从结果可以看出,同步和异步串行队列的区别主要在于开辟子线程的能力,在同步串行队列中,所有的任务都是在主线程执行,在异步串行队列中,会开辟一个新的子线程,不论有多少个任务,都只会开辟一个子线程。
- 如图-异步串行队列、异步串行队列-2
- (4)异步并发队列
- 从结果可以看出,异步并发队列是多个任务同时执行,并且会根据任务的多少开辟多个子线程,可以把sleep去掉会发现,输出的顺序是无序的。
- 如图-异步并发队列、异步并发队列-2
- (5)GCD延时操作
- 如图-GCD延时操作
- (6)队列组
- 首先创建队列组,把需要执行的任务都放到队列组里,notify是监听队列组中所有任务完成之后才会调用的。
- 如图-队列组、队列组-2
- 死锁问题(笔者也是根据自己的理解,有问题之处还望指出)
- 其实死锁的原因就是线程之间相互阻塞(相互等待)
- 第一种情况:
- 因为同步函数会等block块执行完成之后才接着往下执行,执行到图中所示位置时,会在主线程新加入一个队列,所以sync会等待block执行完成之后在继续往下执行,但是sync在主线程中,而且是串行队列,sync是后加入进来的,sync想执行必须等主线程执行完成,主线程等待sync返回,所以执行到此处就会造成死锁,不会继续往下执行了。简单来说,就是sync等待主线程执行完成, 主线程等待sync函数返回。
- 如图-死锁1、死锁2
- 第二种情况:
- 对比下面图的运行结果,可以看出,异步函数中不会等待block执行完成,会立刻返回,两个同步函数之间相互等待,造成死锁。
- 从输出时间可以看出,1和2几乎同时执行,因为是在异步函数中,当执行到2的sync时1存在两种情况:(1)执行中 (2)已经执行完成 ,而且主线程中并没有执行耗时操作,所以1和2同时完成;如果把2处改成sleep(3),那么就会出现前面说异步函数时出现的情况,输出时间至少会差3秒;如果阻塞了主线程,2处的sync就会一直等待永远都不会执行。
- 如图-死锁3、死锁4
- 最后附上小demo。
收起阅读 »
Android Lollipop (5.0) 屏幕录制实现
从 Android 4.4 开始支持手机端本地录屏,但首先需要获取 root 权限才行,Android 5.0 引入 MediaProject,可以不用 root 就可以录屏,但需要弹权限获取窗口,需要用户允许才行,这里主要介绍 Android 5.0+ 利用 MediaProject 在非 root 情况下实现屏幕录制。
基本原理
在 Android 5.0,Google 终于开放了视频录制的接口,其实严格来说,是屏幕采集的接口,也就是 MediaProjection 和 MediaProjectionManager。
具体实现步骤
1 申请权限
在 AndroidManifest 中添加权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>Android 6.0 加入的动态权限申请,如果应用的 targetSdkVersion 是 23,申请敏感权限还需要动态申请
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)2 获取 MediaProjectionManager 实例
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, STORAGE_REQUEST_CODE);
}
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.RECORD_AUDIO)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.RECORD_AUDIO}, AUDIO_REQUEST_CODE);
}
MediaProjectionManager 也是系统服务的一种,通过 getSystemService 来获取实例
MediaProjectionManager projectionManager = (MediaProjectionManager) getSystemService(MEDIA_PROJECTION_SERVICE);3 发起屏幕捕捉请求
Intent captureIntent= projectionManager.createScreenCaptureIntent();4 获取 MediaProjection
startActivityForResult(captureIntent, REQUEST_CODE);
通过 onActivityResult 返回结果获取 MediaProjection
protected void onActivityResult(int requestCode, int resultCode, Intent data) {5 创建虚拟屏幕
if (requestCode == RECORD_REQUEST_CODE && resultCode == RESULT_OK) {
mediaProjection = projectionManager.getMediaProjection(resultCode, data);
}
}
这一步就是通过 MediaProject 录制屏幕的关键所在,VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR 参数是指创建屏幕镜像,所以我们实际录制内容的是屏幕镜像,但内容和实际屏幕是一样的,并且这里我们把 VirtualDisplay 的渲染目标 Surface 设置为 MediaRecorder 的 getSurface,后面我就可以通过 MediaRecorder 将屏幕内容录制下来,并且存成 video 文件
private void createVirtualDisplay() {6 录制屏幕数据
virtualDisplay = mediaProjection.createVirtualDisplay(
"MainScreen",
width,
height,
dpi,
DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
mediaRecorder.getSurface(),
null, null);
}
这里利用 MediaRecord 将屏幕内容保存下来,当然也可以利用其它方式保存屏幕内容,例如:ImageReader
private void initRecorder() {源码地址:
File file = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis() + ".mp4");
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mediaRecorder.setOutputFile(file.getAbsolutePath());
mediaRecorder.setVideoSize(width, height);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mediaRecorder.setVideoEncodingBitRate(5 * 1024 * 1024);
mediaRecorder.setVideoFrameRate(30);
try {
mediaRecorder.prepare();
} catch (IOException e) {
e.printStackTrace();
}
}
public boolean startRecord() {
if (mediaProjection == null || running) {
return false;
}
initRecorder();
createVirtualDisplay();
mediaRecorder.start();
running = true;
return true;
}
完整代码
收起阅读 »
聊天机器人七大商业模式:客服行业将是重要变现场景!
毫无疑问,聊天机器人如今已经成为继移动应用之后最热门的话题之一。在过去的一段时间里,Google、Facebook、微软、Amazon 等众多科技巨头也都开始纷纷加强在聊天机器人领域的布局。然而很多人可能要开始问了,这些聊天机器人将如何获得盈利呢?客服行业将是重要变现场景!
在过去的几个月里,我和我的同事体验了一些聊天机器人产品,也和很多聊天机器人的开发商就如何盈利这个问题进行了深入探讨。经过认真了解和分析,我认为聊天机器人在未来可能会有以下七种可行的商业模式:
商业模式一:用于零售销售的聊天机器人,未来将扩展到整个客服行业。
(Kit 上的 H&M 零售聊天机器人)
聊天机器人最直接的一种使用场景是商家直接向消费者(B2C)销售产品。想象一下,沃尔玛、Harry’ s、Target、Amazon 和京东等开发了这样一种聊天机器人,你可以问聊天机器人是否销售 “牙膏” 或 “刮胡刀” 等,然后聊天机器人会直接回复你这些商品的购买链接,所以用户在于聊天机器人的交流中就能直接完成商品的购买,国内SaaS客服厂商诸如环信智能聊天机器人能够帮助客户解答80%的常见问题,极大的提高效率节省成本。客户服务行业显然是聊天机器人最容易变现的途径之一,参与交易必然离钱更近。中国SaaS客服市场已经有诸如环信等厂商开始自主研发基于深度学习和自然语义分析的智能聊天机器人,虽然目前各家SaaS客服厂商都具备智能聊天功能,未来一年将逐渐转化到拼产品成熟度和易用性阶段。
商业模式二:BaaS(Bots as a Services,聊天机器人即服务)
B2B 领域的聊天机器人主要是帮助用户和团队更有效率地开展工作、管理任务或解决团队沟通方面出现的问题。所以 B2B 领域的聊天机器人可能会复制目前已经存在的 B2B 软件领域的商业模式。
对于 B2B 聊天机器人而言,我个人坚信,SaaS 式的免费增值模式可能会成为它最可行的商业模式。对于一些聊天机器人来说,根据你购买的增值服务的不同,那么你能使用到的聊天机器人的功能也是不同的。根据市场调研公司 Forrester 发布的数据,在 2016年,SaaS 和基于云的商业应用服务的营收有望达到 328 亿美元。因此可以想象,B2B 聊天机器人市场的营收应该也不会低。Slack 平台上的大部分应用基本都是基础功能免费,要想使用更高级的功能则需要付费,如下图中的 Growbot.io 那样:
(Growbot.io 的价格截图)
SaaS产品的商业模式是 B2B 领域的客户都非常熟悉的。在此基础上,聊天机器人未来可能会采取更为复杂的定价模式。
商业模式三:聊天机器人 + 赞助内容和原生内容
因为 BuzzFeed、VICE 等的出现,原生内容和原生广告在过去几年里慢慢变成了一个大趋势。原生内容或赞助内容是这样一种模式:媒体公司(如 BuzzFeed)将那些付费品牌商家的赞助内容直接发布到自己的内容频道上,让读者阅读的时候感觉这篇内容好像是媒体自己创作发布的内容而非品牌商发布的广告。下面这个例子就是杜蕾斯在 BuzzFeed 上发布的原生广告内容:
现在设想一下你正在咨询一个烹饪方面的聊天机器人,聊天机器人基于自己的原生功能可能会回答你说,在某些菜谱中,使用香菜代替茴香是可以的,然后会发给你一篇文章《这五道用 ‘是拉差辣椒酱’(一种泰式料理常用的香甜辣椒酱)烹饪的菜,吃后绝对让你惊叹不已》。当然了,这里的是拉差辣椒酱就是赞助内容。
这种原生广告的效果要比传统的横幅广告的效果要好很多。这种类型的广告对品牌商和出版商都有益。未来,你可能会看到这种广告形式将被出版商应用到聊天机器人里。
商业模式四:利用聊天机器人做联盟网络营销
联盟广告营销最近很多年已经成为一种非常流行的商业化策略。联盟广告营销指的是一种网站 A 为网站 B 设置推广链接,然后从为网站 B 带来的销售额中获取一定提成的一种广告系统。
Forrester 发布的数据报告显示,2016年,美国在联盟广告营销上的花费将达到45亿美元。联盟广告营销也可以作为聊天机器人的一种商业模式。举个例子,对于聊天机器人的开发商,你可以开发一款健身方面的聊天机器人,在如何保持健康的身体方面为用户提供专业的建议,然后给用户发送一些附有商业推广链接的健身方面的产品。
购物聊天机器人 Kip 现在已经开始采用这种商业化策略了。用户可以问 Kip “巧克力” 或 “咖啡” 等很多产品方面的问题,然后它会回复一些产品的购买链接,如下图所示:
用户如果通过 Kip 发的链接购买产品,那么 Kip 团队就能从销售收入中收取一定的提成。下面就有一位用户说他自己是在和 Kip 聊天机器人聊天后通过 Kip 发的链接购买 Amazon Echo 这款产品的。
商业模式五:用聊天机器人做用户调研
(DisOrDatBot 截图)
最近美国总统大选正在如火如荼地进行中,想了解千禧一代都是怎么看待美国总统大选的吗?你可以付费使用一些聊天机器人来进行这方面的调研。虽然我现在还没有看到有人利用聊天机器人做这方面的事,但我觉得如果有专门的 Q&A 聊天机器人来专门帮助人们做调研的话还是非常靠谱的。
目前像 DisOrDatBot 这样的聊天机器人已经开始向用户问一下调研类问题了。想象一下你作为一次活动的策划者,现在正在发愁究竟邀请哪支乐队来你所在的城市进行表演,是邀请电台司令乐队(Radiahead)还是五分钱乐队(Nickelback,加拿大的著名乐队),这时,与其花很多钱请调研公司帮你做调研,还不如使用 DisOrDatBot 进行调研,看你所在城市的用户到底喜欢哪支乐队。
如果你已经开发了一个定期给一群小众用户提供有价值内容的聊天机器人,那些想触及这些用户或是想向这群用户销售产品的公司可能会比较有兴趣通过你的聊天机器人做调研。
商业模式六:将聊天机器人用于潜在客户开发中
我预测,聊天机器人未来将会被应用到潜在客户开发中,一开始主要利用内容去开发潜在客户。通过在房产所有权、保险、婚礼和理财等方面为用户提供专业的信息、想法和见解,聊天机器人然后将自己获得的这些用户信息给到那些销售相关产品和服务的公司。
举个例子,加入你正在和一个 “生活聊天机器人” 聊天,向聊天机器人咨询一些购房方面的问题,随着聊天的深入,聊天机器人搜集了更多有关你的信息,包括你手头有多少首付资金、你想在哪里购房定居、你是否在职、你购买的是否是你的第一套房产等等。在和聊天机器人建立起一定的关系后,聊天机器人于是问你下面这个问题:
“你是否介意我介绍一家比较适合你的房产公司和你联系?”
在经过你的同意之后,聊天机器人就会将你的信息给到你所在地区的一家房地产公司。这家房产公司第二天就会和你联系沟通你的购房需求。然后这家房产公司会给聊天机器人开发商一定的佣金作为为其开发潜在客户的报酬。
商业模式七:按完成的咨询次数或任务收费
人们都希望得到专业的好建议,也愿意为好建议付费。随着聊天机器人变得越来越专业和智能,我认为未来人们会在生活中的很多方面都希望得到聊天机器人的建议和帮助,并愿意为这些建议付费。例如,如果你需要生活方面的建议,你可以和 “Oprah 聊天机器人” 交流,如果你需要获得汽车方面的信息,那么你可以和 “机械聊天机器人” 交流,如果你希望获得匿名的婚姻咨询,你可以和 “婚姻聊天机器人” 交流咨询。当然了,为了得到聊天机器人的建议,你是需要支付一定的费用的。
(本文由36氪编译自:venturebeat.com 作者:达达 环信稍有改编) 收起阅读 »
环信(Android)设置头像和昵称的方法(最简单暴力的基于环信demo的集成)。
当然这个是在你直接复制了demo中的工具类和必要的UI的前提下实现的。简短说明简单暴力的方法:除UI外的其他所有类先复制到自己工程中,UI部分MainActivity中的代码需要一个一个复制过去,如与自己项目冲突的需要调整,然后ChatActivity/ChatFragment也复制过去,这就可以进行聊天了。不过头像就是大家所遇到的头像显示不了,昵称显示为环信号码。
环信官方是有给出头像的设置的,不过大部分朋友看了之后都是晕呼呼的。官方给出的提示如下:方法一 从APP服务器获取昵称和头像
昵称和头像的获取:当收到一条消息(群消息)时,得到发送者的用户ID,然后查找手机本地数据库是否有此用户ID的昵称和头像,如没有则调用APP服务器接口通过用户ID查询出昵称和头像,然后保存到本地数据库和缓存,下次此用户发来信息即可直接查询缓存或者本地数据库,不需要再次向APP服务器发起请求
昵称和头像的更新:当点击发送者头像时加载用户详情时从APP服务器查询此用户的具体信息然后更新本地数据库和缓存。当用户自己更新昵称或头像时,也可以发送一条透传消息到其他用户和用户所在的群,来更新该用户的昵称和头像。
方法二 从消息扩展中获取昵称和头像
昵称和头像的获取:把用户基本的昵称和头像的URL放到消息的扩展中,通过消息传递给接收方,当收到一条消息时,则能通过消息的扩展得到发送者的昵称和头像URL,然后保存到本地数据库和缓存。当显示昵称和头像时,请从本地或者缓存中读取,不要直接从消息中把赋值拿给界面(否则当用户昵称改变后,同一个人会显示不同的昵称)。
昵称和头像的更新:当扩展消息中的昵称和头像URI与当前本地数据库和缓存中的相应数据不同的时候,需要把新的昵称保存到本地数据库和缓存,并下载新的头像并保存到本地数据库和缓存。
---------------------------------------------------------------------------------------------
个人推荐使用方法2,优势比较明显,不仅可以设置头像、昵称,甚至以后出现的是否管理员,或者自己APP中的身份标志,如:店小二、医生、客服等等都可以再定义注明,暴力而简单,不需要考虑对方更新头像或昵称,而软件没重启的情况下怎么去更新头像和昵称等等复杂的问题。本指导以最简单的集成为指导,工具类可使用自己软件中的,或通过别的方式实现。
方法2的集成步骤:
1、在登录的时候,把自己登录成功时后台返回的信息保存到sharedpreferences中,需要包含需要的头像和昵称。
new Thread(new Runnable() {2、AppSPUtils是个人写的一个工具类,大家可以自己写一个,给出参考代码。
@Override
public void run() {
EMClient.getInstance().login(username, password, new EMCallBack() {
@Override
public void onSuccess() {
// 登陆成功,保存用户昵称与头像URL
AppSPUtils.setValueToPrefrences("name", loginBean.getName());
AppSPUtils.setValueToPrefrences("logoUrl", loginBean.getLogoUrl());
// 将自己服务器返回的环信账号、昵称和头像URL设置到帮助类中。
DemoHelper.getInstance().getUserProfileManager().updateCurrentUserNickName(loginBean.getName());
DemoHelper.getInstance().getUserProfileManager().setCurrentUserAvatar(loginBean.getLogoUrl());
DemoHelper.getInstance().setCurrentUserName(loginUser.getHxId()); // 环信Id
// ------以下参考demo中的,加载群组和加载消息。然后跳转到首页-------
public class AppSPUtils {3、保存好自己的信息后,已经成功了四分之一,现在是如何将自己的头像昵称等信息发送出去,最简单的就是使用扩展消息了,在ChatActivity中可以看到,基本上只做了一件事,保证只有一个ChatActivity,那我们的代码在哪里?就在ChatFragment里面。找到代码,可以看到其实它是继承自EaseChatFragment,很多内容在easeui中已经做好了。
private final static int MODE_SPEC = android.os.Build.VERSION.SDK_INT <= 10 ? 0 : Context.MODE_MULTI_PROCESS;
public static SharedPreferences getSharedPreferences(String name) {
return MainApplication.getContext().getSharedPreferences(name,
Context.MODE_PRIVATE | MODE_SPEC);
}
public static SharedPreferences getAppSharedPreferences() {
return getSharedPreferences(Constants.SP_APP);
}
public static String getValueFromPrefrences(String key, String defaultValue) {
return getValueFromPrefrences(getAppSharedPreferences(), key, defaultValue);
}
public static void setValueToPrefrences(String key, String value) {
try {
SharedPreferences preferences = getAppSharedPreferences();
if (null != preferences) {
preferences.edit().putString(key, value).commit();
}
} catch (Exception e) {
e.printStackTrace();
}
}
// 退出登录时要调用
public static void clean() {
try {
SharedPreferences preferences = getAppSharedPreferences();
if (null != getAppSharedPreferences()) {
getAppSharedPreferences().edit().clear().commit();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
这时你会发现ChatFragment类中有一个扩展属性的说明,没错,就是这个方法,把你要发送的内容尽情的发送吧,现附上发送头像和昵称的代码:
@Override4、发送完成,你已经完成了四分之二的任务了。发送完成后,肯定需要一个接收,其实demo中的广播已经接收好了,那么我们跟随着广播的脚步,来到DemoHelper这个类,初次看这个类,都是云一样的感觉,经过一番查找,发现有个onMessageReceived的方法,并且还有注释“全局监听”,赶紧开工,试试接收吧,可以自己打一下log出来看是不是拿到了我们要的。并且照着demoHelper中的保存方法,将接收到的内容保存起来。
public void onSetMessageAttributes(EMMessage message) {
if (isRobot) {
// 设置消息扩展属性
message.setAttribute("em_robot_message", isRobot);
}
// 通过扩展属性,将userPic和userName发送出去。
String userPic = AppSPUtils.getValueFromPrefrences("logoUrl", "");
if (!TextUtils.isEmpty(userPic)) {
message.setAttribute("userPic", userPic);
}
String userName = AppSPUtils.getValueFromPrefrences("name", "");
if (!TextUtils.isEmpty(userName)) {
message.setAttribute("userName", userName);
}
}
@Override5、信息都收到了,就差最后一步就可以显示了,不知道你们是不是激动,反正我是激动了。那在哪里进行显示呢?还是在DemoHelper中,找到getUserInfo方法,代码如下:
public void onMessageReceived(List<EMMessage> messages) {
for (EMMessage message : messages) {
message.setMsgTime(System.currentTimeMillis());
//************接收并处理扩展消息***********************
String userName = message.getStringAttribute("userName", "");
String userPic = message.getStringAttribute("userPic", "");
String hxIdFrom = message.getFrom();
EaseUser easeUser = new EaseUser(hxIdFrom);
easeUser.setAvatar(userPic);
easeUser.setNick(userName);
// 存入内存
getContactList();
contactList.put(hxIdFrom, easeUser);
// 存入db
UserDao dao = new UserDao(MainApplication.getContext());
List<EaseUser> users = new ArrayList<EaseUser>();
users.add(easeUser);
dao.saveContactList(users);
getModel().setContactSynced(true);
// 通知listeners联系人同步完毕
notifyContactsSyncListener(true);
if (isGroupsSyncedWithServer()) {
notifyForRecevingEvents();
}
// ******************扩展信息处理完成**********************
EMLog.d(TAG, "onMessageReceived id : " + message.getMsgId());
// 应用在后台,不需要刷新UI,通知栏提示新消息
if (!easeUI.hasForegroundActivies()) {
getNotifier().onNewMsg(message);
}
}
}
private EaseUser getUserInfo(String hxId) {OK,大功告成,到这里你的头像已经可以显示了。。恭喜你!
// 获取user信息,demo是从内存的好友列表里获取,
// 实际开发中,可能还需要从服务器获取用户信息,
// 从服务器获取的数据,最好缓存起来,避免频繁的网络请求
if (hxId.equals(EMClient.getInstance().getCurrentUser())) {
EaseUser currentUserInfo = getUserProfileManager().getCurrentUserInfo();
return currentUserInfo;
}
EaseUser easeUser;
if (contactList != null && contactList.containsKey(hxId)) {
} else { // 如果内存中没有,则将本地数据库中的取出到内存中。
getContactList();
}
// // TODO 获取不在好友列表里的群成员具体信息,即陌生人信息,demo未实现
// if (user == null && getRobotList() != null) {
// user = getRobotList().get(hxId);
// }
easeUser = contactList.get(hxId);
if(easeUser == null){
easeUser = new EaseUser(hxId);
} else {
if(TextUtils.isEmpty(easeUser.getNick())){ // 如果名字为空,则显示环信号码
easeUser.setNick(easeUser.getUsername());
}
}
return easeUser;
}
有朋友还有疑问,为什么头像是方形的,要变成圆形怎么办?指个路,在easeui中的utils包下,找到EaseUserUtils,这里就是显示用户头像和用户昵称的地方,通过Glide可以轻松显示圆形头像,百度有很多方法,这里就不多讲了,同样,你也可以通过其他图形加载框架来完成。
很多朋友不明白扩展消息的是什么东西,也不明白为什么照着代码敲就能够完成头像的显示,那下面就给大家粗浅的讲讲所涉及到的逻辑关系。
扩展消息:就是你每一次发送消息,都会附带在你发送内容上面的额外消息,他会随着你的内容发送出去,每次会多一点点流量,但微乎其微,个人认为并无多大影响。
显示头像逻辑:区分为本地化缓存和运行内存缓存,在demoHelper中可以发现,有一个成员变量private Map<String, EaseUser> contactList; 这个就是用来保存在运行内存缓存的,只有通过运行缓存,显示头像是最顺畅的,如果每次都从数据库中读取的话,聊天界面会比较卡,有朋友保存在SP里面,以ID做为KEY,头像和昵称等拼接做为value进行缓存,取出后再拆分开分别取值,据说是不卡,大家可以试一下。
本地化存储是为了在每次打开软件的时候,从本地存储中拿到运行内存中使用做准备,大家可以认真看看demoHelper和MainActivity中的代码。
----------------------------------------------------------------------------------
讲了方法2设置头像,那么方法1,个人不推荐,但这里给出处理的过程,如有个别有需求的,可以按方法1来处理:
1、登录成功后,在手机子线程,访问你们的后台服务器,拿到所有好友的环信ID,头像,昵称。然后按上面的保存方法,保存到本地中,完成后发送广播或EventBus之类到,刷新消息界面和ChatFragment。
2、在getUserInfo中,写和上面扩展消息一样的内容,将如果运行缓存和本地都拿不到,则发起网络请求到后台获取头像,等请求到内容后,再发出广播或EventBus通知刷新消息界面和ChatFragment。
-------------------------------------------------------------------------------------
以上仅为本人在开发过程中的一点小小心得,demo中的保存运存和本地储存的方法,大家也可以单独写,并不会影响程序的运行,当然也有兄弟写过发表,大概根据实际情况择优选取即可。小弟学识浅薄,如果有错漏的,欢迎大家纠正。
如有需要,可以到494167135群中与大家交流学习。本人:乐奇奇,QQ:730326762。大家优先加群,谢谢。
收起阅读 »
Android V3.1.3 release ,支持红包功能 、适配Android 6.0
新功能/优化:
消息支持按照本地时间或服务器时间排序
实时音视频支持动态码率
Demo支持红包功能(单聊及群聊红包)
Demo适配了Android 6.0运行时权限,现在把targetSdkVersion设到23程序也能正常运行
Bug fix:
修复自动同意好友请求有延迟的问题
修复在targetSdkVersion设为23时,视频通话可能crash的问题
版本历史:Android更新日志
下载地址:sdk下载
关于新版sdk使用有任何问题或建议欢迎在下方评论留言 收起阅读 »
环信移动客服v4.7产品更新--新增全新的工作量报表
新增功能
1 全新的工作量报表
1.1 工作量总和数据
1.2 新增会话和消息趋势图
1.3 新增24小时进线量分布图
1.4 新增会话标签分布图
1.5 新增会话数分布图(按单条会话消息数)
1.6 新增会话数分布图(按会话时长)
1.7 新增在线时长数据
优化功能
【优化】上下班时间设置
【优化】绑定微博渠道界面增加仅支持认证用户的提示
进入体验最新功能吧:http://kefu.easemob.com/
收起阅读 »
android开发查找聊天记录功能
实现聊天功能需要用到EventBus
EventBus的作用的是回来传值,因为本生的Intent传值,接受不了太多的数据。
1.当在聊天页面的时候,去2级页面,获取当前聊天的总数。
2.开启一个异步线程,new EMConversation 类,然后清空
3.在拿聊天页面的当前会话类mConversation .loadMoreMsgFromDB("", 5000) 一次拉取5000条数据出来,
通过EventBug 发送出去(发送EventBug的时候不能用post,而且是用postSticky),通过bug应该知道,不知道的百度下。
4.clear new 出的新会话类
5.在用当前聊天页面的会话类mConversation.loadMoreMsgFromDB("", mMsgCount); 获取本生显示的消息数据
然后在
mConversation.getAllMessages()
这样做的目的,主要是避免内存中出现重复的数据。
数据已经筛选出来了,现在开始模糊查询,跳到2级页面的时候,此时因为有EventBus收到的聊天消息,通过关键字段,来模糊出当前消息,附件有配图,匹配出来后,显示聊天的适配器中,附件有配图,后面下啦的,也会拉出最新的数据附件有配图 ,模糊查询和下拉更多,就是相关逻辑了,不多说直接贴代码。
1.通过关键字获取当前聊天记录的数据
EMMessage m = mSearchData.get(position);
String msgId = m.getMsgId(); mIndex = 0;
/** * 获取当前所有数据的索引 */
mTempDatas.clear(); mTempDatas.addAll(mDatas);
for (int i = 0; i < mTempDatas.size(); i++) {
if (msgId.equals(mTempDatas.get(i).getMsgId())) {
mIndex = i;
break;
}
}
/** * 获取匹配到的数据并且获得最新的10条数据 */
for (int j = mIndex; j < mTempDatas.size(); j++) {
if (j == 10) {
break;
}
messages.add(mTempDatas.get(j));
}
mTempDatas.removeAll(messages);
Collections.reverse(mTempDatas);
mChatAdapter.notifyDataSetChanged();
vList_emm.setVisibility(View.GONE);
vHint.setVisibility(View.GONE);
findViewById(R.id.rela_edit).setVisibility(View.GONE); findViewById(R.id.btn_view).setVisibility(View.GONE);
listView.setSelection(0);
2.下拉更多
if (mTempDatas.size() == 0) {
IShowToast("已经加载完成");
}else
{
List<EMMessage> temps = new ArrayList<EMMessage>();
temps.addAll(messages);
messages.clear()
for (int i = 0; i < mTempDatas.size(); i++) {
messages.add(mTempDatas.get(i));
if (i == 10) {
break;
}
}
int index = 0;
index = messages.size();
Collections.reverse(messages);
mTempDatas.removeAll(messages);
messages.addAll(temps);
mChatAdapter.notifyDataSetChanged();
listView.setSelection(index);
}
大致这些了,这个代码排版好麻烦。。。为了方便看,只能一排排的粘贴
后期有空,会在教大家如何优化聊天适配器,如何快速扩展,使代码更加清晰。
收起阅读 »
环信北京、上海、深圳三地千张《魔兽》电影票免费送,老司机们还等神马!!!
本人强力兽人战士,操作犀利,走位风骚,意识YD,输出恐怖。魂斗罗一命通,拳皇单手无限连,DOTA美杜莎守三路无人破,扫雷12秒通关最高难度;支持TS、UT、YY、环信音视频等多种语音工具,怕延迟可接受全程电话指挥,20秒内上线,会6国语言接受各国队伍,身强体壮能连续战斗100场不休息不上厕所, 语音指挥5小时不喝水,战士中的战斗机,全职业认识深刻,熟练魔兽各职业战斗理论,曾发表过《魔兽世界基本理论与数据分析》《论PVP先手与反手》《全职业技能压制与反压制大全》《环信移动客服集成全攻略》等PvP专业文章,会编程能按需制作专用lua插件,熟悉各种环信文档,熟练使用各种环信API接口调用,分分钟帮魔兽主题社交APP添加IM功能。门口已埋雷无人拜访,泡面矿泉水已备,自带发电机,水表在门外,有自用电源专用网络防断电断网......
6月8日环信包场北京、上海、深圳三地影院免费送千张《魔兽》电影票,我答题抢到1张免费票,但是那天刚好去不了,因为要结婚。这张票抢的很辛苦,当时不知道刚好是自己的婚礼当天。现在我想问一下:“谁那天有空能替我结婚么?"
那些年为了部落的程序猿们,你听到《魔兽》的召唤了么?For The Horde!!!
抢票规则
每人只有一次答题机会,共计10题。答题后将生成您的专属活动页面,可将页面分享给朋友,每个通过您的专属页面参与活动的用户答题数将累计至您的总答题数,我们将在活动截止前选取前1000名用户送出电影票。例如:A答对了8题,然后A将自己的专属页面分享到朋友圈被B看到,B通过此页面答对了7题,那么此时A累计答题数是8+7=15题,B此时答题数是7题。如果B再将自己的专属页面发给C,C答对6题,那么此时B的总答题数是7+6=13题,A的答题数依旧是15题。
观影时间、影院地址
时间:6月8日
地点:北京(美嘉欢乐影城中关村店)/上海/深圳(太平洋国际影城天利店)
进入抢票地址: http://www.easemob.com/event/film_ms/ 收起阅读 »
Android项目从Eclipse导入到Android Studio中遇到的一些坑
之前开发环境刚从Eclipse切换到Android Studio时做过Android项目由Elipse导入到Studio的总结,也踩过几个坑,随手解决了。但是并没有记录下来。今天遇到一个需求需要导入到Studio中跑一下项目时,费了好长时间才弄成功。干脆,就把踩过的几个坑记录一下,既可以回头来看,也兴许能帮助到别人。1.项目中使用了其他library的项目.
我导的项目刚好就是在Eclipse中依赖了两个额外的独立的library;在Android Studio 选择条目界面选择从Eclipse项目中导入时,向下continue两步就会提示无法完成设置sdk,导入不成功。
解决方案:该问题的解决办法是,到原来的Eclipse项目中,把原来的依赖解除掉。具体的步骤为:在Eclipse项目根目录下的project.properties文件中将设置的target,以及android.library.reference全部注视掉,之后再次open选择项目,就能够导入打开。
2.依赖模块指定sdk版本不存在的问题
由于很多项目都有依赖,所以导入主module之后还要依次导入依赖的module,然后做依赖关联。在进行完这些操作之后,编译项目时,有可能还会编译失败,这个时候首先要检查一下依赖是否已经进行关联,其次要检查一下配置文件是否有误,也就是各个module的gradle文件以及整个项目的build.gradle文件;很多时候都是出在配置文件上。我遇到的问题是依赖的module导入后build.gradle中指定的编译sdk为10,我本地环境不存在该版本的sdk,所以编译失败不通过。
解决方案:根据我自己的经验,说下我的解决思路,不一定对,仅供参考。遇到编译失败的问题,首先就是看主module和各依赖module的依赖关系是否已经关联,然后查看各个module的配置文件以及整个项目的build.gradle,一般的编译失败在terminal中都会有相应的错误日志,以及提示如何修改,根据日志进行修改能更明确。另外,像我遇到的各个module中指定sdk版本不一致的问题,为了方便,可以对所有的module都指定统一的编译sdk,具体的做法就是在项目根目录下的配置文件中声明指定,然后在各个module的build.gradle文件中进行引用
3.某些png图片编译时提示:libpng warning : iCCP: Not recognizeizing known sRGB profile that has been edited问题
解决了上面的问题之后就是提示该问题了,还是编译失败。其实之前在别的项目中遇到过类似的警告,没有解决也能编译通过,但是今天编译走到这就提示这些,然后编译失败,没办法,只能解决了把该问题排除。具体的原因真没弄明白,看晚上的资料说新版本编译条件比旧版本要苛刻,所以会提示这个问题。下面说下该问题的解决办法。
解决方案:解决该问题需要借助一个图片编辑工具,我选择的是Image Maglick,下载安装没得说。然后打开终端,执行如下命令:
find <path to res folder> -name *.png -exec mogrify +profile sRGB {} \;等待命令执行完成即可。将terminal中提示的所有的目录都执行一遍该命令,然后再进行编译就可以。具体的上面这句命令的意思大概就是:删除所有png文件内的profile sRGB。在写这篇博客的时候,我重新搜了下别人提供的答案,有人说是5.0以后编译会提示该警告,所以还有一种方案是修改编译工具的版本由
buildToolsVersion "22.0.1" 改为 buildToolsVersion "20.0.0"这种方案我并没有试过,有遇到该问题的可以尝试解决试试。
4.编译提示多个资源文件被重复定义的问题
有的时候编译失败之后,terminal内的编译日志会提示多个文件重复定义的问题,导致编译不能通过。
解决方案:该问题的解决方案很简单,也很暴力,直接根据提示重复的文件名找到主module中的该资源文件,删除即可。需要注意的是,删除时要删除主module中的资源文件,保留依赖module中的声明。因为在Android Studio中主module中能够引用依赖module中的资源,而依赖module中不能引用主module中的资源。
5.Java finished with non-zero exit value 1的问题
出现这个value 1的问题就是项目中有明确的报错的问题了。比如AndroidManifest文件中存在项目中已不存在的Activity声明,比如布局文件中引用资源错误,比如drawable提示找不到或者程序中有问题等,都是value 1的失败提示。总之,value 1的问题一定是程序中有明显的错误,Android Studio编译时检查比Eclipse要严格,所以就会提示错误,这个需要自己根据自己的项目去找,思路同样也是结合terminal日志提示,外加从配置文件到程序,依次进行。
6.Java finished with non-zero exit value 2的问题
出现value 2的问题原因比较好找,就是jar包冲突,出现此问题意味着项目中引用了重复的jar包。通常最最常见的jar包冲突就是v4包的冲突。我们的项目中配置别人的依赖时也遇到过v4的冲突,这个需要在配置里面将v4去除。具体的配置格式大概如下:
compile('cn.trinea.android.view.autoscrollviewpager:android-auto-scroll-view-pager:1.1.2') {我遇到的大概的就是这几类问题,可能有重复,也肯定是不全。有误的地方欢迎追加指出。
exclude module: 'support-v4'
}
本文作者喜欢而非坚持
收起阅读 »
环信编程大赛优秀开源项目之季军:咚咚,一款专注团队高效沟通的移动客户端
5月14日,由环信联合猿圈共同推出的“首届环信编程大赛”颁奖典礼在中关村义创空间隆重举行。本次环信编程大赛历时两个月,由线上初赛、决赛和颁奖典礼三个环节组成,总计报名人数2000+,收到决赛项目100+。最终由评委会认定的13个优秀开源项目及开发者集体亮相颁奖典礼。其中“方圆十里”、“高仿微信“和“咚咚”三个开源项目名列前三,共同分享了15000元奖金和价值12000元的专属表情包。
优秀项目开发者合影
小鲜肉可畏,“咚咚”项目负责人95后蔡斯仪分享技术开发细节
其余入围的十余个优秀开源项目同样引起了到场开发者的热烈追捧,环信将分期将入围的优秀项目代码免费开源给小伙伴们。今天我们带来的是本次环信编程大赛的季军选手——咚咚,一款专注团队高效沟通的移动客户端。咚咚基于环信平台进行开发,旨在打造一款团队高效沟通的移动客户端,供企业内部协作使用,适应移动办公需要,提升企业沟通协同效率,增强企业办公管理效率。
“咚咚”APP界面截图
1.软件介绍
咚咚基于环信平台进行开发,旨在打造一款团队高效沟通的移动客户端,供企业内部协作使用,适应移动办公需要,提升企业沟通协同效率,增强企业办公管理效率。(咚咚一期实现了用户登入登出功能、通讯功能、投票功能。)
2.功能介绍
一、用户登录注册功能
1.系统登录界面
2系统注册界面
注册功能实现:限制账号长度必须为11位,出生日期选择,头像选择(从系统自带头像中选择)
3.系统首页
登陆成功,即进入系统主页面
4.个人信息查看及修改
进入主页面后点击个人信息查看,即可查看相关信息,并对其进行修改
主界面
(1)头像修改功能实现
(2)名字修改功能实现
(3)部门修改功能实现
(4)性别选择功能实现
(5)个性签名修改功能实现
二、通讯功能
主界面
功能实现:群组聊天,单对单私人聊天,查看好友列表,查看好友详情,查看群组详情
三、投票功能
主界面
功能实现:展示用户发起的投票列表,新增投票,投票提交
3.使用技术
环信即时通讯云
4.作者心得
咚咚基于环信即时通讯云平台,避开了即时通讯等繁杂底层技术开发,使得项目的难点得以轻松解决。例如在平台上可以快速使用即时通讯功能、用户好友管理以及群组管理等功能,让项目得以快速开发成型,产品团队只需要专注于APP核心业务层开发即可,也给移动互联时代的APP开发指出了一条明路。
特别感谢以下企业的大力支持:
义创空间提供颁奖场地
萌岛从自有形象库中授权一套价值12000元的表情包
Emokit赞助Apple Watch一台
猿圈全程提供技术评测支持
git源码下载https://github.com/caisiyi/SYTeamApp
更多开源项目请点击http://community.easemob.com/article/825307813
咚咚项目作者演讲PPT下载↓↓↓
收起阅读 »
环信DEMO群里要发红包啦~~~
这里不光可以聊工作,还能每天抢红包。环信承诺0成本+3小时,还能让你的APP轻轻松松接入红包功能。
活动参与指南:
打开环信demo, 记住是打开环信即时通讯云DEMO哦,环信即时通讯DEMO哦,环信即时通讯云DEMO哦,搜索公开群申请加入(注,为防止出现领取不到红包,请更新到最新版本demo,最新版本demo下载地址:点击进入下载页面)
还没有安装的,可以扫码下载安装哦:
加群:
环信红包群①
1464 6843 22478 (搜索时数字间没有空格)
环信红包群②
1464 6873 54665 (搜索时数字间没有空格)
红包已准备好,就等你来抢!
关于环信红包:
环信与云账户联手打造聊天红包,红包SDK产品已迭代至2.0版,目前已为拉拉公园,YOU+公寓等近100家APP接入红包功能,用户留存和活跃度大幅提升。收起阅读 »