《AI企业级应用产品实力榜单》:环信机器人实力上榜

企服行业头条组织筹办的《AI企业级应用产品实力榜单》对外发榜,从众多报名的产品中,经过层层筛选及评审打分,“环信机器人”凭借深厚的AI技术沉淀以及在保险、教育等领域的大规模落地获得上榜。

微信图片_20180919164853.jpg

环信机器人上榜《AI企业级应用产品实力榜单》


 

作为企业服务领域的资深观察者,企服行业头条一直关注企服领域内的动态,这次组织筹办《AI企业级应用产品实力榜单》,希望寻找有价值的优秀企业级产品,传递企业服务的商业价值和趋势。
 
 
榜单综述
 
企服行业头条根据上榜产品在人工智能方面的特点,把产品划分为几个大类。包括例如商业智能和解决方案类、计算机视觉类、人机交互类等等。

现在,企服君又进一步标注出了这50个产品所处的细分行业,试图进一步挖掘榜单背后蕴藏的行业发展趋势。

在细分行业统计中:纯AI行业产品有25个;信息安全+AI有2个;大数据+AI有11个;云计算+AI有1个;行业SaaS+AI有7个;其他行业+AI有4个。
 
 

15372523952.png

 
从行业分布比例图可以很明显看出,虽然此次企服行业头条评选的是企业级AI产品,但细分行业却并非100%全部来自人工智能领域。

不仅如此,榜单甚至一半(50%)的产品都来自非AI行业。而这也恰恰说明,现在越来越多企业开始主动拥抱人工智能技术,人工智能与各个行业的融合也越发紧密。

接下来,企服君就该榜单的典型产品“环信机器人”进行解读。
 
环信机器人:
 
 
AI1.0——4.0,环信机器人全貌展示AI客服发展史

近年,基于规则和传统机器学习的AI 1.0兴起,随着Google等科技大鳄以及资本的推波助澜,基于算法升级的深度学习AI 2.0时代慢慢开始改造客服行业,准确率和召回率(覆盖率)均取得了大幅度提升。到了AI 3.0时代,从单点的文字机器人产品出发实现了全工具链改造,这个阶段环信智能IVR、智能质检、人机协作、环信智能外呼机器人等产品和服务应运而生,到了AI 4.0大规模落地时代,环信又发布了以保险行业为首的四大行业解决方案,环信机器人产品的发展史很好的全貌展示了AI改造中国客服行业的发展历程。

作为自然语言理解技术最先实现商业化落地的领域,智能客服行业吸引了众多市场玩家争相布局。从传统呼叫中心厂商、到SaaS云客服公司、再到客服机器人公司,各类企业都在积极用AI为客服赋能。那么,现阶段什么样的智能客服产品真正实现了大规模落地,帮助企业规模化的优化了生产力结构,助力客服中心从成本中心往利润中心演变,环信机器人4.0似乎已经给出了答案。

对于智能客服赛道上的三类公司,环信CEO刘俊彦用“刀架”和“刀片”做了一个形象的比喻:基础客服系统是刀架,特点是高粘性业务系统,替换成本高,竞争激励毛利相对较低;AI是刀片,特点是技术壁垒高,毛利高,但不能脱离刀架单独存在。传统呼叫中心厂商缺乏一个多租户的、基于云架构的在线客服系统,因此刀架尚不完备;客服机器人厂商从做刀片起家,目前正在竭力补足刀架短板;而像环信这样的云客服厂商先有刀架,后磨砺刀片,能够为客户提供全套智能客服解决方案。

 

环信机器人4.0,低成本可持续运营的客服机器人解决方案

环信机器人4.0致力于为企业提供一套低成本可持续运营的客服机器人解决方案。4.0版本新推出了三大平台级应用(环信AIROOT运营平台、环信AIROOT Pro训练师平台、环信中文语义计算平台)和保险行业智能机器人解决方案,一举将AI在客服行业的传统单点型产品全面升级为体系化整体解决方案。

环信AIROOT运营平台是一个面向客服团队的简单、智能、低成本可持续运营的客服机器人运营平台。通过打造可快速上手的运营体系,建设快速落地的学习闭环。AIROOT提供了机器人运营环节所有涉及到的常用功能,包括:完整的服务数据产品、运维支撑产品、服务运营产品、机器人知识库、知识运营体系产品,使得平台拥有业界领先的知识构建、知识运营和服务交付能力,并且有效降低使用的难度与成本。

针对诸如100坐席+、日咨询会话1万+、知识点1000以上的大型客户,环信AIROOT可以帮助企业实现1-2周完成知识构建快速上线,并在后续的知识持续运营中实现“1天+1人+2小时”完成的运营工作量。保障广大企业真正实现智能客服机器人的“买得起、用得起”的愿望。

环信AIROOT Pro 训练师平台是一个面向专业知识训练师的专业、高效深度调优的客服机器人运营平台。AIROOT Pro通过完整专业的算法优化调优平台,全面打通从“数据清洗”数据标注””模型训练””效果评测””用户反馈”的完整学习闭环,使得能力调优环节中的大批量数据生产、训练以及模型迭代成为可能。并利用环信中文语义计算平台提供的AI能力,全面提升调优过程中的工具智能化程度,有效降低成本。

经实际落地评测,在无需机器人厂商的算法人员、软件工程师、数据工程师参与的情况下,基于AIROOT Pro的训练相较于普通算法平台的能力调优整体效率提升30%以上,客服机器人知识建设周期整体缩短20%。

环信中文语义计算平台是一个面向开发者的自然语言处理(NLP)的能力开放平台。环信中文语义计算平台在经过了近三年的核心算法能力提升和迭代后,在开放NLP基础算法能力的同时,也完整开放了在NLP领域经常使用的应用级别算法能力诸如:纠错、情感分析、意图识别、语义相似度计算等,帮助开发者们在NLP领域的应用环节具有更强的能力,快速应用落地在更多价值场景。

经实际落地评测,环信中文语义计算平台的基于深度学习的意图分类算法在多个测试集上达到了95%准确率的业界领先水平,语义相似度计算到达了93%准确率的业界领先水平。

环信一直秉承着AI必须通过行业解决方案落地帮助企业提能增效解决实际业务问题来体现生产力。基于环信在保险领域的深入积累,环信率先发布了环信机器人保险行业解决方案。环信机器人保险行业解决方案致力于为保险行业提供开箱可用的AI能力,针对寿险、财险保险智能客服、智能IVR、产品推荐、代理人支持等领域的提供了全套综合智能化保险解决方案。以环信机器人保险行业解决方案中的寿险机器人为例,环信的寿险机器人在业界领先的算法和工程能力基础上,还预装了全套寿险服务知识图谱,涵盖了从保险百科到理赔核保的数百个服务场景下的数千条知识图谱,并与业内主流保险核心业务系统预集成打通,真正做到了开箱可用的行业AI能力。

经过近三年的迭代发展,环信机器人已经在保险、证券、教育、物流、银行、电信运营商、航空等领域树立了一批标杆客户,包括新东方、泰康在线、中意人寿、中信证券、长江证券、天津农商行、南京银行、中通快递、厦门航空等。

客户服务作为现代企业和消费者沟通的核心环节,年产业规模高达5000亿元。对于企业来说,如何利用AI新技术、新产品最大化客服价值,如何把客服这个成本中心转化为利润中心,已成为当务之急,或许人工智能产业化改造整个客服行业的奇点已经来临!
 
 
继续阅读 »
企服行业头条组织筹办的《AI企业级应用产品实力榜单》对外发榜,从众多报名的产品中,经过层层筛选及评审打分,“环信机器人”凭借深厚的AI技术沉淀以及在保险、教育等领域的大规模落地获得上榜。

微信图片_20180919164853.jpg

环信机器人上榜《AI企业级应用产品实力榜单》


 

作为企业服务领域的资深观察者,企服行业头条一直关注企服领域内的动态,这次组织筹办《AI企业级应用产品实力榜单》,希望寻找有价值的优秀企业级产品,传递企业服务的商业价值和趋势。
 
 
榜单综述
 
企服行业头条根据上榜产品在人工智能方面的特点,把产品划分为几个大类。包括例如商业智能和解决方案类、计算机视觉类、人机交互类等等。

现在,企服君又进一步标注出了这50个产品所处的细分行业,试图进一步挖掘榜单背后蕴藏的行业发展趋势。

在细分行业统计中:纯AI行业产品有25个;信息安全+AI有2个;大数据+AI有11个;云计算+AI有1个;行业SaaS+AI有7个;其他行业+AI有4个。
 
 

15372523952.png

 
从行业分布比例图可以很明显看出,虽然此次企服行业头条评选的是企业级AI产品,但细分行业却并非100%全部来自人工智能领域。

不仅如此,榜单甚至一半(50%)的产品都来自非AI行业。而这也恰恰说明,现在越来越多企业开始主动拥抱人工智能技术,人工智能与各个行业的融合也越发紧密。

接下来,企服君就该榜单的典型产品“环信机器人”进行解读。
 
环信机器人:
 
 
AI1.0——4.0,环信机器人全貌展示AI客服发展史

近年,基于规则和传统机器学习的AI 1.0兴起,随着Google等科技大鳄以及资本的推波助澜,基于算法升级的深度学习AI 2.0时代慢慢开始改造客服行业,准确率和召回率(覆盖率)均取得了大幅度提升。到了AI 3.0时代,从单点的文字机器人产品出发实现了全工具链改造,这个阶段环信智能IVR、智能质检、人机协作、环信智能外呼机器人等产品和服务应运而生,到了AI 4.0大规模落地时代,环信又发布了以保险行业为首的四大行业解决方案,环信机器人产品的发展史很好的全貌展示了AI改造中国客服行业的发展历程。

作为自然语言理解技术最先实现商业化落地的领域,智能客服行业吸引了众多市场玩家争相布局。从传统呼叫中心厂商、到SaaS云客服公司、再到客服机器人公司,各类企业都在积极用AI为客服赋能。那么,现阶段什么样的智能客服产品真正实现了大规模落地,帮助企业规模化的优化了生产力结构,助力客服中心从成本中心往利润中心演变,环信机器人4.0似乎已经给出了答案。

对于智能客服赛道上的三类公司,环信CEO刘俊彦用“刀架”和“刀片”做了一个形象的比喻:基础客服系统是刀架,特点是高粘性业务系统,替换成本高,竞争激励毛利相对较低;AI是刀片,特点是技术壁垒高,毛利高,但不能脱离刀架单独存在。传统呼叫中心厂商缺乏一个多租户的、基于云架构的在线客服系统,因此刀架尚不完备;客服机器人厂商从做刀片起家,目前正在竭力补足刀架短板;而像环信这样的云客服厂商先有刀架,后磨砺刀片,能够为客户提供全套智能客服解决方案。

 

环信机器人4.0,低成本可持续运营的客服机器人解决方案

环信机器人4.0致力于为企业提供一套低成本可持续运营的客服机器人解决方案。4.0版本新推出了三大平台级应用(环信AIROOT运营平台、环信AIROOT Pro训练师平台、环信中文语义计算平台)和保险行业智能机器人解决方案,一举将AI在客服行业的传统单点型产品全面升级为体系化整体解决方案。

环信AIROOT运营平台是一个面向客服团队的简单、智能、低成本可持续运营的客服机器人运营平台。通过打造可快速上手的运营体系,建设快速落地的学习闭环。AIROOT提供了机器人运营环节所有涉及到的常用功能,包括:完整的服务数据产品、运维支撑产品、服务运营产品、机器人知识库、知识运营体系产品,使得平台拥有业界领先的知识构建、知识运营和服务交付能力,并且有效降低使用的难度与成本。

针对诸如100坐席+、日咨询会话1万+、知识点1000以上的大型客户,环信AIROOT可以帮助企业实现1-2周完成知识构建快速上线,并在后续的知识持续运营中实现“1天+1人+2小时”完成的运营工作量。保障广大企业真正实现智能客服机器人的“买得起、用得起”的愿望。

环信AIROOT Pro 训练师平台是一个面向专业知识训练师的专业、高效深度调优的客服机器人运营平台。AIROOT Pro通过完整专业的算法优化调优平台,全面打通从“数据清洗”数据标注””模型训练””效果评测””用户反馈”的完整学习闭环,使得能力调优环节中的大批量数据生产、训练以及模型迭代成为可能。并利用环信中文语义计算平台提供的AI能力,全面提升调优过程中的工具智能化程度,有效降低成本。

经实际落地评测,在无需机器人厂商的算法人员、软件工程师、数据工程师参与的情况下,基于AIROOT Pro的训练相较于普通算法平台的能力调优整体效率提升30%以上,客服机器人知识建设周期整体缩短20%。

环信中文语义计算平台是一个面向开发者的自然语言处理(NLP)的能力开放平台。环信中文语义计算平台在经过了近三年的核心算法能力提升和迭代后,在开放NLP基础算法能力的同时,也完整开放了在NLP领域经常使用的应用级别算法能力诸如:纠错、情感分析、意图识别、语义相似度计算等,帮助开发者们在NLP领域的应用环节具有更强的能力,快速应用落地在更多价值场景。

经实际落地评测,环信中文语义计算平台的基于深度学习的意图分类算法在多个测试集上达到了95%准确率的业界领先水平,语义相似度计算到达了93%准确率的业界领先水平。

环信一直秉承着AI必须通过行业解决方案落地帮助企业提能增效解决实际业务问题来体现生产力。基于环信在保险领域的深入积累,环信率先发布了环信机器人保险行业解决方案。环信机器人保险行业解决方案致力于为保险行业提供开箱可用的AI能力,针对寿险、财险保险智能客服、智能IVR、产品推荐、代理人支持等领域的提供了全套综合智能化保险解决方案。以环信机器人保险行业解决方案中的寿险机器人为例,环信的寿险机器人在业界领先的算法和工程能力基础上,还预装了全套寿险服务知识图谱,涵盖了从保险百科到理赔核保的数百个服务场景下的数千条知识图谱,并与业内主流保险核心业务系统预集成打通,真正做到了开箱可用的行业AI能力。

经过近三年的迭代发展,环信机器人已经在保险、证券、教育、物流、银行、电信运营商、航空等领域树立了一批标杆客户,包括新东方、泰康在线、中意人寿、中信证券、长江证券、天津农商行、南京银行、中通快递、厦门航空等。

客户服务作为现代企业和消费者沟通的核心环节,年产业规模高达5000亿元。对于企业来说,如何利用AI新技术、新产品最大化客服价值,如何把客服这个成本中心转化为利润中心,已成为当务之急,或许人工智能产业化改造整个客服行业的奇点已经来临!
 
  收起阅读 »

【环信征文】我做面试官的第三个故事

有一天Java主管江总拿着一份简历找我协助他面试一个自称既懂Java又懂Android的人
江总:你Android和Java都会?来面试Android还是Java?
他:(我猜他打量了6年经验的江总和4年经验的我之后选了一个好对付的)我最近今年都在搞Android,还是面试Android吧!
我:(看他的简历和面试登记表上面的信息出入有点大,心里就有底了)请简单介绍下自己吧
他:balah……balah……(就像《海贼王》有漫画版、动画版和国内百度贴吧版三种剧情一样,他的工作经历也有打印简历版、面试登记表手写版和面试口述版三种)
我:(知道他是什么牛鬼蛇神了,一上来就让他出丑)你能说说Fragment的生命周期吗?
他:Fragment的生命周期……emmm……就是和Activity的生命周期差不多嘛
我:这儿有纸笔,你默写Activity的生命周期吧
他:(边嘟囔边写)先是onCreate()……emmm……还有onResume()……onStart()和onDestroy()
我:Activity的生命周期不是写出来了吗?再好好想想Fragment的生命周期是啥样的
他:就是在Activity的onCreate()上边加上onActivityCreate()和onAttach()……emmm……onDestroy()下边再加上onDestroyView()吧~
我:在什么情况下Fragment的onResume()方法执行?
他:Fragment从不可见到可见的情况下
我:同一个Activity里,从A Fragment切换到B Fragment,然后从B切换到A,A执行了onResume()吗?
他:那当然执行咯~

我:我再问问你View事件分发机制吧
他:(感觉死耗子终于来找瞎猫了)这个我知道,就是从最外层的ViewGroup……
我:(打断他的话)ACTION_DOWN和ACTION_UP总是成对出现吗?换句话说,一个View触发了ACTION_DOWN之后,一定会触发ACTION_UP吗?反过来,一个View触发了ACTION_UP之前,它一定先触发ACTION_DOWN吗?
他:那是一定的,ACTION_UP是手指离开屏幕时触发的……
我:(打断他的话)按住A View,拖动到B View,松手,A和B也都触发了ACTION_UP和ACTION_DOWN吗?
他:这个……emmm……我不太清楚哈~

我:(偷偷看一眼江总,江总正在冷笑摇头)我再考考你Java基础吧,ArrayList和LinkedList,哪个线程安全?哪个线程不安全?
他:ArrayList线程不安全,LinkedList线程安全
我:那你知道线程池有哪几种吗?
他:有四种,就是有带缓存的……emmm……还有别的~

我:(看他简历上的银行项目负责人的工作经历)你长期从事银行、金融软件开发,记录存款和消费金额之类和钱账有关的数据用那种数据类型呀? 

他:当然用float了,精确度比double高嘛 

我:double精度比float低吗? 

他:那当然啦,double只精确到小数点后两位嘛,double在英语里就是二的意思 

我:你现在拿出手机查查 

他:(用手机查了一会)emmm……我刚才口误,我们记钱账的数据类型是double 

我:那你听说过BigDecimal吗?

江总:(此时的鄙夷表情已经和相亲时候拜金女听见“租房”关键词时候的表情一样了)你还想继续面Android吗?
他:不,不,我Java经验更丰富些,还是面Java吧
江总:拿你对Spring Cloud了解多少?
他:balah……balah……(说了一大堆驴唇不对马嘴的东西)
江总:好吧,今天的面试就到这里,有消息我们会通知你
我:(送他出去之后)你知道他简历造假的破绽有多明显吗?
江总:他简历上的毕业年份和填表上的不一样
我:我连他以前什么职业都知道,他是送外卖的或者工地上下苦力的,培训几个月出来骗人了
江总:你怎么知道的?
我:常年室内工作的人脸没那么黑
 
后记:他被我介绍给了一个“工资一开始没那么高,我看你做得好以后会给你股份”的“创业公司CEO”做技术扶贫去了,也不知道他俩到底谁坑了谁
 
往期推荐:
今天面试一个自称两年经验的Android
我又做了一次面试官
继续阅读 »
有一天Java主管江总拿着一份简历找我协助他面试一个自称既懂Java又懂Android的人
江总:你Android和Java都会?来面试Android还是Java?
他:(我猜他打量了6年经验的江总和4年经验的我之后选了一个好对付的)我最近今年都在搞Android,还是面试Android吧!
我:(看他的简历和面试登记表上面的信息出入有点大,心里就有底了)请简单介绍下自己吧
他:balah……balah……(就像《海贼王》有漫画版、动画版和国内百度贴吧版三种剧情一样,他的工作经历也有打印简历版、面试登记表手写版和面试口述版三种)
我:(知道他是什么牛鬼蛇神了,一上来就让他出丑)你能说说Fragment的生命周期吗?
他:Fragment的生命周期……emmm……就是和Activity的生命周期差不多嘛
我:这儿有纸笔,你默写Activity的生命周期吧
他:(边嘟囔边写)先是onCreate()……emmm……还有onResume()……onStart()和onDestroy()
我:Activity的生命周期不是写出来了吗?再好好想想Fragment的生命周期是啥样的
他:就是在Activity的onCreate()上边加上onActivityCreate()和onAttach()……emmm……onDestroy()下边再加上onDestroyView()吧~
我:在什么情况下Fragment的onResume()方法执行?
他:Fragment从不可见到可见的情况下
我:同一个Activity里,从A Fragment切换到B Fragment,然后从B切换到A,A执行了onResume()吗?
他:那当然执行咯~

我:我再问问你View事件分发机制吧
他:(感觉死耗子终于来找瞎猫了)这个我知道,就是从最外层的ViewGroup……
我:(打断他的话)ACTION_DOWN和ACTION_UP总是成对出现吗?换句话说,一个View触发了ACTION_DOWN之后,一定会触发ACTION_UP吗?反过来,一个View触发了ACTION_UP之前,它一定先触发ACTION_DOWN吗?
他:那是一定的,ACTION_UP是手指离开屏幕时触发的……
我:(打断他的话)按住A View,拖动到B View,松手,A和B也都触发了ACTION_UP和ACTION_DOWN吗?
他:这个……emmm……我不太清楚哈~

我:(偷偷看一眼江总,江总正在冷笑摇头)我再考考你Java基础吧,ArrayList和LinkedList,哪个线程安全?哪个线程不安全?
他:ArrayList线程不安全,LinkedList线程安全
我:那你知道线程池有哪几种吗?
他:有四种,就是有带缓存的……emmm……还有别的~

我:(看他简历上的银行项目负责人的工作经历)你长期从事银行、金融软件开发,记录存款和消费金额之类和钱账有关的数据用那种数据类型呀? 

他:当然用float了,精确度比double高嘛 

我:double精度比float低吗? 

他:那当然啦,double只精确到小数点后两位嘛,double在英语里就是二的意思 

我:你现在拿出手机查查 

他:(用手机查了一会)emmm……我刚才口误,我们记钱账的数据类型是double 

我:那你听说过BigDecimal吗?

江总:(此时的鄙夷表情已经和相亲时候拜金女听见“租房”关键词时候的表情一样了)你还想继续面Android吗?
他:不,不,我Java经验更丰富些,还是面Java吧
江总:拿你对Spring Cloud了解多少?
他:balah……balah……(说了一大堆驴唇不对马嘴的东西)
江总:好吧,今天的面试就到这里,有消息我们会通知你
我:(送他出去之后)你知道他简历造假的破绽有多明显吗?
江总:他简历上的毕业年份和填表上的不一样
我:我连他以前什么职业都知道,他是送外卖的或者工地上下苦力的,培训几个月出来骗人了
江总:你怎么知道的?
我:常年室内工作的人脸没那么黑
 
后记:他被我介绍给了一个“工资一开始没那么高,我看你做得好以后会给你股份”的“创业公司CEO”做技术扶贫去了,也不知道他俩到底谁坑了谁
 
往期推荐:
今天面试一个自称两年经验的Android
我又做了一次面试官 收起阅读 »

基操!坐下!勿6!5分钟搭建小程序直播

今天你看直播了吗?
拥有10亿微信生态用户的小程序已经成为了继移动互联后的又一个现象级风口,随着微信小程序对外开放实时音视频录制及播放等更多连接能力,小程序与直播强强联合,在各行各业找到了非常多的玩法,小程序直播相比微信直播和APP直播更加简洁、流畅、低延时、多入口等众多优势迅速向商业直播领域及泛娱乐直播领域蔓延。从小游戏、内容付费、工具、大数据、社交电商创业者到传统品牌商们,都在努力搭上小程序直播这辆快车,以免错过微信生态里新的流量洼地。

TIM图片20180828171626.png

作为一名环信生态圈资深开发者,本着对技术的热衷,对环信的眷恋和对党的忠诚,基于环信即时通讯云写了这个“直播购物小程序”,目前项目源码已全部免费开放,希望对有需求的企业和开发者提供一个思路和参考。
 
直播购物小程序运行GIF效果图
44b07cdeaeb3cf7296db23283efe2696.gif

 
小程序体验指南(仅需三步):

 
1.下载小程序直播源码:github源码

2.下载微信小程序开发工具:小程序开发工具下载地址
 
3.导入源码:将附件的源码解压直接导入 
 
就是这么简单,还有问题?我们准备了视频教程!
 
手把手教学直播小程序开发【环信公开课35期】:公开课回放地址

5b7d3665df6b6.png

公开课视频截图
 
课程大纲:
环信直播技术流程
1、【环信账号准备】注册、认证。
2、【直播间创建】环信后台创建及api 方式创建
3、【房间主播及推拉流地址设置】创建直播,主播绑定房间,房间设置直播地址。
小程序技术分享
1、【创建小程序项目】创建好已有UI的小程序项目。
2、【环信小程序sdk集成】基于webIM sdk 开发的小程序版本SDK集成配置。
3、【配置小程序进行直播推拉流测试】模拟直播间,使用推流工具进行推流测试。
4、【开发直播间聊天功能及特效】利用小程序SDK进行直播聊天室聊天开发。弹幕、特效延时处理。
 
附:环信小程序直播开发文档文档地址
 
关于环信直播聊天室:
1、采用支持高并发的异步架构,轻松应对千万级并发请求; 各项基础服务集群化,确保系统高可用性; 系统冗余度高,容量评估体系完善,弹性扩容应对流量峰值;

2、支持各种消息格式:文字、表情、图片、声音、视频、附件、位置、扩展消息;

3、支持实时配置的消息分级策略,确保重要消息优先必达; 

4、支持直播聊天室后台管理及审核功能,提供直播相关数据统计;

5、提供智能反垃圾和自定义敏感词过滤功能;

6、快速集成,demo提供高质量代码示例,可根据运营情况随时扩展;

7、聊天室人数无上限
继续阅读 »
今天你看直播了吗?
拥有10亿微信生态用户的小程序已经成为了继移动互联后的又一个现象级风口,随着微信小程序对外开放实时音视频录制及播放等更多连接能力,小程序与直播强强联合,在各行各业找到了非常多的玩法,小程序直播相比微信直播和APP直播更加简洁、流畅、低延时、多入口等众多优势迅速向商业直播领域及泛娱乐直播领域蔓延。从小游戏、内容付费、工具、大数据、社交电商创业者到传统品牌商们,都在努力搭上小程序直播这辆快车,以免错过微信生态里新的流量洼地。

TIM图片20180828171626.png

作为一名环信生态圈资深开发者,本着对技术的热衷,对环信的眷恋和对党的忠诚,基于环信即时通讯云写了这个“直播购物小程序”,目前项目源码已全部免费开放,希望对有需求的企业和开发者提供一个思路和参考。
 
直播购物小程序运行GIF效果图
44b07cdeaeb3cf7296db23283efe2696.gif

 
小程序体验指南(仅需三步):

 
1.下载小程序直播源码:github源码

2.下载微信小程序开发工具:小程序开发工具下载地址
 
3.导入源码:将附件的源码解压直接导入 
 
就是这么简单,还有问题?我们准备了视频教程!
 
手把手教学直播小程序开发【环信公开课35期】:公开课回放地址

5b7d3665df6b6.png

公开课视频截图
 
课程大纲:
环信直播技术流程
1、【环信账号准备】注册、认证。
2、【直播间创建】环信后台创建及api 方式创建
3、【房间主播及推拉流地址设置】创建直播,主播绑定房间,房间设置直播地址。
小程序技术分享
1、【创建小程序项目】创建好已有UI的小程序项目。
2、【环信小程序sdk集成】基于webIM sdk 开发的小程序版本SDK集成配置。
3、【配置小程序进行直播推拉流测试】模拟直播间,使用推流工具进行推流测试。
4、【开发直播间聊天功能及特效】利用小程序SDK进行直播聊天室聊天开发。弹幕、特效延时处理。
 
附:环信小程序直播开发文档文档地址
 
关于环信直播聊天室:
1、采用支持高并发的异步架构,轻松应对千万级并发请求; 各项基础服务集群化,确保系统高可用性; 系统冗余度高,容量评估体系完善,弹性扩容应对流量峰值;

2、支持各种消息格式:文字、表情、图片、声音、视频、附件、位置、扩展消息;

3、支持实时配置的消息分级策略,确保重要消息优先必达; 

4、支持直播聊天室后台管理及审核功能,提供直播相关数据统计;

5、提供智能反垃圾和自定义敏感词过滤功能;

6、快速集成,demo提供高质量代码示例,可根据运营情况随时扩展;

7、聊天室人数无上限 收起阅读 »

环信公开课35期回放:手把手教学直播小程序开发

   微信小程序越来越多的新功能不断上线,流量入口的不断增加,俨然成为互联网公司“必争之地”。 传统的公众号第三方直播由于入口较深,用户次使用路径复杂,很难培养用户的使用习惯;微信小程序入口便捷使用方便,极大提升了用户体验。

直播商业化最困扰的地方在于哪里?流量!微信有庞大的低成本的流量可以帮助商家获取和转化用户。小程序直播可以说是商业化用户最好的工具。直播和购物的结合就是其中一个较好的表现形式。

8月8日,环信公开课邀请了小程序开发业界大牛席海江老师,分享了全国首个小程序直播源码,在公开课上手把手教学从零开始搭建一套基于环信的小程序直播平台。
公开课第35期视频回放
公开课回放视频

直播购物小程序运行GIF效果图

微信图片_20180822174317.gif


TIM图片20180822173456.png

席海江老师演示集成环信小程序直播


 课程回顾:
 
环信直播技术流程
1、【环信账号准备】注册、认证。
2、【直播间创建】环信后台创建及api 方式创建
3、【房间主播及推拉流地址设置】创建直播,主播绑定房间,房间设置直播地址。
 
小程序技术分享
1、【创建小程序项目】创建好已有UI的小程序项目。
2、【环信小程序sdk集成】基于webIM sdk 开发的小程序版本SDK集成配置。
3、【配置小程序进行直播推拉流测试】模拟直播间,使用推流工具进行推流测试。
4、【开发直播间聊天功能及特效】利用小程序SDK进行直播聊天室聊天开发。弹幕、特效延时处理。
 
课程亮点:全国首个直播购物小程序源码分享,手把手搭建基于环信的直播购物小程序。
课程形式:网络直播 全国各地区、联网电脑、联网手机均可免费参与。

感谢合作伙伴APICLloud,APKBUS,码客,七牛云,客户世界对本期环信公开课的大力支持,环信公开课合作、课程订阅请添加公开课小助手微信:huanixn-hh
 

强烈推荐:每周三下午3点环信IM在线培训,工程师现场答疑,还有定制T恤送出,观看地址环信公开课
继续阅读 »
   微信小程序越来越多的新功能不断上线,流量入口的不断增加,俨然成为互联网公司“必争之地”。 传统的公众号第三方直播由于入口较深,用户次使用路径复杂,很难培养用户的使用习惯;微信小程序入口便捷使用方便,极大提升了用户体验。

直播商业化最困扰的地方在于哪里?流量!微信有庞大的低成本的流量可以帮助商家获取和转化用户。小程序直播可以说是商业化用户最好的工具。直播和购物的结合就是其中一个较好的表现形式。

8月8日,环信公开课邀请了小程序开发业界大牛席海江老师,分享了全国首个小程序直播源码,在公开课上手把手教学从零开始搭建一套基于环信的小程序直播平台。
公开课第35期视频回放
公开课回放视频

直播购物小程序运行GIF效果图

微信图片_20180822174317.gif


TIM图片20180822173456.png

席海江老师演示集成环信小程序直播


 课程回顾:
 
环信直播技术流程
1、【环信账号准备】注册、认证。
2、【直播间创建】环信后台创建及api 方式创建
3、【房间主播及推拉流地址设置】创建直播,主播绑定房间,房间设置直播地址。
 
小程序技术分享
1、【创建小程序项目】创建好已有UI的小程序项目。
2、【环信小程序sdk集成】基于webIM sdk 开发的小程序版本SDK集成配置。
3、【配置小程序进行直播推拉流测试】模拟直播间,使用推流工具进行推流测试。
4、【开发直播间聊天功能及特效】利用小程序SDK进行直播聊天室聊天开发。弹幕、特效延时处理。
 
课程亮点:全国首个直播购物小程序源码分享,手把手搭建基于环信的直播购物小程序。
课程形式:网络直播 全国各地区、联网电脑、联网手机均可免费参与。

感谢合作伙伴APICLloud,APKBUS,码客,七牛云,客户世界对本期环信公开课的大力支持,环信公开课合作、课程订阅请添加公开课小助手微信:huanixn-hh
 

强烈推荐:每周三下午3点环信IM在线培训,工程师现场答疑,还有定制T恤送出,观看地址环信公开课 收起阅读 »

环信 ios 发不了录音

发送block 返回 code 401  描述是 录音文件地址+ too small 接手别人的代码 一步一个坑 环信还没技术支持 以前还有在线支持的  求解
发送block 返回 code 401  描述是 录音文件地址+ too small 接手别人的代码 一步一个坑 环信还没技术支持 以前还有在线支持的  求解

html5仿微信网页版|h5仿微信聊天web版

html5开发的仿微信网页版聊天案例,h5仿新浪微博网页版聊天,采用html5+css3+jquery+swiper+wcPop等技术混合架构开发,自研弹窗插件wcPop.js仿微信弹窗效果,修复编辑器插入表情时光标定位错误bug,实现了微信网页版的主要功能。
https://blog.csdn.net/xiaoyan_2015/article/details/81750894 

001360截图20180816000327143.png


002360截图20180816000509114.png


003360截图20180816000759161.png


004360截图20180816000759161.png


005360截图20180816001212086.png


006360截图20180816001504426.png


007360截图20180816002528151.png


008360截图20180816003308259.png


009360截图20180816003538528.png


010360截图20180816003726016.png


011360截图20180816004133604.png


012360截图20180816004512015.png


013360截图20180816004755282.png
继续阅读 »
html5开发的仿微信网页版聊天案例,h5仿新浪微博网页版聊天,采用html5+css3+jquery+swiper+wcPop等技术混合架构开发,自研弹窗插件wcPop.js仿微信弹窗效果,修复编辑器插入表情时光标定位错误bug,实现了微信网页版的主要功能。
https://blog.csdn.net/xiaoyan_2015/article/details/81750894 

001360截图20180816000327143.png


002360截图20180816000509114.png


003360截图20180816000759161.png


004360截图20180816000759161.png


005360截图20180816001212086.png


006360截图20180816001504426.png


007360截图20180816002528151.png


008360截图20180816003308259.png


009360截图20180816003538528.png


010360截图20180816003726016.png


011360截图20180816004133604.png


012360截图20180816004512015.png


013360截图20180816004755282.png
收起阅读 »

2018安卓巴士开发者大会【技术之声 改变世界】

2018安卓巴士开发者大会,是中国最具前沿性、专业性的安卓技术会议。由安卓巴士技术社区首次发起并组织的安卓线下交流大会,集结500位安卓开发,与你一起交流学习,探讨行业动态。

本次上海作为首站,将盛邀数位业内技术大咖为开发者们带来最高质量的技术分享和丰富的现场互动体验项目,让参会者在得到业务成长的同时还能知晓行业动态、结识同僚并享受活动带来的特别体验。

报名链接:http://www.hdb.com/dis/fmjhe7y02o

5b56e0005f47f.jpg

付费说明:

本次活动经费用于场租、设备、物料、礼品等。

早鸟票¥199,享受活动五折优惠。

标准票¥399,购此票种开发者凭大会当天凭二维码签到可得安卓开发书籍一本。

团购票¥798,此票为套票3张,即三人成行一人免单,经济实惠。

VIP票¥599,此票座位为会场前排、赠高级礼品、有提问机会、可加入讲师群。

活动须知:

请各位小伙伴认真填写所有的报名资料用于审核使用,由于场地位置有限和为了保证活动质量,活动当天拒绝空降,现场签到凭报名成功二维码,谢谢配合!

活动路线:

地铁路线:地铁9号线金桥站2号口骑行1公里。

公交:1045路、浦东27路、上川专线新金桥路唐陆路站下步行418米。

驾车路线:收费停车场位于唐陆公路与新金桥路交叉口西南150米。(前40名可拥有免费停车券)

5b56e0286ca33.png

 
继续阅读 »
2018安卓巴士开发者大会,是中国最具前沿性、专业性的安卓技术会议。由安卓巴士技术社区首次发起并组织的安卓线下交流大会,集结500位安卓开发,与你一起交流学习,探讨行业动态。

本次上海作为首站,将盛邀数位业内技术大咖为开发者们带来最高质量的技术分享和丰富的现场互动体验项目,让参会者在得到业务成长的同时还能知晓行业动态、结识同僚并享受活动带来的特别体验。

报名链接:http://www.hdb.com/dis/fmjhe7y02o

5b56e0005f47f.jpg

付费说明:

本次活动经费用于场租、设备、物料、礼品等。

早鸟票¥199,享受活动五折优惠。

标准票¥399,购此票种开发者凭大会当天凭二维码签到可得安卓开发书籍一本。

团购票¥798,此票为套票3张,即三人成行一人免单,经济实惠。

VIP票¥599,此票座位为会场前排、赠高级礼品、有提问机会、可加入讲师群。

活动须知:

请各位小伙伴认真填写所有的报名资料用于审核使用,由于场地位置有限和为了保证活动质量,活动当天拒绝空降,现场签到凭报名成功二维码,谢谢配合!

活动路线:

地铁路线:地铁9号线金桥站2号口骑行1公里。

公交:1045路、浦东27路、上川专线新金桥路唐陆路站下步行418米。

驾车路线:收费停车场位于唐陆公路与新金桥路交叉口西南150米。(前40名可拥有免费停车券)

5b56e0286ca33.png

  收起阅读 »

环信即时通讯云V3.5.0更新--多版本实时音视频发布,总有一款适合你

摘要:​ 为满足不同场景需求,3.5.0版本开始将实时音视频会议划分了不同的类型,不同类型对应了不同场景,使你能够轻松地将实时音视频功能集成到你的应用或者网站中。

400196470_wx.jpg

iOS SDK 更新日志
 
版本 V3.5.0 2018-08-13
 
新功能:
  • 为满足不同场景需求,3.5.0版本开始将实时音视频会议划分了不同的类型,不同类型对应了不同场景,使你能够轻松地将实时音视频功能集成到你的应用或者网站中。在创建会议时可以传入以下几种类型:

 
1. Communication:普通通信会议,最多支持参会者6人,会议里的每个参会者都可以自由说话和发布视频,该会议类型在服务器不做语音的再编码,音质最好,适用于远程医疗,在线客服等场景; 

2. Large Communication:大型通信会议,最多参会者30人,会议里的每个参会者都可以自由说话,最多支持6个人发布视频,该会议模式在服务器做混音处理,支持更多的人说话,适用于大型会议等场景;

 3. Live:互动视频会议,会议里支持最多6个主播和600个观众,观众可以通过连麦与主播互动,该会议类型适用于在线教育,互动直播等场景。
 
优化:
  • 优化实时音视频多人会议功能

 
Android SDK 更新日志
 
版本 V3.5.0 2018-08-13

新功能:
  • 为满足不同场景需求,3.5.0版本开始将实时音视频会议划分了不同的类型,不同类型对应了不同场景,使你能够轻松地将实时音视频功能集成到你的应用或者网站中。类型如下:

 
1. Communication:普通通信会议,最多支持参会者6人,会议里的每个参会者都可以自由说话和发布视频,该会议类型在服务器不做语音的再编码,音质最好,适用于远程医疗,在线客服等场景;

 2. Large Communication:大型通信会议,最多参会者30人,会议里的每个参会者都可以自由说话,最多支持6个人发布视频,该会议模式在服务器做混音处理,支持更多的人说话,适用于大型会议等场景;

 3. Live:互动视频会议,会议里支持最多6个主播和600个观众,观众可以通过连麦与主播互动,该会议类型适用于在线教育,互动直播等场景。
 
版本历史:Android SDK更新日志  ios SDK更新日志
下载地址:SDK下载​
继续阅读 »
摘要:​ 为满足不同场景需求,3.5.0版本开始将实时音视频会议划分了不同的类型,不同类型对应了不同场景,使你能够轻松地将实时音视频功能集成到你的应用或者网站中。

400196470_wx.jpg

iOS SDK 更新日志
 
版本 V3.5.0 2018-08-13
 
新功能:
  • 为满足不同场景需求,3.5.0版本开始将实时音视频会议划分了不同的类型,不同类型对应了不同场景,使你能够轻松地将实时音视频功能集成到你的应用或者网站中。在创建会议时可以传入以下几种类型:

 
1. Communication:普通通信会议,最多支持参会者6人,会议里的每个参会者都可以自由说话和发布视频,该会议类型在服务器不做语音的再编码,音质最好,适用于远程医疗,在线客服等场景; 

2. Large Communication:大型通信会议,最多参会者30人,会议里的每个参会者都可以自由说话,最多支持6个人发布视频,该会议模式在服务器做混音处理,支持更多的人说话,适用于大型会议等场景;

 3. Live:互动视频会议,会议里支持最多6个主播和600个观众,观众可以通过连麦与主播互动,该会议类型适用于在线教育,互动直播等场景。
 
优化:
  • 优化实时音视频多人会议功能

 
Android SDK 更新日志
 
版本 V3.5.0 2018-08-13

新功能:
  • 为满足不同场景需求,3.5.0版本开始将实时音视频会议划分了不同的类型,不同类型对应了不同场景,使你能够轻松地将实时音视频功能集成到你的应用或者网站中。类型如下:

 
1. Communication:普通通信会议,最多支持参会者6人,会议里的每个参会者都可以自由说话和发布视频,该会议类型在服务器不做语音的再编码,音质最好,适用于远程医疗,在线客服等场景;

 2. Large Communication:大型通信会议,最多参会者30人,会议里的每个参会者都可以自由说话,最多支持6个人发布视频,该会议模式在服务器做混音处理,支持更多的人说话,适用于大型会议等场景;

 3. Live:互动视频会议,会议里支持最多6个主播和600个观众,观众可以通过连麦与主播互动,该会议类型适用于在线教育,互动直播等场景。
 
版本历史:Android SDK更新日志  ios SDK更新日志
下载地址:SDK下载​ 收起阅读 »

最近开发的即时通讯软件,有ios和安卓


151326252235608692.jpg


349117477846089395.jpg


661323024749514028.jpg


675322798145162335.jpg


734479370889593645.jpg


849550710384045190.jpg

 
有不足之之处,还请大家多多指教哈,可以加我q使用交流一下  249793044
继续阅读 »

151326252235608692.jpg


349117477846089395.jpg


661323024749514028.jpg


675322798145162335.jpg


734479370889593645.jpg


849550710384045190.jpg

 
有不足之之处,还请大家多多指教哈,可以加我q使用交流一下  249793044 收起阅读 »

图解View测量、布局及绘制原理

来自https://www.jianshu.com/p/3d2c49315d68
Android中自定义View一直是一个高级的技能,入门比较难,看起来很高大上。想要学会自定义View,当然要理解View的测量、布局及绘制原理,本篇文章将以图表的形式讲解View的测量、布局及绘制原理。
一、View绘制的流程框架

3985563-5f3c64af676d9aee.png

View的绘制是从上往下一层层迭代下来的。DecorView-->ViewGroup(--->ViewGroup)-->View ,按照这个流程从上往下,依次measure(测量),layout(布局),draw(绘制)。关于DecorView,可以看这篇文章。

3985563-a7ace6f9221c9d79.png

二、Measure流程

顾名思义,就是测量每个控件的大小。

调用measure()方法,进行一些逻辑处理,然后调用onMeasure()方法,在其中调用setMeasuredDimension()设定View的宽高信息,完成View的测量操作。
public final void measure(int widthMeasureSpec, int heightMeasureSpec) {
}
measure()方法中,传入了两个参数 widthMeasureSpec, heightMeasureSpec 表示View的宽高的一些信息。
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec),
getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec));
}

由上述流程来看Measure流程很简单,关键点是在于widthMeasureSpec, heightMeasureSpec这两个参数信息怎么获得?

如果有了widthMeasureSpec, heightMeasureSpec,通过一定的处理(可以重写,自定义处理步骤),从中获取View的宽/高,调用setMeasuredDimension()方法,指定View的宽高,完成测量工作。
MeasureSpec的确定

先介绍下什么是MeasureSpec?
3985563-d3bf0905aeb8719b.png

MeasureSpec由两部分组成,一部分是测量模式,另一部分是测量的尺寸大小。

其中,Mode模式共分为三类

UNSPECIFIED :不对View进行任何限制,要多大给多大,一般用于系统内部

EXACTLY:对应LayoutParams中的match_parent和具体数值这两种模式。检测到View所需要的精确大小,这时候View的最终大小就是SpecSize所指定的值,

AT_MOST :对应LayoutParams中的wrap_content。View的大小不能大于父容器的大小。

那么MeasureSpec又是如何确定的?

对于DecorView,其确定是通过屏幕的大小,和自身的布局参数LayoutParams。

这部分很简单,根据LayoutParams的布局格式(match_parent,wrap_content或指定大小),将自身大小,和屏幕大小相比,设置一个不超过屏幕大小的宽高,以及对应模式。

对于其他View(包括ViewGroup),其确定是通过父布局的MeasureSpec和自身的布局参数LayoutParams。

这部分比较复杂。以下列图表表示不同的情况:

3985563-e3f20c6662effb7b.png


当子View的LayoutParams的布局格式是wrap_content,可以看到子View的大小是父View的剩余尺寸,和设置成match_parent时,子View的大小没有区别。为了显示区别,一般在自定义View时,需要重写onMeasure方法,处理wrap_content时的情况,进行特别指定。从这里看出MeasureSpec的指定也是从顶层布局开始一层层往下去,父布局影响子布局。

View的测量流程:

3985563-d1a57294428ff668.png

三、Layout流程

测量完View大小后,就需要将View布局在Window中,View的布局主要通过确定上下左右四个点来确定的。

其中布局也是自上而下,不同的是ViewGroup先在layout()中确定自己的布局,然后在onLayout()方法中再调用子View的layout()方法,让子View布局。在Measure过程中,ViewGroup一般是先测量子View的大小,然后再确定自身的大小。
public void layout(int l, int t, int r, int b) {  

// 当前视图的四个顶点
int oldL = mLeft;
int oldT = mTop;
int oldB = mBottom;
int oldR = mRight;

// setFrame() / setOpticalFrame():确定View自身的位置
// 即初始化四个顶点的值,然后判断当前View大小和位置是否发生了变化并返回
boolean changed = isLayoutModeOptical(mParent) ?
setOpticalFrame(l, t, r, b) : setFrame(l, t, r, b);

//如果视图的大小和位置发生变化,会调用onLayout()
if (changed || (mPrivateFlags & PFLAG_LAYOUT_REQUIRED) == PFLAG_LAYOUT_REQUIRED) {

// onLayout():确定该View所有的子View在父容器的位置
onLayout(changed, l, t, r, b);
...

}

上面看出通过 setFrame() / setOpticalFrame():确定View自身的位置,通过onLayout()确定子View的布局。
setOpticalFrame()内部也是调用了setFrame(),所以具体看setFrame()怎么确定自身的位置布局。
protected boolean setFrame(int left, int top, int right, int bottom) {
...
// 通过以下赋值语句记录下了视图的位置信息,即确定View的四个顶点
// 即确定了视图的位置
mLeft = left;
mTop = top;
mRight = right;
mBottom = bottom;

mRenderNode.setLeftTopRightBottom(mLeft, mTop, mRight, mBottom);
}

确定了自身的位置后,就要通过onLayout()确定子View的布局。onLayout()是一个可继承的空方法。
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
}
如果当前View就是一个单一的View,那么没有子View,就不需要实现该方法。

如果当前View是一个ViewGroup,就需要实现onLayout方法,该方法的实现个自定义ViewGroup时其特性有关,必须自己实现。

由此便完成了一层层的的布局工作。

View的布局流程:


3985563-8aefac42b3912539.png

四、Draw过程

View的绘制过程遵循如下几步:
①绘制背景 background.draw(canvas)

②绘制自己(onDraw)

③绘制Children(dispatchDraw)

④绘制装饰(onDrawScrollBars)

从源码中可以清楚地看出绘制的顺序。
public void draw(Canvas canvas) {
// 所有的视图最终都是调用 View 的 draw ()绘制视图( ViewGroup 没有复写此方法)
// 在自定义View时,不应该复写该方法,而是复写 onDraw(Canvas) 方法进行绘制。
// 如果自定义的视图确实要复写该方法,那么需要先调用 super.draw(canvas)完成系统的绘制,然后再进行自定义的绘制。
...
int saveCount;
if (!dirtyOpaque) {
// 步骤1: 绘制本身View背景
drawBackground(canvas);
}

// 如果有必要,就保存图层(还有一个复原图层)
// 优化技巧:
// 当不需要绘制 Layer 时,“保存图层“和“复原图层“这两步会跳过
// 因此在绘制的时候,节省 layer 可以提高绘制效率
final int viewFlags = mViewFlags;
if (!verticalEdges && !horizontalEdges) {

if (!dirtyOpaque)
// 步骤2:绘制本身View内容 默认为空实现, 自定义View时需要进行复写
onDraw(canvas);

......
// 步骤3:绘制子View 默认为空实现 单一View中不需要实现,ViewGroup中已经实现该方法
dispatchDraw(canvas);

........

// 步骤4:绘制滑动条和前景色等等
onDrawScrollBars(canvas);

..........
return;
}
...
}

无论是ViewGroup还是单一的View,都需要实现这套流程,不同的是,在ViewGroup中,实现了 dispatchDraw()方法,而在单一子View中不需要实现该方法。自定义View一般要重写onDraw()方法,在其中绘制不同的样式。
3985563-594f6b3cde8762c7.png

五、总结

从View的测量、布局和绘制原理来看,要实现自定义View,根据自定义View的种类不同,可能分别要自定义实现不同的方法。但是这些方法不外乎:onMeasure()方法,onLayout()方法,onDraw()方法。

onMeasure()方法:单一View,一般重写此方法,针对wrap_content情况,规定View默认的大小值,避免于match_parent情况一致。ViewGroup,若不重写,就会执行和单子View中相同逻辑,不会测量子View。一般会重写onMeasure()方法,循环测量子View。

onLayout()方法:单一View,不需要实现该方法。ViewGroup必须实现,该方法是个抽象方法,实现该方法,来对子View进行布局。

onDraw()方法:无论单一View,或者ViewGroup都需要实现该方法,因其是个空方法
 
继续阅读 »
来自https://www.jianshu.com/p/3d2c49315d68
Android中自定义View一直是一个高级的技能,入门比较难,看起来很高大上。想要学会自定义View,当然要理解View的测量、布局及绘制原理,本篇文章将以图表的形式讲解View的测量、布局及绘制原理。
一、View绘制的流程框架

3985563-5f3c64af676d9aee.png

View的绘制是从上往下一层层迭代下来的。DecorView-->ViewGroup(--->ViewGroup)-->View ,按照这个流程从上往下,依次measure(测量),layout(布局),draw(绘制)。关于DecorView,可以看这篇文章。

3985563-a7ace6f9221c9d79.png

二、Measure流程

顾名思义,就是测量每个控件的大小。

调用measure()方法,进行一些逻辑处理,然后调用onMeasure()方法,在其中调用setMeasuredDimension()设定View的宽高信息,完成View的测量操作。
public final void measure(int widthMeasureSpec, int heightMeasureSpec) {
}
measure()方法中,传入了两个参数 widthMeasureSpec, heightMeasureSpec 表示View的宽高的一些信息。
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec),
getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec));
}

由上述流程来看Measure流程很简单,关键点是在于widthMeasureSpec, heightMeasureSpec这两个参数信息怎么获得?

如果有了widthMeasureSpec, heightMeasureSpec,通过一定的处理(可以重写,自定义处理步骤),从中获取View的宽/高,调用setMeasuredDimension()方法,指定View的宽高,完成测量工作。
MeasureSpec的确定

先介绍下什么是MeasureSpec?
3985563-d3bf0905aeb8719b.png

MeasureSpec由两部分组成,一部分是测量模式,另一部分是测量的尺寸大小。

其中,Mode模式共分为三类

UNSPECIFIED :不对View进行任何限制,要多大给多大,一般用于系统内部

EXACTLY:对应LayoutParams中的match_parent和具体数值这两种模式。检测到View所需要的精确大小,这时候View的最终大小就是SpecSize所指定的值,

AT_MOST :对应LayoutParams中的wrap_content。View的大小不能大于父容器的大小。

那么MeasureSpec又是如何确定的?

对于DecorView,其确定是通过屏幕的大小,和自身的布局参数LayoutParams。

这部分很简单,根据LayoutParams的布局格式(match_parent,wrap_content或指定大小),将自身大小,和屏幕大小相比,设置一个不超过屏幕大小的宽高,以及对应模式。

对于其他View(包括ViewGroup),其确定是通过父布局的MeasureSpec和自身的布局参数LayoutParams。

这部分比较复杂。以下列图表表示不同的情况:

3985563-e3f20c6662effb7b.png


当子View的LayoutParams的布局格式是wrap_content,可以看到子View的大小是父View的剩余尺寸,和设置成match_parent时,子View的大小没有区别。为了显示区别,一般在自定义View时,需要重写onMeasure方法,处理wrap_content时的情况,进行特别指定。从这里看出MeasureSpec的指定也是从顶层布局开始一层层往下去,父布局影响子布局。

View的测量流程:

3985563-d1a57294428ff668.png

三、Layout流程

测量完View大小后,就需要将View布局在Window中,View的布局主要通过确定上下左右四个点来确定的。

其中布局也是自上而下,不同的是ViewGroup先在layout()中确定自己的布局,然后在onLayout()方法中再调用子View的layout()方法,让子View布局。在Measure过程中,ViewGroup一般是先测量子View的大小,然后再确定自身的大小。
public void layout(int l, int t, int r, int b) {  

// 当前视图的四个顶点
int oldL = mLeft;
int oldT = mTop;
int oldB = mBottom;
int oldR = mRight;

// setFrame() / setOpticalFrame():确定View自身的位置
// 即初始化四个顶点的值,然后判断当前View大小和位置是否发生了变化并返回
boolean changed = isLayoutModeOptical(mParent) ?
setOpticalFrame(l, t, r, b) : setFrame(l, t, r, b);

//如果视图的大小和位置发生变化,会调用onLayout()
if (changed || (mPrivateFlags & PFLAG_LAYOUT_REQUIRED) == PFLAG_LAYOUT_REQUIRED) {

// onLayout():确定该View所有的子View在父容器的位置
onLayout(changed, l, t, r, b);
...

}

上面看出通过 setFrame() / setOpticalFrame():确定View自身的位置,通过onLayout()确定子View的布局。
setOpticalFrame()内部也是调用了setFrame(),所以具体看setFrame()怎么确定自身的位置布局。
protected boolean setFrame(int left, int top, int right, int bottom) {
...
// 通过以下赋值语句记录下了视图的位置信息,即确定View的四个顶点
// 即确定了视图的位置
mLeft = left;
mTop = top;
mRight = right;
mBottom = bottom;

mRenderNode.setLeftTopRightBottom(mLeft, mTop, mRight, mBottom);
}

确定了自身的位置后,就要通过onLayout()确定子View的布局。onLayout()是一个可继承的空方法。
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
}
如果当前View就是一个单一的View,那么没有子View,就不需要实现该方法。

如果当前View是一个ViewGroup,就需要实现onLayout方法,该方法的实现个自定义ViewGroup时其特性有关,必须自己实现。

由此便完成了一层层的的布局工作。

View的布局流程:


3985563-8aefac42b3912539.png

四、Draw过程

View的绘制过程遵循如下几步:
①绘制背景 background.draw(canvas)

②绘制自己(onDraw)

③绘制Children(dispatchDraw)

④绘制装饰(onDrawScrollBars)

从源码中可以清楚地看出绘制的顺序。
public void draw(Canvas canvas) {
// 所有的视图最终都是调用 View 的 draw ()绘制视图( ViewGroup 没有复写此方法)
// 在自定义View时,不应该复写该方法,而是复写 onDraw(Canvas) 方法进行绘制。
// 如果自定义的视图确实要复写该方法,那么需要先调用 super.draw(canvas)完成系统的绘制,然后再进行自定义的绘制。
...
int saveCount;
if (!dirtyOpaque) {
// 步骤1: 绘制本身View背景
drawBackground(canvas);
}

// 如果有必要,就保存图层(还有一个复原图层)
// 优化技巧:
// 当不需要绘制 Layer 时,“保存图层“和“复原图层“这两步会跳过
// 因此在绘制的时候,节省 layer 可以提高绘制效率
final int viewFlags = mViewFlags;
if (!verticalEdges && !horizontalEdges) {

if (!dirtyOpaque)
// 步骤2:绘制本身View内容 默认为空实现, 自定义View时需要进行复写
onDraw(canvas);

......
// 步骤3:绘制子View 默认为空实现 单一View中不需要实现,ViewGroup中已经实现该方法
dispatchDraw(canvas);

........

// 步骤4:绘制滑动条和前景色等等
onDrawScrollBars(canvas);

..........
return;
}
...
}

无论是ViewGroup还是单一的View,都需要实现这套流程,不同的是,在ViewGroup中,实现了 dispatchDraw()方法,而在单一子View中不需要实现该方法。自定义View一般要重写onDraw()方法,在其中绘制不同的样式。
3985563-594f6b3cde8762c7.png

五、总结

从View的测量、布局和绘制原理来看,要实现自定义View,根据自定义View的种类不同,可能分别要自定义实现不同的方法。但是这些方法不外乎:onMeasure()方法,onLayout()方法,onDraw()方法。

onMeasure()方法:单一View,一般重写此方法,针对wrap_content情况,规定View默认的大小值,避免于match_parent情况一致。ViewGroup,若不重写,就会执行和单子View中相同逻辑,不会测量子View。一般会重写onMeasure()方法,循环测量子View。

onLayout()方法:单一View,不需要实现该方法。ViewGroup必须实现,该方法是个抽象方法,实现该方法,来对子View进行布局。

onDraw()方法:无论单一View,或者ViewGroup都需要实现该方法,因其是个空方法
  收起阅读 »

环信公开课第35期-手把手教学开发直播小程序

微信小程序,依托微信,已经越来越多的新功能不断上线,流量入口的不断增加,俨然成为互联网公司“必争之地”。 传统的公众号第三方直播由于入口较深,用户每次使用都有较复杂的路径,很难培养用户的使用习惯,而小程序呢?使用之后有永久留存,用户下次再使用可以瞬间找到入口,大大提升用户使用直播的习惯。直播商业化最难的地方在于哪里?在于流量,微信有庞大的低成本的流量可以帮助你去获得用户,转化用户。小程序直播可以说是你商业化用户最好的工具,同样也是你客户商业化微信流量的最好的工具。直播和购物的结合比较经典的,也是我们课程主要剖析的一个项目就是“超级购物台”——直播购物小程序。

574444888629916042.jpg



公开课参与
开课时间:2018年8月8日15:00
课程时长:40分钟
课程亮点:全国首个小程序直播购物Demo分享。手把手搭建基于环信的小程序直播购物平台
课程形式:网络直播 全国各地区、联网电脑、联网手机均可免费参与
 
课程大纲:

环信直播技术流程
1、【环信账号准备】注册、认证。
2、【直播间创建】包括环信后台创建及api 方式创建。
3、【房间主播及推流拉流地址设置】创建直播。主播绑定房间,房间设置直播地址。

小程序技术分享
1、【创建小程序项目】创建好已有UI的小程序项目。
2、【环信小程序sdk集成】基于webIM sdk 开发的小程序版本SDK集成配置。
3、【配置已有房间到小程序进行直播推流拉流测试】模拟直播间,使用推流工具进行推流测试。
4、【开发直播间聊天功能及聊天功能特殊情况处理】利用小程序SDK进行直播聊天室聊天开发。弹幕、特效等的一些延时。
答疑送奖品:
从提问中抽5名同学送出环信定制T恤,大家多多提问互动
TIM图片20180803110129.jpg

 
公开参与:报名听课
继续阅读 »
微信小程序,依托微信,已经越来越多的新功能不断上线,流量入口的不断增加,俨然成为互联网公司“必争之地”。 传统的公众号第三方直播由于入口较深,用户每次使用都有较复杂的路径,很难培养用户的使用习惯,而小程序呢?使用之后有永久留存,用户下次再使用可以瞬间找到入口,大大提升用户使用直播的习惯。直播商业化最难的地方在于哪里?在于流量,微信有庞大的低成本的流量可以帮助你去获得用户,转化用户。小程序直播可以说是你商业化用户最好的工具,同样也是你客户商业化微信流量的最好的工具。直播和购物的结合比较经典的,也是我们课程主要剖析的一个项目就是“超级购物台”——直播购物小程序。

574444888629916042.jpg



公开课参与
开课时间:2018年8月8日15:00
课程时长:40分钟
课程亮点:全国首个小程序直播购物Demo分享。手把手搭建基于环信的小程序直播购物平台
课程形式:网络直播 全国各地区、联网电脑、联网手机均可免费参与
 
课程大纲:

环信直播技术流程
1、【环信账号准备】注册、认证。
2、【直播间创建】包括环信后台创建及api 方式创建。
3、【房间主播及推流拉流地址设置】创建直播。主播绑定房间,房间设置直播地址。

小程序技术分享
1、【创建小程序项目】创建好已有UI的小程序项目。
2、【环信小程序sdk集成】基于webIM sdk 开发的小程序版本SDK集成配置。
3、【配置已有房间到小程序进行直播推流拉流测试】模拟直播间,使用推流工具进行推流测试。
4、【开发直播间聊天功能及聊天功能特殊情况处理】利用小程序SDK进行直播聊天室聊天开发。弹幕、特效等的一些延时。
答疑送奖品:
从提问中抽5名同学送出环信定制T恤,大家多多提问互动
TIM图片20180803110129.jpg

 
公开参与:报名听课 收起阅读 »

滴滴!“全村的希望”环信T恤已发出,收到的同学打个卡

千呼万唤!经过与工厂沟通无数沟通,环信T恤量产到货啦!中奖同学收到了吗?

TIM图片20180802190143.jpg

实物图


希望款:
环信机器人,正面是我们美女设计师设计的三个机器人,扛着“全镇的希望”,“全县的希望”,“全环信的希望”三个小旗,背面印有“全村的希望”
IM款:
正面:IM
背面:IM (即时通讯)
 
活动回顾:【有奖调查】环信T恤文案征集,你来我们就送!
中奖名单:
  • 楼层6:Eternally(额外奖励,提建议被采纳)
  • 楼层8:°﹏D.X.F.VIP 
  • 楼层18:空谷幽兰
  • 楼层28:skoxe
  • 楼层38.咚咚

  欢迎大家以后多参加我们活动,除了T恤还有更多礼品送出,感谢继续支持环信!
继续阅读 »
千呼万唤!经过与工厂沟通无数沟通,环信T恤量产到货啦!中奖同学收到了吗?

TIM图片20180802190143.jpg

实物图


希望款:
环信机器人,正面是我们美女设计师设计的三个机器人,扛着“全镇的希望”,“全县的希望”,“全环信的希望”三个小旗,背面印有“全村的希望”
IM款:
正面:IM
背面:IM (即时通讯)
 
活动回顾:【有奖调查】环信T恤文案征集,你来我们就送!
中奖名单:
  • 楼层6:Eternally(额外奖励,提建议被采纳)
  • 楼层8:°﹏D.X.F.VIP 
  • 楼层18:空谷幽兰
  • 楼层28:skoxe
  • 楼层38.咚咚

  欢迎大家以后多参加我们活动,除了T恤还有更多礼品送出,感谢继续支持环信! 收起阅读 »

【开源项目】全国首个开源直播小程序源码

今天你看直播了吗?
拥有10亿微信生态用户的小程序已经成为了继移动互联后的又一个现象级风口,随着微信小程序对外开放实时音视频录制及播放等更多连接能力,小程序与直播强强联合,在各行各业找到了非常多的玩法,小程序直播相比微信直播和APP直播更加简洁、流畅、低延时、多入口等众多优势迅速向商业直播领域及泛娱乐直播领域蔓延。从小游戏、内容付费、工具、大数据、社交电商创业者到传统品牌商们,都在努力搭上小程序直播这辆快车,以免错过微信生态里新的流量洼地。
 
微信图片_20180725162426.jpg


作为一名环信生态圈资深开发者,本着对技术的热衷,对环信的眷恋和对党的忠诚,基于环信即时通讯云写了“直播购物小程序”,目前项目源码已全部免费开放,希望对有需求的企业和开发者提供一个思路和参考。
直播购物小程序源码github地址:https://github.com/YuTongNetworkTechnology/wechat_live/tree/master 
git打不开可直接点下面链接下载



预览图.jpg

直播购物小程序运行预览图 
 
小程序体验指南(仅需两步):
 
1、下载微信小程序开发工具,下载地址:https://developers.weixin.qq.c ... .html 
 
Catch9A07(07-20-17-38-30).jpg

2、导入源码:将附件的源码解压直接导入 


Catch1C69(07-20-17-38-30).jpg


环信小程序直播技术文档
一、 使用的技术
1、 环信IM直播室。
2、 微信小程序实时音视频播放组件live-player。
3、 推流软件(obs、易推流)等推流。
4、 视频流服务器(UCLOUD、七牛、腾讯)等视频流服务器。
二、 系统使用流程。
1、 视频推流软件将视频流推到流服务器。
2、 打开视频直播demo小程序注册环信账号。
3、 进入软件直播室进行测试。
三、 技术流程及使用的SDk
1、 注册环信账号
打开https://www.easemob.com/ 环信官网,点击右上角注册按钮,选择[注册即时通讯云]
1.png

填写对相关信息进行注册

2.png

注册成功后进行登录
3.png

注:新注册用户需进行账号的认证。
2、 直播应用创建
登录成功点击应用列表选择创建应用
4.png

输入应用名称等信息
 

5.png

创建成功后点击应用进入

6.png

需要注意的是应用的OrgName 和AppName这两个是以后都需要用到的两个参数变量
7.png

3、 直播创建
1)在创建直播之前需要对应用进行设置首先需要设置应用的直播流地址
第一步获取应用管理员的Token
curl -X POST "https://a1.easemob.com/[应用OrgName]/[应用AppName]/token" -d '{"grant_type":"client_credentials","client_id":"[应用client_id]","client_secret":"[应用] client_secret"}'
返回格式
{
"access_token":"YWMtWY779DgJEeS2h9OR7fw4QgAAAUmO4Qukwd9cfJSpkWHiOa7MCSk0MrkVIco",
"expires_in":5184000,
"application":"c03b3e30-046a-11e4-8ed1-5701cdaaa0e4"












第二步设置直播流地址
curl -X POST -H "Authorization: Bearer [管理员Token]"  " https://a1.easemob.com/[应用OrgName]/[应用AppName]/liverooms/stream_url -d '{"pc_pull":"[pc拉流地址]","pc_push":"[pc推流地址]","mobile_pull":"[手机拉流地址]","mobile_push":"[手机推流地址]"}'"
成功返回格式:
{
"action": "post",
"application": "e1a09de0-0e03-11e7-ad8e-a1d913615409",
"uri": "http://127.0.0.1:8080/easemob- ... ot%3B,
"entities": [ ],
"data": {
"pc_pull": true,
"mobile_push": true,
"mobile_pull": true,
"pc_push": true
},
"timestamp": 1494084474885,
"duration": 1,
"organization": "easemob-demo",
"applicationName": "chatdemoui"
}












2)创建主播
点击IM用户

8.png

点击注册IM用户

9.png

填写用户信息

10.png

创建用户的过程同样也可以通过REST API形式进行
curl -X POST -i " https://a1.easemob.com/[应用OrgName]/[应用AppName]/users" -d '{"username":"[用户名]","password":"[密码]"}'

注:应用必须为开放注册

11.png

将注册的用户添加为主播
curl -X POST -H "Authorization: [管理员Token]"  https://a1.easemob.com/[应用OrgName]/[应用AppName]/super_admin -d'{"superadmin":"[IM用户名]"}'
返回结果示例:
{
"action": "post",
"application": "4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5",
"uri": "http://127.0.0.1:8080/easemob- ... ot%3B,
"entities": [ ],
"data": {
"result": "success"
},
"timestamp": 1496236798886,
"duration": 0,
"organization": "easemob-demo",
"applicationName": "chatdemoui"
}












3)创建直播
点击直播

12.png

点击新建房间

13.png

填写房间信息
14.png

创建房间同时也可以使用REST API形式进行详情可以查看http://docs.easemob.com/im/live/server-integration环信官方文档。
4、 小程序demo集成使用
小程序直播购物demo集成官方WebIM SDK详情请查看https://github.com/easemob/webim-weixin-xcx
Demo具体配置如下
打开demo 下sdk配置文件

15.png

修改appkey为自己应用的appkey

16.png

打开pages/live/index.js修改房间默认拉流地址及直播间房间号

17.png

四、 扩展说明
Demo中房间为固定测试房间,实际使用中应获取环信直播的房间信息及房间列表。具体如下:
获取直播间列表:
curl -X GET -H "Authorization: Bearer  [用户Token]"  https://a1.easemob.com/[应用OrgName]/[应用AppName]/liverooms?ongoing=true&limit=[获取数量]&cursor=[游标地址(不填写为充开始查询)]

响应:
{
"action": "get",
"application": "4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5",
"params": {
"cursor": [
"ZGNiMjRmNGY1YjczYjlhYTNkYjk1MDY2YmEyNzFmODQ6aW06Y2hhdHJvb206ZWFzZW1vYi1kZW1vI2NoYXRkZW1vdWk6MzE"
],
"ongoing": [
"true"
],
"limit": [
"2"
]
},
"uri": "http://127.0.0.1:8080/easemob- ... ot%3B,
"entities": [ ],
"data": [
{
"id": "1924",
"chatroom_id": "17177265635330",
"title": "具体了",
"desc": "就咯",
"startTime": 1495779917352,
"endTime": 1495779917352,
"anchor": "wuls",
"gift_count": 0,
"praise_count": 0,
"current_user_count": 8,
"max_user_count": 9,
"status": "ongoing",
"cover_picture_url": "",
"pc_pull_url": "rtmp://vlive3.rtmp.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1924_1",
"pc_push_url": "rtmp://publish3.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1924_1",
"mobile_pull_url": "rtmp://vlive3.rtmp.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1924_1",
"mobile_push_url": "rtmp://publish3.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1924_1"
},
{
"id": "1922",
"chatroom_id": "17175003856897",
"title": "香山",
"desc": "随便",
"startTime": 1495777760957,
"endTime": 1495777760957,
"anchor": "sx001",
"gift_count": 0,
"praise_count": 8,
"current_user_count": 1,
"max_user_count": 3,
"status": "ongoing",
"cover_picture_url": "http://127.0.0.1:8080/easemob- ... ot%3B,
"pc_pull_url": "rtmp://vlive3.rtmp.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1922_1",
"pc_push_url": "rtmp://publish3.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1922_1",
"mobile_pull_url": "rtmp://vlive3.rtmp.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1922_1",
"mobile_push_url": "rtmp://publish3.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1922_1"
}
],
"timestamp": 1496303336669,
"duration": 0,
"organization": "easemob-demo",
"applicationName": "chatdemoui",
"cursor": "ZGNiMjRmNGY1YjczYjlhYTNkYjk1MDY2YmEyNzFmODQ6aW06Y2hhdHJvb206ZWFzZW1vYi1kZW1vI2NoYXRkZW1vdWk6NDk",
"count": 2
}












获取直播间详情:
curl -X GET -H "Authorization: Bearer [用户Token]" " https://a1.easemob.com/[应用OrgName]/[应用AppName]/[房间id]/status"
响应:
{
"action": "get",
"application": "4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5",
"uri": "http://127.0.0.1:8080/easemob- ... ot%3B,
"entities": [ ],
"data": {
"liveRoomID": "1946",
"status": "ongoing"
},
"timestamp": 1496234759930,
"duration": 0,
"organization": "easemob-demo",
"applicationName": "chatdemoui",
"count": 0
}














 
使用环信直播购物小程序遇到任何问题欢迎跟帖讨论。
继续阅读 »
今天你看直播了吗?
拥有10亿微信生态用户的小程序已经成为了继移动互联后的又一个现象级风口,随着微信小程序对外开放实时音视频录制及播放等更多连接能力,小程序与直播强强联合,在各行各业找到了非常多的玩法,小程序直播相比微信直播和APP直播更加简洁、流畅、低延时、多入口等众多优势迅速向商业直播领域及泛娱乐直播领域蔓延。从小游戏、内容付费、工具、大数据、社交电商创业者到传统品牌商们,都在努力搭上小程序直播这辆快车,以免错过微信生态里新的流量洼地。
 
微信图片_20180725162426.jpg


作为一名环信生态圈资深开发者,本着对技术的热衷,对环信的眷恋和对党的忠诚,基于环信即时通讯云写了“直播购物小程序”,目前项目源码已全部免费开放,希望对有需求的企业和开发者提供一个思路和参考。
直播购物小程序源码github地址:https://github.com/YuTongNetworkTechnology/wechat_live/tree/master 
git打不开可直接点下面链接下载



预览图.jpg

直播购物小程序运行预览图 
 
小程序体验指南(仅需两步):
 
1、下载微信小程序开发工具,下载地址:https://developers.weixin.qq.c ... .html 
 
Catch9A07(07-20-17-38-30).jpg

2、导入源码:将附件的源码解压直接导入 


Catch1C69(07-20-17-38-30).jpg


环信小程序直播技术文档
一、 使用的技术
1、 环信IM直播室。
2、 微信小程序实时音视频播放组件live-player。
3、 推流软件(obs、易推流)等推流。
4、 视频流服务器(UCLOUD、七牛、腾讯)等视频流服务器。
二、 系统使用流程。
1、 视频推流软件将视频流推到流服务器。
2、 打开视频直播demo小程序注册环信账号。
3、 进入软件直播室进行测试。
三、 技术流程及使用的SDk
1、 注册环信账号
打开https://www.easemob.com/ 环信官网,点击右上角注册按钮,选择[注册即时通讯云]
1.png

填写对相关信息进行注册

2.png

注册成功后进行登录
3.png

注:新注册用户需进行账号的认证。
2、 直播应用创建
登录成功点击应用列表选择创建应用
4.png

输入应用名称等信息
 

5.png

创建成功后点击应用进入

6.png

需要注意的是应用的OrgName 和AppName这两个是以后都需要用到的两个参数变量
7.png

3、 直播创建
1)在创建直播之前需要对应用进行设置首先需要设置应用的直播流地址
第一步获取应用管理员的Token
curl -X POST "https://a1.easemob.com/[应用OrgName]/[应用AppName]/token" -d '{"grant_type":"client_credentials","client_id":"[应用client_id]","client_secret":"[应用] client_secret"}'
返回格式
{
"access_token":"YWMtWY779DgJEeS2h9OR7fw4QgAAAUmO4Qukwd9cfJSpkWHiOa7MCSk0MrkVIco",
"expires_in":5184000,
"application":"c03b3e30-046a-11e4-8ed1-5701cdaaa0e4"












第二步设置直播流地址
curl -X POST -H "Authorization: Bearer [管理员Token]"  " https://a1.easemob.com/[应用OrgName]/[应用AppName]/liverooms/stream_url -d '{"pc_pull":"[pc拉流地址]","pc_push":"[pc推流地址]","mobile_pull":"[手机拉流地址]","mobile_push":"[手机推流地址]"}'"
成功返回格式:
{
"action": "post",
"application": "e1a09de0-0e03-11e7-ad8e-a1d913615409",
"uri": "http://127.0.0.1:8080/easemob- ... ot%3B,
"entities": [ ],
"data": {
"pc_pull": true,
"mobile_push": true,
"mobile_pull": true,
"pc_push": true
},
"timestamp": 1494084474885,
"duration": 1,
"organization": "easemob-demo",
"applicationName": "chatdemoui"
}












2)创建主播
点击IM用户

8.png

点击注册IM用户

9.png

填写用户信息

10.png

创建用户的过程同样也可以通过REST API形式进行
curl -X POST -i " https://a1.easemob.com/[应用OrgName]/[应用AppName]/users" -d '{"username":"[用户名]","password":"[密码]"}'

注:应用必须为开放注册

11.png

将注册的用户添加为主播
curl -X POST -H "Authorization: [管理员Token]"  https://a1.easemob.com/[应用OrgName]/[应用AppName]/super_admin -d'{"superadmin":"[IM用户名]"}'
返回结果示例:
{
"action": "post",
"application": "4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5",
"uri": "http://127.0.0.1:8080/easemob- ... ot%3B,
"entities": [ ],
"data": {
"result": "success"
},
"timestamp": 1496236798886,
"duration": 0,
"organization": "easemob-demo",
"applicationName": "chatdemoui"
}












3)创建直播
点击直播

12.png

点击新建房间

13.png

填写房间信息
14.png

创建房间同时也可以使用REST API形式进行详情可以查看http://docs.easemob.com/im/live/server-integration环信官方文档。
4、 小程序demo集成使用
小程序直播购物demo集成官方WebIM SDK详情请查看https://github.com/easemob/webim-weixin-xcx
Demo具体配置如下
打开demo 下sdk配置文件

15.png

修改appkey为自己应用的appkey

16.png

打开pages/live/index.js修改房间默认拉流地址及直播间房间号

17.png

四、 扩展说明
Demo中房间为固定测试房间,实际使用中应获取环信直播的房间信息及房间列表。具体如下:
获取直播间列表:
curl -X GET -H "Authorization: Bearer  [用户Token]"  https://a1.easemob.com/[应用OrgName]/[应用AppName]/liverooms?ongoing=true&limit=[获取数量]&cursor=[游标地址(不填写为充开始查询)]

响应:
{
"action": "get",
"application": "4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5",
"params": {
"cursor": [
"ZGNiMjRmNGY1YjczYjlhYTNkYjk1MDY2YmEyNzFmODQ6aW06Y2hhdHJvb206ZWFzZW1vYi1kZW1vI2NoYXRkZW1vdWk6MzE"
],
"ongoing": [
"true"
],
"limit": [
"2"
]
},
"uri": "http://127.0.0.1:8080/easemob- ... ot%3B,
"entities": [ ],
"data": [
{
"id": "1924",
"chatroom_id": "17177265635330",
"title": "具体了",
"desc": "就咯",
"startTime": 1495779917352,
"endTime": 1495779917352,
"anchor": "wuls",
"gift_count": 0,
"praise_count": 0,
"current_user_count": 8,
"max_user_count": 9,
"status": "ongoing",
"cover_picture_url": "",
"pc_pull_url": "rtmp://vlive3.rtmp.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1924_1",
"pc_push_url": "rtmp://publish3.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1924_1",
"mobile_pull_url": "rtmp://vlive3.rtmp.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1924_1",
"mobile_push_url": "rtmp://publish3.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1924_1"
},
{
"id": "1922",
"chatroom_id": "17175003856897",
"title": "香山",
"desc": "随便",
"startTime": 1495777760957,
"endTime": 1495777760957,
"anchor": "sx001",
"gift_count": 0,
"praise_count": 8,
"current_user_count": 1,
"max_user_count": 3,
"status": "ongoing",
"cover_picture_url": "http://127.0.0.1:8080/easemob- ... ot%3B,
"pc_pull_url": "rtmp://vlive3.rtmp.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1922_1",
"pc_push_url": "rtmp://publish3.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1922_1",
"mobile_pull_url": "rtmp://vlive3.rtmp.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1922_1",
"mobile_push_url": "rtmp://publish3.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1922_1"
}
],
"timestamp": 1496303336669,
"duration": 0,
"organization": "easemob-demo",
"applicationName": "chatdemoui",
"cursor": "ZGNiMjRmNGY1YjczYjlhYTNkYjk1MDY2YmEyNzFmODQ6aW06Y2hhdHJvb206ZWFzZW1vYi1kZW1vI2NoYXRkZW1vdWk6NDk",
"count": 2
}












获取直播间详情:
curl -X GET -H "Authorization: Bearer [用户Token]" " https://a1.easemob.com/[应用OrgName]/[应用AppName]/[房间id]/status"
响应:
{
"action": "get",
"application": "4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5",
"uri": "http://127.0.0.1:8080/easemob- ... ot%3B,
"entities": [ ],
"data": {
"liveRoomID": "1946",
"status": "ongoing"
},
"timestamp": 1496234759930,
"duration": 0,
"organization": "easemob-demo",
"applicationName": "chatdemoui",
"count": 0
}














 
使用环信直播购物小程序遇到任何问题欢迎跟帖讨论。 收起阅读 »

webapp聊天室|h5仿微信版聊天室(多人互动)

h5微互动聊天室|h5多人群聊天室  ,html5开发的多人互动聊天室——手机端仿微信界面聊天室,采用750px + flex全新布局,以及使用rem响应式配合fontsize.js,弹窗则是使用自己开发的wcPop.js插件;编辑器部分由原先的单一表情新增为动图表情,实现了消息、表情发送 | 大图、视频效果预览 | 仿微信红包、打赏等功能。

002360截图20180703094436583.jpg

004360截图20180703094558646.jpg

005360截图20180703094648536.jpg

006360截图20180703094742961.jpg

007360截图20180703094909872.jpg

008360截图20180703095118526.jpg

010360截图20180703095355515.jpg

011360截图20180703095500179.jpg

012360截图20180703095616681.jpg

013360截图20180703095702680.jpg

small-360截图20180707110220369.jpg

 
继续阅读 »
h5微互动聊天室|h5多人群聊天室  ,html5开发的多人互动聊天室——手机端仿微信界面聊天室,采用750px + flex全新布局,以及使用rem响应式配合fontsize.js,弹窗则是使用自己开发的wcPop.js插件;编辑器部分由原先的单一表情新增为动图表情,实现了消息、表情发送 | 大图、视频效果预览 | 仿微信红包、打赏等功能。

002360截图20180703094436583.jpg

004360截图20180703094558646.jpg

005360截图20180703094648536.jpg

006360截图20180703094742961.jpg

007360截图20180703094909872.jpg

008360截图20180703095118526.jpg

010360截图20180703095355515.jpg

011360截图20180703095500179.jpg

012360截图20180703095616681.jpg

013360截图20180703095702680.jpg

small-360截图20180707110220369.jpg

  收起阅读 »

仿微信客户端web版|h5仿wechat聊天

最近开发了一个仿微信客户端web版聊天案例,和微信聊天界面很类似,功能也还不错。

003360截图20180526105830754.jpg

005360截图20180526110017896.jpg

006360截图20180526110433256.jpg

006360截图20180526110523643.jpg

007360截图20180526110617998.jpg

008360截图20180526110706912.jpg

009360截图20180526111003984.jpg

010360截图20180526111118020.jpg


微信图片_20180526112637.jpg

 
继续阅读 »
最近开发了一个仿微信客户端web版聊天案例,和微信聊天界面很类似,功能也还不错。

003360截图20180526105830754.jpg

005360截图20180526110017896.jpg

006360截图20180526110433256.jpg

006360截图20180526110523643.jpg

007360截图20180526110617998.jpg

008360截图20180526110706912.jpg

009360截图20180526111003984.jpg

010360截图20180526111118020.jpg


微信图片_20180526112637.jpg

  收起阅读 »

环信客户互动云v5.37已发布,新增客户中心日志

新增客户中心日志:在客户中心日志页面下,可查看到客户中心的操作日志,目前记录范围为黑名单操作日志。
进入“管理员模式 > 客户中心 > 客户中心日志”页面,可以查看到黑名单操作日志,点击【筛选排序】按钮可进行自定义筛选,点击操作日志记录可显示客户资料、互动详情及黑名单操作详情。

 

[b]
500312548_wx.jpg
[/b]
 客服模式

历史会话和质检页面iframe标签页支持拖动移动左右位置

历史会话和质检记录详情,会话聊窗右侧iframe标签页支持拖动移动左右位置。

进入“客服模式 > 历史会话”页面,打开历史会话记录详情,选中聊窗右侧iframe标签页,待鼠标变成小手状时,左右拖动可移动位置。

“客服模式 > 质量检查 > 质检记录”页面,以上优化适用。

注:管理员模式下,历史会话/质量检查页面记录详情页,同样支持iframe标签页拖动移动左右位置。

历史会话和质检页面会话标签可显示所有层级

历史会话和质检页面记录详情,会话标签可显示所有层级。

进入“客服模式 > 历史会话”页面,打开历史会话记录详情,可看到聊窗会话标签显示效果优化并可显示所有层级。

“客服模式 > 质量检查 > 质检记录”页面,“客服模式 > 搜索”页面,以上优化适用。

注:管理员模式下,历史会话/质检/搜索页面,以上优化适用。

历史会话满意度标签页替换为满意度图标显示

历史会话详情,原满意度标签页取消,右上角增加满意度图标,显示满意度评价信息。

进入“客服模式 > 历史会话”页面,打开历史会话记录详情,可看到聊窗右侧满意度标签页取消显示,右上角增加满意度图标,鼠标点击可弹窗显示满意度评价详情。

“客服模式 > 质量检查 > 质检记录”页面,以上优化适用。

注:管理员模式下,历史会话/质检页面,以上优化适用。

管理员模式

新增【客户中心日志】功能


在客户中心日志页面下,可查看到客户中心的操作日志,目前记录范围为黑名单操作日志。

进入“管理员模式 > 客户中心 > 客户中心日志”页面,可以查看到黑名单操作日志,点击【筛选排序】按钮可进行自定义筛选,点击操作日志记录可显示客户资料、互动详情及黑名单操作详情。

新增自定义业务规则模拟测试功能

自定义业务规则新增模拟测试功能,可通过测试,判断规则是否可用。

进入“管理员模式 > 设置 > 自定义业务规则”页面,可点击 图标对指定规则进行模拟测试。点击 ,弹出规则测试详细参数窗口,设定参数后,可点击测试按钮,进行测试。若测试成功,则说明规则可用。

注:自定义业务规则功能为标准版增值服务、旗舰版基础功能。如需开通,请提供租户ID并联系环信商务经理。

权限管理中客服模式-历史会话增加数据权限

自定义角色权限,客服模式-历史会话增加数据权限。

进入“管理员模式 > 设置 > 权限管理”页面,编辑自定义角色权限(或添加自定义角色),找到客服模式下历史会话权限,可查看到右边新增数据权限,下拉列表可选择“客服/技能组/租户”3个选项,可根据需要进行自定义设置。

【优化】客户中心导航菜单优化

管理员模式下,【客户中心】导航菜单优化。

进入“管理员模式 > 客户中心”页面,可看到客户中心下二级菜单项优化。其中包括:

原“客户中心”一级菜单更改为【客户中心】下“客户信息”二级菜单。
原“设置-客户标签”“设置-客户中心设置”二级菜单 更改为【客户中心】下二级菜单。
新增【客户中心日志】功能,详情可参考新增【客户中心日志】功能章节。

【优化】访客端消息关键字匹配后行为设置

关键字匹配功能下,新增访客消息端行为配置选项。

进入“管理员模式 > 设置 > 关键字匹配”页面,点击关键字过滤(或添加关键字匹配规则),在弹出窗口中,消息来源选择“访客消息”,满足以下条件选择“关键字匹配”,可查看到执行下拉列表新增2项“在坐席端提示消息 / 在坐席和访客端提示消息”;

弹出窗口中,消息来源选择“访客消息”,满足以下条件选择“正则表达式”,可查看到执行下拉列表新增1项“发送事件到告警记录面板”。

注:关键字匹配功能为标准版增值服务、旗舰版基础功能。如需开通,请提供租户ID并联系环信商务经理。

【优化】客户标签数量限制增大至100

优化会话窗口客户标签显示问题,数量限制40增大至100。新建及导入客户标签时,支持最大数量为100。

【优化】机器人自定义菜单操作提示统一交互

优化机器人设置页面,自定义菜单标签页操作的交互提示,与其他交互保持一致。

进入“管理员模式 > 智能机器人 > 机器人设置”页面,打开自定义菜单页签,添加/编辑/删除菜单项时,回车或点击输入框以外的其他区域可保存,并在右上角给出保存反馈提示。

【优化】公共常用语新增及导入字符数限制统一为1000

优化了公共常用语新增及导入字符数限制问题,统一为1000字符。1个字母或1个汉字均算作1个字符。

修复历史会话/待接入页面数据权限问题

“管理员模式 > 设置 > 权限管理”,修复如下问题:
  • 管理员角色-客服模式-待接入,默认数据权限为“技能组”。
  • 坐席角色-客服模式-历史会话,默认数据权限为“客服”。
  • 坐席角色-客服模式-待接入,默认数据权限为“技能组”。


并修复了相关前端数据显示问题。
 
环信客户互动云更新日志:更新日志
环信客户互动云登陆地址:登陆地址
继续阅读 »
新增客户中心日志:在客户中心日志页面下,可查看到客户中心的操作日志,目前记录范围为黑名单操作日志。
进入“管理员模式 > 客户中心 > 客户中心日志”页面,可以查看到黑名单操作日志,点击【筛选排序】按钮可进行自定义筛选,点击操作日志记录可显示客户资料、互动详情及黑名单操作详情。

 

[b]
500312548_wx.jpg
[/b]
 客服模式

历史会话和质检页面iframe标签页支持拖动移动左右位置

历史会话和质检记录详情,会话聊窗右侧iframe标签页支持拖动移动左右位置。

进入“客服模式 > 历史会话”页面,打开历史会话记录详情,选中聊窗右侧iframe标签页,待鼠标变成小手状时,左右拖动可移动位置。

“客服模式 > 质量检查 > 质检记录”页面,以上优化适用。

注:管理员模式下,历史会话/质量检查页面记录详情页,同样支持iframe标签页拖动移动左右位置。

历史会话和质检页面会话标签可显示所有层级

历史会话和质检页面记录详情,会话标签可显示所有层级。

进入“客服模式 > 历史会话”页面,打开历史会话记录详情,可看到聊窗会话标签显示效果优化并可显示所有层级。

“客服模式 > 质量检查 > 质检记录”页面,“客服模式 > 搜索”页面,以上优化适用。

注:管理员模式下,历史会话/质检/搜索页面,以上优化适用。

历史会话满意度标签页替换为满意度图标显示

历史会话详情,原满意度标签页取消,右上角增加满意度图标,显示满意度评价信息。

进入“客服模式 > 历史会话”页面,打开历史会话记录详情,可看到聊窗右侧满意度标签页取消显示,右上角增加满意度图标,鼠标点击可弹窗显示满意度评价详情。

“客服模式 > 质量检查 > 质检记录”页面,以上优化适用。

注:管理员模式下,历史会话/质检页面,以上优化适用。

管理员模式

新增【客户中心日志】功能


在客户中心日志页面下,可查看到客户中心的操作日志,目前记录范围为黑名单操作日志。

进入“管理员模式 > 客户中心 > 客户中心日志”页面,可以查看到黑名单操作日志,点击【筛选排序】按钮可进行自定义筛选,点击操作日志记录可显示客户资料、互动详情及黑名单操作详情。

新增自定义业务规则模拟测试功能

自定义业务规则新增模拟测试功能,可通过测试,判断规则是否可用。

进入“管理员模式 > 设置 > 自定义业务规则”页面,可点击 图标对指定规则进行模拟测试。点击 ,弹出规则测试详细参数窗口,设定参数后,可点击测试按钮,进行测试。若测试成功,则说明规则可用。

注:自定义业务规则功能为标准版增值服务、旗舰版基础功能。如需开通,请提供租户ID并联系环信商务经理。

权限管理中客服模式-历史会话增加数据权限

自定义角色权限,客服模式-历史会话增加数据权限。

进入“管理员模式 > 设置 > 权限管理”页面,编辑自定义角色权限(或添加自定义角色),找到客服模式下历史会话权限,可查看到右边新增数据权限,下拉列表可选择“客服/技能组/租户”3个选项,可根据需要进行自定义设置。

【优化】客户中心导航菜单优化

管理员模式下,【客户中心】导航菜单优化。

进入“管理员模式 > 客户中心”页面,可看到客户中心下二级菜单项优化。其中包括:

原“客户中心”一级菜单更改为【客户中心】下“客户信息”二级菜单。
原“设置-客户标签”“设置-客户中心设置”二级菜单 更改为【客户中心】下二级菜单。
新增【客户中心日志】功能,详情可参考新增【客户中心日志】功能章节。

【优化】访客端消息关键字匹配后行为设置

关键字匹配功能下,新增访客消息端行为配置选项。

进入“管理员模式 > 设置 > 关键字匹配”页面,点击关键字过滤(或添加关键字匹配规则),在弹出窗口中,消息来源选择“访客消息”,满足以下条件选择“关键字匹配”,可查看到执行下拉列表新增2项“在坐席端提示消息 / 在坐席和访客端提示消息”;

弹出窗口中,消息来源选择“访客消息”,满足以下条件选择“正则表达式”,可查看到执行下拉列表新增1项“发送事件到告警记录面板”。

注:关键字匹配功能为标准版增值服务、旗舰版基础功能。如需开通,请提供租户ID并联系环信商务经理。

【优化】客户标签数量限制增大至100

优化会话窗口客户标签显示问题,数量限制40增大至100。新建及导入客户标签时,支持最大数量为100。

【优化】机器人自定义菜单操作提示统一交互

优化机器人设置页面,自定义菜单标签页操作的交互提示,与其他交互保持一致。

进入“管理员模式 > 智能机器人 > 机器人设置”页面,打开自定义菜单页签,添加/编辑/删除菜单项时,回车或点击输入框以外的其他区域可保存,并在右上角给出保存反馈提示。

【优化】公共常用语新增及导入字符数限制统一为1000

优化了公共常用语新增及导入字符数限制问题,统一为1000字符。1个字母或1个汉字均算作1个字符。

修复历史会话/待接入页面数据权限问题

“管理员模式 > 设置 > 权限管理”,修复如下问题:
  • 管理员角色-客服模式-待接入,默认数据权限为“技能组”。
  • 坐席角色-客服模式-历史会话,默认数据权限为“客服”。
  • 坐席角色-客服模式-待接入,默认数据权限为“技能组”。


并修复了相关前端数据显示问题。
 
环信客户互动云更新日志:更新日志
环信客户互动云登陆地址:登陆地址 收起阅读 »

h5仿微信聊天|h5微聊系统


002360截图20170628163414741.jpg


003360截图20170628171647847.jpg


004360截图20170628171705343.jpg


005360截图20170628171829856.jpg


006360截图20170701135250829.jpg


007360截图20170628172154239.jpg


008360截图20180225115155731.jpg


009360截图20180225115737554.jpg


010360截图20180225114747100.jpg


011360截图20180225120528050.jpg


欢迎大家一起来交流学习  QQ:(282310962) WX:(xy190310)
 
继续阅读 »

002360截图20170628163414741.jpg


003360截图20170628171647847.jpg


004360截图20170628171705343.jpg


005360截图20170628171829856.jpg


006360截图20170701135250829.jpg


007360截图20170628172154239.jpg


008360截图20180225115155731.jpg


009360截图20180225115737554.jpg


010360截图20180225114747100.jpg


011360截图20180225120528050.jpg


欢迎大家一起来交流学习  QQ:(282310962) WX:(xy190310)
  收起阅读 »

环信即时通讯云新版本发布-不在群聊天也能参加多人实时音视频会议!

环信即时通讯云V3.4.2已发布,新增消息邀请参加会议接口,被邀请方不在群聊天也能加入多人音视频会议。

  • Android SDK 更新日志


版本 V3.4.2 2018-06-19

新功能:

多人会议增加 joinConferenceWithTicket(); 接口
通过消息邀请参加会议;
Android 8 适配

修复:

修复移动端与chrome 端视频通话时不显示视频画面的bug;
解决极端情况下 Android 通话挂断崩溃的问题

优化:

音视频会议实现新的UI;
优化设备同时有FCM和华为推送时的逻辑,使用EMOption#setUseFCM()接口

EMOption#setUseFCM() 接口可以设置是否启用谷歌推送,无需再通过后台配置。默认为true,即如果用户手机上有google play service 且配置了FCM number则优先使用FCM推送,如果仅有国内用户,建议关闭该选项,详细可参考 demo 实现

请注意:为提供高质量且一致的音视频体验,从3.4.1版本开始,1v1 通话不再与3.1.5及以前版本兼容,请及时升级。
 
  • iOS SDK 更新日志


版本 V3.4.2 2018-06-15

新功能:

通过消息邀请参加其他人参加多人实时音视频会议

修复:

1v1视频通话,iOS端接收视频后,偶尔会不显示视频画面

请注意:为提供高质量且一致的音视频体验,从3.4.1版本开始,1v1 通话不再与3.1.5及以前版本兼容,请及时升级。
 
SDK更新日志:Android SDK更新日志 ios SDK更新日志
最新SDK下载:下载地址
继续阅读 »
环信即时通讯云V3.4.2已发布,新增消息邀请参加会议接口,被邀请方不在群聊天也能加入多人音视频会议。

  • Android SDK 更新日志


版本 V3.4.2 2018-06-19

新功能:

多人会议增加 joinConferenceWithTicket(); 接口
通过消息邀请参加会议;
Android 8 适配

修复:

修复移动端与chrome 端视频通话时不显示视频画面的bug;
解决极端情况下 Android 通话挂断崩溃的问题

优化:

音视频会议实现新的UI;
优化设备同时有FCM和华为推送时的逻辑,使用EMOption#setUseFCM()接口

EMOption#setUseFCM() 接口可以设置是否启用谷歌推送,无需再通过后台配置。默认为true,即如果用户手机上有google play service 且配置了FCM number则优先使用FCM推送,如果仅有国内用户,建议关闭该选项,详细可参考 demo 实现

请注意:为提供高质量且一致的音视频体验,从3.4.1版本开始,1v1 通话不再与3.1.5及以前版本兼容,请及时升级。
 
  • iOS SDK 更新日志


版本 V3.4.2 2018-06-15

新功能:

通过消息邀请参加其他人参加多人实时音视频会议

修复:

1v1视频通话,iOS端接收视频后,偶尔会不显示视频画面

请注意:为提供高质量且一致的音视频体验,从3.4.1版本开始,1v1 通话不再与3.1.5及以前版本兼容,请及时升级。
 
SDK更新日志:Android SDK更新日志 ios SDK更新日志
最新SDK下载:下载地址 收起阅读 »

【新手上路--分享一个小确幸 “解决更换Demo下的AppKey不起作用的问题”】

关于更换AppKey无效的问题  
下面是我更换AppKey的流程步骤:
  1. 利用随机注册的账号登录后,在Demo的【设置】页面进行更改为已注册好生成应用下的AppKey(已在环信管理后台进行注册 该应用,且利用后台的【IM注册用户】创建了用户user  )
  2. 点击"退出登录",杀死改APP进程,重新登录,输入user 及密码 ,提示登录失败,用户名或密码有误 !

  
   很纳闷,明明已经更换了AppKey啊,而且我输入的用户及密码都是对应注册应用下的用户啊,于是我再次利用一开始注册好的账号进行登录,竟然成功!说明我刚才更改为自己的AppKey根本就没起作用!!!    找到问题源之后,我开始留意到[自定义AppKey]的“switch 开关”,我输入完之后,将switch关 了,没错,我竟然傻乎乎的填完自定义AppKey后将switch开关给关了!顿时为自己的智商担忧啊,于是赶紧试了一下填完之后已经保留switch开关已开的状态,然后按照上述的步骤,登录成功了! 
继续阅读 »
关于更换AppKey无效的问题  
下面是我更换AppKey的流程步骤:
  1. 利用随机注册的账号登录后,在Demo的【设置】页面进行更改为已注册好生成应用下的AppKey(已在环信管理后台进行注册 该应用,且利用后台的【IM注册用户】创建了用户user  )
  2. 点击"退出登录",杀死改APP进程,重新登录,输入user 及密码 ,提示登录失败,用户名或密码有误 !

  
   很纳闷,明明已经更换了AppKey啊,而且我输入的用户及密码都是对应注册应用下的用户啊,于是我再次利用一开始注册好的账号进行登录,竟然成功!说明我刚才更改为自己的AppKey根本就没起作用!!!    找到问题源之后,我开始留意到[自定义AppKey]的“switch 开关”,我输入完之后,将switch关 了,没错,我竟然傻乎乎的填完自定义AppKey后将switch开关给关了!顿时为自己的智商担忧啊,于是赶紧试了一下填完之后已经保留switch开关已开的状态,然后按照上述的步骤,登录成功了!  收起阅读 »

环信即时通讯云V3.4.1已发布,更快,更稳定的实时音视频

​环信即时通讯云V3.4.1已发布:优化WiFi切4G时与服务器重连速度,优化1V1视频通话,新增音视频弱网检测提示功能。

500932935_wx.jpg

 iOS SDK 更新日志

版本 V3.4.1 2018-05-16


优化:

优化WiFi切4G时与服务器重连速度
优化实时1对1通话

新功能:

新增音视频弱网检测回调
新增加群时填写验证消息
新增聊天室断线时被踢出聊天室回调

请注意:为提供高质量且一致的音视频体验,从3.4.1版本开始,1v1 通话不再与3.1.5及以前版本兼容,请及时升级。
 
Android SDK 更新日志

版本 V3.4.1 2018-05-11


SDK:

修复安卓中会话消息未读数显示不准确的问题;
修复华为推送自动登录情况下有时不可用的问题;
修复app第一次安装运行,初始化过程有可能报nullpointer的问题;
尝试解决sendDeviceToServer()方法crash的问题;
实现音视频弱网检测提示功能;
实现加群时填写验证消息功能;
提供聊天室断线时被踢出聊天室的提醒;
优化1v1 通话;

EaseUI:

更新消息发送逻辑,用于解决发送消息出现重复,顺序颠倒等问题.

请注意:为提供高质量且一致的音视频体验,从3.4.1版本开始,1v1 通话不再与3.1.5及以前版本兼容,请及时升级。
 
版本历史:Android SDK更新日志  ios SDK更新日志
下载地址:SDK下载​
继续阅读 »
​环信即时通讯云V3.4.1已发布:优化WiFi切4G时与服务器重连速度,优化1V1视频通话,新增音视频弱网检测提示功能。

500932935_wx.jpg

 iOS SDK 更新日志

版本 V3.4.1 2018-05-16


优化:

优化WiFi切4G时与服务器重连速度
优化实时1对1通话

新功能:

新增音视频弱网检测回调
新增加群时填写验证消息
新增聊天室断线时被踢出聊天室回调

请注意:为提供高质量且一致的音视频体验,从3.4.1版本开始,1v1 通话不再与3.1.5及以前版本兼容,请及时升级。
 
Android SDK 更新日志

版本 V3.4.1 2018-05-11


SDK:

修复安卓中会话消息未读数显示不准确的问题;
修复华为推送自动登录情况下有时不可用的问题;
修复app第一次安装运行,初始化过程有可能报nullpointer的问题;
尝试解决sendDeviceToServer()方法crash的问题;
实现音视频弱网检测提示功能;
实现加群时填写验证消息功能;
提供聊天室断线时被踢出聊天室的提醒;
优化1v1 通话;

EaseUI:

更新消息发送逻辑,用于解决发送消息出现重复,顺序颠倒等问题.

请注意:为提供高质量且一致的音视频体验,从3.4.1版本开始,1v1 通话不再与3.1.5及以前版本兼容,请及时升级。
 
版本历史:Android SDK更新日志  ios SDK更新日志
下载地址:SDK下载​ 收起阅读 »

环信客户互动云v5.36已发布:新增历史会话查询方式

   环信客户互动云v5.36已发布,支持根据会话创建时间查询历史会话,方便客户相关数据部门统计历史会话信息。 
 
500604486_banner.jpg



 客服模式

历史会话支持【按会话创建时间】查询

支持根据会话创建时间查询历史会话,方便客户相关数据部门统计历史会话信息。

在历史会话列表页,点击右上角【筛选排序】按钮,弹窗内选择时间段为“会话创建时间”,点击右下角【筛选查询】按钮,即可根据会话创建时间进行筛选。筛选完成后,可在列表页查看相关结果。

历史会话详情资料页工单列表支持点击跳转

历史会话工单列表支持点击跳转,便于快速查询相关工单信息。

在历史会话详情资料页,可查看到当前历史会话相关工单列表,点击工单,可快速打开工单页面,查看工单详情。

注:融合工单功能为标准版/旗舰版增值服务。如需开通,请在“管理员模式 > 工单”页面提交申请,环信商务经理会主动联系您。

会话标签为空时支持保存

当前会话/进行中会话:

当“会话结束时强制添加会话标签”开关关闭时,会话标签支持全部删除,会话标签为空时可以保存;

当“会话结束时强制添加会话标签”开关开启时,点击会话标签,会话标签支持全部删除,为空时可以保存;点击结束会话按钮时,弹出添加会话标签窗口,此时必须至少添加一个会话标签,才可保存并结束会话;

历史会话:

会话标签支持全部删除,为空时可以保存;

会话聊窗与右侧iframe布局支持拖动分配大小

会话模式下(包括会话、历史会话),聊天窗口支持最小宽度340px,iframe窗口支持最小宽度195px,聊天窗口与iframe窗口支持拖动分配大小。

注:管理员模式下,“当前会话 / 历史会话 / 质量检查”会话详情页面支持聊窗与iframe窗口拖动分配大小。

【优化】历史会话质检指标单独标签页显示

“客服模式 > 历史会话“ 页面,会话聊窗右侧工具栏中原质检页签下“查看系统质检指标筛选”相关属性单独为“指标”页签进行显示。 “客服模式 > 质量检查 > 质检记录”页面,以上优化适用。

注:管理员模式下,历史会话与质检页面,以上优化适用。

新增客服结束语设置

新增客服结束语设置,可设置客服手动结束会话时的结束语。

进入“客服模式 > 客服信息”页面,可看到客服问候语下新增结束语设置,可设置客服结束语并可选择是否开启。客服结束语开启,客服手动结束会话时,会向访客自动发送客服结束语,客服无需在结束会话前,进行手动发送,以提高工作效率。

客服手动结束会话时,详细发送规则如下:
  • 客服结束语开启,系统结束语开启,发送客服结束语。
  • 客服结束语关闭,系统结束语开启,发送系统结束语。
  • 客服结束语开启,系统结束语关闭,发送客服结束语。
  • 客服结束语关闭,系统结束语关闭,不发送结束语。


注:管理员模式下,设置管理员客服结束语,管理员手动结束会话时,以上规则适用;其中客服结束语为管理员客服结束语。

管理员模式

【优化】当前会话列表增加渠道及关联显示


在当前会话列表页面,可以查看到会话渠道及关联信息。

进入“管理员模式 > 当前会话”页面,可以在当前会话列表,查看到会话渠道及关联信息。

技能组溢出增加“客服全部隐身/忙碌/离开”规则设置

技能组溢出增加“客服全部隐身/忙碌/离开”规则设置。

进入“管理员模式 > 设置 > 会话分配规则”页面,打开排队规则TAB页,点击右上角【添加规则】按钮,点击“满足以下条件”下拉选项,选择“客服全部隐身 / 客服全部忙碌 / 客服全部离开”状态,即可设置相应状态下的技能组溢出规则。

注:技能组溢出(排队规则)功能为标准版/旗舰版增值服务。如需开通,请提供租户ID并联系环信商务经理。

黑名单列表默认加载全部数据

黑名单列表,默认情况下加载全部数据。

进入“管理员模式 > 客户中心”页面,打开黑名单标签,默认可查看到所有黑名单信息。

企业欢迎语设置文案更新

进入“管理员模式 > 设置 > 系统开关”页面,可看到“企业欢迎语”设置下文案已更新。

更新内容见以下截图:

2_4.jpg


【优化】时间计划-节假日设置日期选择范围更新

节假日设置页面,开始日期及结束日期可选择任意日期。

进入“管理员模式 > 设置 > 时间计划”页面,打开节假日设置页签,可以设置节假日,节假日范围可选择任意日期(结束日期晚于开始日期)。

修复技能组查询问题

支持>1000技能组,技能组数量>1000时,可正常查询并显示。

修复当前会话显示二次修改访客资料问题

二次修改访客资料开启:

集成访客资料中描述信息修改后,打开当前会话,可查看到资料页中访客描述信息为最新访客资料。

修复最大接待数显示问题

管理员修改“管理员”或“自定义角色”最大接待数,相应角色当前会话可实时显示最大接待数。
 
环信客户互动云更新 文档地址
环信客户互动云 登陆地址
继续阅读 »
   环信客户互动云v5.36已发布,支持根据会话创建时间查询历史会话,方便客户相关数据部门统计历史会话信息。 
 
500604486_banner.jpg



 客服模式

历史会话支持【按会话创建时间】查询

支持根据会话创建时间查询历史会话,方便客户相关数据部门统计历史会话信息。

在历史会话列表页,点击右上角【筛选排序】按钮,弹窗内选择时间段为“会话创建时间”,点击右下角【筛选查询】按钮,即可根据会话创建时间进行筛选。筛选完成后,可在列表页查看相关结果。

历史会话详情资料页工单列表支持点击跳转

历史会话工单列表支持点击跳转,便于快速查询相关工单信息。

在历史会话详情资料页,可查看到当前历史会话相关工单列表,点击工单,可快速打开工单页面,查看工单详情。

注:融合工单功能为标准版/旗舰版增值服务。如需开通,请在“管理员模式 > 工单”页面提交申请,环信商务经理会主动联系您。

会话标签为空时支持保存

当前会话/进行中会话:

当“会话结束时强制添加会话标签”开关关闭时,会话标签支持全部删除,会话标签为空时可以保存;

当“会话结束时强制添加会话标签”开关开启时,点击会话标签,会话标签支持全部删除,为空时可以保存;点击结束会话按钮时,弹出添加会话标签窗口,此时必须至少添加一个会话标签,才可保存并结束会话;

历史会话:

会话标签支持全部删除,为空时可以保存;

会话聊窗与右侧iframe布局支持拖动分配大小

会话模式下(包括会话、历史会话),聊天窗口支持最小宽度340px,iframe窗口支持最小宽度195px,聊天窗口与iframe窗口支持拖动分配大小。

注:管理员模式下,“当前会话 / 历史会话 / 质量检查”会话详情页面支持聊窗与iframe窗口拖动分配大小。

【优化】历史会话质检指标单独标签页显示

“客服模式 > 历史会话“ 页面,会话聊窗右侧工具栏中原质检页签下“查看系统质检指标筛选”相关属性单独为“指标”页签进行显示。 “客服模式 > 质量检查 > 质检记录”页面,以上优化适用。

注:管理员模式下,历史会话与质检页面,以上优化适用。

新增客服结束语设置

新增客服结束语设置,可设置客服手动结束会话时的结束语。

进入“客服模式 > 客服信息”页面,可看到客服问候语下新增结束语设置,可设置客服结束语并可选择是否开启。客服结束语开启,客服手动结束会话时,会向访客自动发送客服结束语,客服无需在结束会话前,进行手动发送,以提高工作效率。

客服手动结束会话时,详细发送规则如下:
  • 客服结束语开启,系统结束语开启,发送客服结束语。
  • 客服结束语关闭,系统结束语开启,发送系统结束语。
  • 客服结束语开启,系统结束语关闭,发送客服结束语。
  • 客服结束语关闭,系统结束语关闭,不发送结束语。


注:管理员模式下,设置管理员客服结束语,管理员手动结束会话时,以上规则适用;其中客服结束语为管理员客服结束语。

管理员模式

【优化】当前会话列表增加渠道及关联显示


在当前会话列表页面,可以查看到会话渠道及关联信息。

进入“管理员模式 > 当前会话”页面,可以在当前会话列表,查看到会话渠道及关联信息。

技能组溢出增加“客服全部隐身/忙碌/离开”规则设置

技能组溢出增加“客服全部隐身/忙碌/离开”规则设置。

进入“管理员模式 > 设置 > 会话分配规则”页面,打开排队规则TAB页,点击右上角【添加规则】按钮,点击“满足以下条件”下拉选项,选择“客服全部隐身 / 客服全部忙碌 / 客服全部离开”状态,即可设置相应状态下的技能组溢出规则。

注:技能组溢出(排队规则)功能为标准版/旗舰版增值服务。如需开通,请提供租户ID并联系环信商务经理。

黑名单列表默认加载全部数据

黑名单列表,默认情况下加载全部数据。

进入“管理员模式 > 客户中心”页面,打开黑名单标签,默认可查看到所有黑名单信息。

企业欢迎语设置文案更新

进入“管理员模式 > 设置 > 系统开关”页面,可看到“企业欢迎语”设置下文案已更新。

更新内容见以下截图:

2_4.jpg


【优化】时间计划-节假日设置日期选择范围更新

节假日设置页面,开始日期及结束日期可选择任意日期。

进入“管理员模式 > 设置 > 时间计划”页面,打开节假日设置页签,可以设置节假日,节假日范围可选择任意日期(结束日期晚于开始日期)。

修复技能组查询问题

支持>1000技能组,技能组数量>1000时,可正常查询并显示。

修复当前会话显示二次修改访客资料问题

二次修改访客资料开启:

集成访客资料中描述信息修改后,打开当前会话,可查看到资料页中访客描述信息为最新访客资料。

修复最大接待数显示问题

管理员修改“管理员”或“自定义角色”最大接待数,相应角色当前会话可实时显示最大接待数。
 
环信客户互动云更新 文档地址
环信客户互动云 登陆地址 收起阅读 »

看了这篇文章你也能自己解决90%的开发问题-环信公开课第26期:客户端日志分析

    不管是使用何种编程语言,日志输出几乎无处不在,日志能帮我们追踪问题、 监控状态以及安全审计。作为一名软件开发人员,就必须要学会通过日志分析处理问题。在过去的环信公开课第26期,环信工程师沈冲讲解了环信开发过程中的日志分析处理。

 
公开课回放视频:https://v.qq.com/x/page/i0679s0ueso.html
 
 
 1、环信日志介绍
* 如何开启日志打印:
    * 初始化SDK时设置:options.enableConsoleLog = YES;
* 日志保存位置:
    * iOS:
        * 2.x:沙盒/Library/EaseMobLog
        * 3.x:沙盒/Documents/HyphenateSDK/easemobLog/
    * Android:
        * 2.x:/sdcard/Android/data/(您的包名)/(您的appkey)/log/日期/xxx.html
        * 3.x:/sdcard/Android/data/(包名)/(appkey)/core_log/easemob.log
* 如何导出日志:
    * iOS:
        * development:到沙盒中取出日志文件
        * distribution:将手机连上Xcode,bundleid不更换,run后导出沙盒文件,取出日志文件
    * Android:
        * 到本机存储卡中取出日志
    * 通过SDK接口导出:
        * iOS:[[EMClient sharedClient] getLogFilesPathWithCompletion:^(NSString *aPath, EMError *aError) {}];
        * Android:List<EMDeviceInfo> com.hyphenate.chat.EMClient.getLoggedInDevicesFromServer

2、日志分析
* SDK初始化:EMChatClientImpl::init()
* 登录、自动登录、退出登录
    * EMSessionManager::login():
AutoLogin
begin logout ..
* 断网与重连
    * onNetworkChanged():
EMSessionManager::reconnect()
* 被踢、被禁用
    * 被踢:operation : 2 
禁用:operation : 1
* 单聊和群聊的发送消息、已读回执
    * asyncSendMessage
单聊:chattype : CHAT
群聊:chattype : GROUPCHAT
已读回执:chattype : READ_ACK
消息ID:server_id : 475456018394908684
* 接收消息
    * command : NOTICE
消息ID:id : 475456157712910340
* 删除消息:EMDatabase::removeMessage: 475460335331969036
* 删除会话:EMChatManager::removeConversation: 31750912802818 isRemoveMessages: 1
* 群组相关:
    * 创建群组: mucCreate:: retCode: 200
    * 有用户加入群组: operation : INVITE_ACCEPT, operation : PRESENCE
    * 查看群详情、获取群成员列表、获取群公告、群组免打扰
    * 
收到群邀请、接受群邀请:
收到群邀请:operation : INVITE,
接受群邀请:mucInviteDisposeOperation:: retCode: 200
* 聊天室相关:
    * 加入、离开聊天室: 
        * 加入聊天室:EMChatroomManager::joinChatroom
        * 退出聊天室: mucQuit:: retCode: 200
    * 有用户加入聊天室: operation : PRESENCE
    * 有用户离开聊天室: operation : ABSENCE
看完视频你学会了吗?环信公开课每周三下午三点准时开讲https://ke.qq.com/course/293539?tuin=3441d418
 
继续阅读 »
    不管是使用何种编程语言,日志输出几乎无处不在,日志能帮我们追踪问题、 监控状态以及安全审计。作为一名软件开发人员,就必须要学会通过日志分析处理问题。在过去的环信公开课第26期,环信工程师沈冲讲解了环信开发过程中的日志分析处理。

 
公开课回放视频:https://v.qq.com/x/page/i0679s0ueso.html
 
 
 1、环信日志介绍
* 如何开启日志打印:
    * 初始化SDK时设置:options.enableConsoleLog = YES;
* 日志保存位置:
    * iOS:
        * 2.x:沙盒/Library/EaseMobLog
        * 3.x:沙盒/Documents/HyphenateSDK/easemobLog/
    * Android:
        * 2.x:/sdcard/Android/data/(您的包名)/(您的appkey)/log/日期/xxx.html
        * 3.x:/sdcard/Android/data/(包名)/(appkey)/core_log/easemob.log
* 如何导出日志:
    * iOS:
        * development:到沙盒中取出日志文件
        * distribution:将手机连上Xcode,bundleid不更换,run后导出沙盒文件,取出日志文件
    * Android:
        * 到本机存储卡中取出日志
    * 通过SDK接口导出:
        * iOS:[[EMClient sharedClient] getLogFilesPathWithCompletion:^(NSString *aPath, EMError *aError) {}];
        * Android:List<EMDeviceInfo> com.hyphenate.chat.EMClient.getLoggedInDevicesFromServer

2、日志分析
* SDK初始化:EMChatClientImpl::init()
* 登录、自动登录、退出登录
    * EMSessionManager::login():
AutoLogin
begin logout ..
* 断网与重连
    * onNetworkChanged():
EMSessionManager::reconnect()
* 被踢、被禁用
    * 被踢:operation : 2 
禁用:operation : 1
* 单聊和群聊的发送消息、已读回执
    * asyncSendMessage
单聊:chattype : CHAT
群聊:chattype : GROUPCHAT
已读回执:chattype : READ_ACK
消息ID:server_id : 475456018394908684
* 接收消息
    * command : NOTICE
消息ID:id : 475456157712910340
* 删除消息:EMDatabase::removeMessage: 475460335331969036
* 删除会话:EMChatManager::removeConversation: 31750912802818 isRemoveMessages: 1
* 群组相关:
    * 创建群组: mucCreate:: retCode: 200
    * 有用户加入群组: operation : INVITE_ACCEPT, operation : PRESENCE
    * 查看群详情、获取群成员列表、获取群公告、群组免打扰
    * 
收到群邀请、接受群邀请:
收到群邀请:operation : INVITE,
接受群邀请:mucInviteDisposeOperation:: retCode: 200
* 聊天室相关:
    * 加入、离开聊天室: 
        * 加入聊天室:EMChatroomManager::joinChatroom
        * 退出聊天室: mucQuit:: retCode: 200
    * 有用户加入聊天室: operation : PRESENCE
    * 有用户离开聊天室: operation : ABSENCE
看完视频你学会了吗?环信公开课每周三下午三点准时开讲https://ke.qq.com/course/293539?tuin=3441d418
  收起阅读 »

不是群主的好友,能否申请加入该群呢?

iOS
不是群主的好友,能否申请加入该群呢?
不是群主的好友,能否申请加入该群呢?

【有奖调查】环信T恤文案征集,你来我们就送!

微信图片_20180601155239.jpg

 
环信T恤背面文案征集,欢迎小伙伴留言,7个中文字以内。
 
送送送T恤!
 
文案一经采用,送T恤!并且留言楼层是8的尾号(包含8),恭喜你中奖了,环信T恤包邮到家!
 
中奖规则:
 
同一账号重复留言只记做一次,小伙伴们构思好文案再留言,珍惜抽奖机会。

活动时间2018年6月1日-6月10日,最终解释权归环信所有。
 
中奖名单公布:
  1. 楼层6:Eternally(额外奖励,提建议被采纳)
  2. 楼层8:°﹏D.X.F.VIP 
  3. 楼层18:空谷幽兰
  4. 楼层28:skoxe
  5. 楼层38.咚咚

继续阅读 »
微信图片_20180601155239.jpg

 
环信T恤背面文案征集,欢迎小伙伴留言,7个中文字以内。
 
送送送T恤!
 
文案一经采用,送T恤!并且留言楼层是8的尾号(包含8),恭喜你中奖了,环信T恤包邮到家!
 
中奖规则:
 
同一账号重复留言只记做一次,小伙伴们构思好文案再留言,珍惜抽奖机会。

活动时间2018年6月1日-6月10日,最终解释权归环信所有。
 
中奖名单公布:
  1. 楼层6:Eternally(额外奖励,提建议被采纳)
  2. 楼层8:°﹏D.X.F.VIP 
  3. 楼层18:空谷幽兰
  4. 楼层28:skoxe
  5. 楼层38.咚咚

收起阅读 »

Android收发消息原理,如何集成华为、小米等厂商推送?-环信公开课第25期

Android开发的你是否也有这样疑问,应用在Android手机退到后台太久会收不到消息?第三方推送怎么集成?谷歌推送国内能用吗?

5月30日环信研发工程师张松在环信第25期公开课上分享关于Android收发消息的原理,以及推送通知的实现,详细内容如下。
 

 为什么应用在Android手机上退到后台太久会出现收不到消息的情况?
    当app在后台运行时环信SDK通过一个后台服务保持一条连接环信服务器的长连接,但Android为了解决系统待机性能差的问题,随着Android版本的升级逐渐禁止了app级别的后台服务的运行。所以在一些版本比较高的Android系统上会有接收不到消息的情况。
 
如何解决Android后台收不到消息的问题?
   为了提高消息的到达率,环信SDK增加了对第三方推送服务的支持,包括小米推送、华为推送、Google FCM推送。 (服务端也增加了相应功能)
 
1.Google FCM推送:Firebase Cloud Messaging,用来替代Google的GCM推送服务。
 
FCM推送在国内是无法正常使用的,需要设备上有Google play service和能连接Google服务器的网络。所以该推送服务主要针对海外用户,如果你的app有海外用户,建议你增加对该推送服务的支持。
 
推送消息发送流程:
 

古国.png

环信Server:
1.环信后台配置推送证书
  让环信服务器拥有向你的app发送推送消息的功能
  根据配置的证书名称服务器可以判断设备使用了哪种推送
2.目标设备的推送token
  Android设备通过集成第三方推送SDK可以得到该推送token.
  推送token跟Android设备是一一对应的关系,一个token对应一个Android设备.
  不同推送通道获取到的推送token不同.
3.推送token属于哪个推送通道
  决定了用哪个通道来发送推送消息.
  根据Android设备上传的证书名称确定.
 
Android设备:

1.判断app所在Android设备上支持哪种推送通道
  • 小米推送: 支持小米系统
  • 华为推送: 支持华为系统
  • FCM:需要Google play service和能连接Google服务器的网络

2.集成第三方推送SDK获取推送token
3.将推送token和推送通道名称上传至环信服务器.

 
SDK集成第三方推送
小米推送:
小米推送目前集成在了SDK内部,后续也会放在Demo中实现,让开发者可以自己升级小米推送SDK
1.在app AndroidManifest.xml中添加配置:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.VIBRATE"/>
<permission
android:name="com.hyphenate.chatuidemo.permission.MIPUSH_RECEIVE" android:protectionLevel="signature" />
<!--这里com.hyphenate.chatuidemo改成app的包名-->
<uses-permission android:name="com.hyphenate.chatuidemo.permission.MIPUSH_RECEIVE" />
<!--这里com.hyphenate.chatuidemo改成app的包名-->

<service
android:name="com.xiaomi.mipush.sdk.PushMessageHandler"
android:enabled="true"
android:exported="true"
tools:ignore="ExportedService" />
<service
android:name="com.xiaomi.mipush.sdk.MessageHandleService"
android:enabled="true" />

<receiver
# EMMipushReceiver extends PushMessageReceiver
android:name="com.hyphenate.chat.EMMipushReceiver"
android:exported="true"
tools:ignore="ExportedReceiver">
<intent-filter>
<action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE" />
</intent-filter>
<intent-filter>
<action android:name="com.xiaomi.mipush.MESSAGE_ARRIVED" />
</intent-filter>
<intent-filter>
<action android:name="com.xiaomi.mipush.ERROR" />
</intent-filter>
</receiver>

EMOptions#setMipushConfig(appKey:"2882303761517426801", appSecret:"5381742660801");


SDK处理流程:

根据小米推送SDK提供的方法MiPushClient#shouldUseMIUIPush(Context context)判断当前设备是否支持小米推送
若当前设备支持推送,则调用MiPushClient#registerPush(Context context, appKey, appSecret)获取小米通道推送
 
token
将appKey和token上传至环信服务器,该部分实现位于EMMipushReceiver 中,如果开发者需要自定义小米PushMessageReceiver,请继承自EMMipushReceiver .
 
华为推送
华为推送已放置到demo层实现,方便开发者自己更新华为推送SDK
华为推送SDK做为hmspush 单独module存在
注意修改hmspush module中AndroidManifext.xml文件的appid,两个provider对应authorities
Demo中配置了一个BroadcastReceiver和一个HMSPushHelper
 
FCM推送
增加了compile 'com.google.android.gms:play-services-base:11.4.0',检查当前设备是否支持fcm推送.
设置fcm numberoptions.setFCMNumber("826964054884");
 
 整体工作流程:

2.png

   Android设备手动或自动登录时,判断当前设备支持哪种推送通道,将该通道下获取到的token和证明名称上传至环信服务器,当服务端检测到当前设备不在线,需要向当前设备发送推送消息的时候,根据设备上传的证书名称判断出当前设备使用的哪种推送通道接收推送消息,使用相应推送通道向该设备上传的推送token上发送消息,当前设备即可收到该推送消息.
 
建议:

1.如果你的app有海外用户,建议你在环信SDK上增加对FCM推送的支持
2.建议同时支持小米推送和华为推送,这样在小米和华为设备上都可以接收到推送消息.

 
课程完整回放视频http://v.qq.com/x/page/m0671pnnzjk.html 

 
 
 
 
继续阅读 »
Android开发的你是否也有这样疑问,应用在Android手机退到后台太久会收不到消息?第三方推送怎么集成?谷歌推送国内能用吗?

5月30日环信研发工程师张松在环信第25期公开课上分享关于Android收发消息的原理,以及推送通知的实现,详细内容如下。
 

 为什么应用在Android手机上退到后台太久会出现收不到消息的情况?
    当app在后台运行时环信SDK通过一个后台服务保持一条连接环信服务器的长连接,但Android为了解决系统待机性能差的问题,随着Android版本的升级逐渐禁止了app级别的后台服务的运行。所以在一些版本比较高的Android系统上会有接收不到消息的情况。
 
如何解决Android后台收不到消息的问题?
   为了提高消息的到达率,环信SDK增加了对第三方推送服务的支持,包括小米推送、华为推送、Google FCM推送。 (服务端也增加了相应功能)
 
1.Google FCM推送:Firebase Cloud Messaging,用来替代Google的GCM推送服务。
 
FCM推送在国内是无法正常使用的,需要设备上有Google play service和能连接Google服务器的网络。所以该推送服务主要针对海外用户,如果你的app有海外用户,建议你增加对该推送服务的支持。
 
推送消息发送流程:
 

古国.png

环信Server:
1.环信后台配置推送证书
  让环信服务器拥有向你的app发送推送消息的功能
  根据配置的证书名称服务器可以判断设备使用了哪种推送
2.目标设备的推送token
  Android设备通过集成第三方推送SDK可以得到该推送token.
  推送token跟Android设备是一一对应的关系,一个token对应一个Android设备.
  不同推送通道获取到的推送token不同.
3.推送token属于哪个推送通道
  决定了用哪个通道来发送推送消息.
  根据Android设备上传的证书名称确定.
 
Android设备:

1.判断app所在Android设备上支持哪种推送通道
  • 小米推送: 支持小米系统
  • 华为推送: 支持华为系统
  • FCM:需要Google play service和能连接Google服务器的网络

2.集成第三方推送SDK获取推送token
3.将推送token和推送通道名称上传至环信服务器.

 
SDK集成第三方推送
小米推送:
小米推送目前集成在了SDK内部,后续也会放在Demo中实现,让开发者可以自己升级小米推送SDK
1.在app AndroidManifest.xml中添加配置:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.VIBRATE"/>
<permission
android:name="com.hyphenate.chatuidemo.permission.MIPUSH_RECEIVE" android:protectionLevel="signature" />
<!--这里com.hyphenate.chatuidemo改成app的包名-->
<uses-permission android:name="com.hyphenate.chatuidemo.permission.MIPUSH_RECEIVE" />
<!--这里com.hyphenate.chatuidemo改成app的包名-->

<service
android:name="com.xiaomi.mipush.sdk.PushMessageHandler"
android:enabled="true"
android:exported="true"
tools:ignore="ExportedService" />
<service
android:name="com.xiaomi.mipush.sdk.MessageHandleService"
android:enabled="true" />

<receiver
# EMMipushReceiver extends PushMessageReceiver
android:name="com.hyphenate.chat.EMMipushReceiver"
android:exported="true"
tools:ignore="ExportedReceiver">
<intent-filter>
<action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE" />
</intent-filter>
<intent-filter>
<action android:name="com.xiaomi.mipush.MESSAGE_ARRIVED" />
</intent-filter>
<intent-filter>
<action android:name="com.xiaomi.mipush.ERROR" />
</intent-filter>
</receiver>

EMOptions#setMipushConfig(appKey:"2882303761517426801", appSecret:"5381742660801");


SDK处理流程:

根据小米推送SDK提供的方法MiPushClient#shouldUseMIUIPush(Context context)判断当前设备是否支持小米推送
若当前设备支持推送,则调用MiPushClient#registerPush(Context context, appKey, appSecret)获取小米通道推送
 
token
将appKey和token上传至环信服务器,该部分实现位于EMMipushReceiver 中,如果开发者需要自定义小米PushMessageReceiver,请继承自EMMipushReceiver .
 
华为推送
华为推送已放置到demo层实现,方便开发者自己更新华为推送SDK
华为推送SDK做为hmspush 单独module存在
注意修改hmspush module中AndroidManifext.xml文件的appid,两个provider对应authorities
Demo中配置了一个BroadcastReceiver和一个HMSPushHelper
 
FCM推送
增加了compile 'com.google.android.gms:play-services-base:11.4.0',检查当前设备是否支持fcm推送.
设置fcm numberoptions.setFCMNumber("826964054884");
 
 整体工作流程:

2.png

   Android设备手动或自动登录时,判断当前设备支持哪种推送通道,将该通道下获取到的token和证明名称上传至环信服务器,当服务端检测到当前设备不在线,需要向当前设备发送推送消息的时候,根据设备上传的证书名称判断出当前设备使用的哪种推送通道接收推送消息,使用相应推送通道向该设备上传的推送token上发送消息,当前设备即可收到该推送消息.
 
建议:

1.如果你的app有海外用户,建议你在环信SDK上增加对FCM推送的支持
2.建议同时支持小米推送和华为推送,这样在小米和华为设备上都可以接收到推送消息.

 
课程完整回放视频http://v.qq.com/x/page/m0671pnnzjk.html 

 
 
 
  收起阅读 »