GitHub 开源跨平台神器 Electron 实践

认识 Electron

Electron是由GitHub开发,用HTML、CSS 和 JavaScript来构建跨平台桌面应用程序的一个开源库。Electron通过将Chromium和Node.js合并到同一个运行时环境中,并将其打包为Mac、Windows和Linux系统下的应用。Electron于2013年作为构建GitHub上可编程的文本编辑器Atom的框架而被开发出来。

这不意味着Electron是绑定了GUI库的JavaScript。相反,Electron使用Web页面作为它的GUI,所以你能把它看作成一个被JavaScript控制的,精简版的Chromium浏览器。

Electron的版本更新很频繁,基本保持在1周发布一个小版本,每季度发布一个大版本。除了稳定版外还有Beta版和Nightly(最新功能试用版),Chromium更新时,Electron也会跟着更新。

为什么选择Electron

如今的桌面应用软件基本都需要跨平台运行,类似于MFC、Duilib等技术都无法满足需求。当今的跨平台桌面应用软件开发以使用QT,Electron较多。

QT跨平台开发

Qt是一个跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。作为使用C++语言开发的框架,他的优缺点十分明显。

优点:

运行效率高;

架构健壮,性能强大。

缺点:

开发周期长;

需要开发者具有C++编程能力;

QT是一款收费软件,如果不想缴费购买License,又想用QT开发商业(闭源)程序,必须遵守LGPL协议,开源使用了LGPL库的源代码。

Electron桌面软件开发

Electron最早用于开发GitHub上的可编程文本编辑器Atom,它是一个借助Node.js和Chromium, 利用HTML/CSS/JavaScript语言创建桌面应用的框架。与之类似的还有NW.js, 但是NW.js社区发展基本处于停滞状态,更新也较慢。

优点:

使用JavaScript语言作为开发语言,方便前端开发者轻松开发桌面应用,原C++/Java语言开发者,也可以很快入手开发;

方便调试,提供了浏览器的开发者工具,轻松断点调试;

丰富的Web前端UI资源,可以快速制作绚丽的界面;

快速构建,迭代开发。最复杂的底层浏览器部分Electron已经帮你搞定,你只需要负责上层界面及业务逻辑的开发。Electron还提供了热更新功能,只需加载更新模块,会自动帮你检查更新并后台下载;

崩溃日志报告。轻松收集崩溃日志,定位错误代码;

C++插件扩展;

代码开源。Electron是GitHub上的开源项目,开发者有疑问可以在GitHub社区(https://github.com/electron/electron)上直接提issue,高级开发者可以修改Electron底层代码,订制自己的Elcetron。

缺点:

打包文件太大。Electron毕竟是一个浏览器,最小的应用安装包也要几十兆大小;

无法代码加密。和Web开发类似,使用者可以在开发者工具看到应用的客户端代码,商业软件需要代码加密的可以选择重要功能在服务端实现,桌面应用请求,或使用Node文件实现;

运行耗资源。浏览器通病,Electron应用也是多进程系统,启动几个Electron应用还好,如果太多会造成机器卡顿;

不支持XP系统,Node.js并不支持XP系统。
综上,如果你想快速的开发出炫酷的桌面应用,而又对系统限制不大,建议你选择Electron,如果你是一个前端开发人员,又想制作桌面应用,建议你选择Electron。
 
创建一个简单的应用

环境安装

Electron应用本质上是一个Node.js应用程序,需要安装Node.js,到官网(http://Node.js.cn/download/)安装即可。安装完后,在命令行窗口中分别输入node -v和npm -v来查看Node和NPM的版本。

初始化应用

与Node.js模块相同,应用的入口为package.json 文件,该文件可以在一个文件夹下使用npm init命令,按照提示填充各项信息生成。 一个最基本的Electron 应用一般来说会有如下的目录结构:
1.png

main.js是主进程,完成窗口的创建,url或html文件的加载。GitHub上提供了一个简单的Electron应用https://github.com/electron/electron-quick-start.git,可供学习参考。 
 
 
使用C++插件扩展功能

对于复杂的业务逻辑,可以开发成C++插件Node,C++插件主要完成一些复杂的逻辑功能,供Electron调用。Electron对于C++生成的Node插件引用功能来自于Node.js,可以使用require() 函数加载到工程中,像普通的模块一样使用。JavaScript 与C++ 库之间接口使用V8引擎,如下图所示:
2.jpg

插件开发环境
C++插件的开发需要安装node-gyp、Python 2.76,Windows下开发还要安装Visual Studio。
每个插件都有一个工程文件binging.gyp,配置了源文件、include路径及链接库,目标文件,使用的编译器等,格式如下:
3.png

C++与JavaScript通过V8交互执行的整体过程如下图所示:
4.jpg

 C++可以使用Napi接口,模块的加载使用宏NODEAPIMODULE(hello, Init),导出的JavaScript接口在Init中定义,示例如下:
5.png

编译C++插件使用命令如下:
6.png

生成的C++插件为node文件,如hello.node 在JavaScript中调用C++插件直接使用require函数,代码hello.js如下:
7.png

JavaScript就可以调用C++的接口了,执行命令node hello.js,输出"world"。
C++中调用JavaScript传递的回调函数需要使用libuv库,libuv实现了Node.js的事件循环、工作线程、以及平台所有的的异步操作的C库。 具体参考示例代码https://github.com/nodejs/node-addon-examples 
 
Electron打包
Electron应用打包可以使用electron-builder和electron-packager,推荐使用electron-builder,打包命令为npm run builder,可以使用参数配置生成的安装包的操作系统。

环信IM桌面端
环信的IM桌面端SDK提供了JavaScript接口,并且使用Electron框架开发的示例Demo,可以让任何一个前端人员在极短时间内搭建出一款同时在Mac、Windows上运行的即时通讯软件,拥有单聊、群聊和聊天室功能,支持文字、表情、图片、音视频等消息格式,开发时间短、界面美观,可以为开发者提供方便快捷的桌面端即时通讯解决方案。
下载地址:http://www.easemob.com/download/im
集成说明:http://docs-im.easemob.com/im/pc/intro/integration
 作者:李小明,现就职于环信,高级软件开发工程师,负责IM桌面端软件的研发,以C++、Node.js为开发语言,从事多年桌面软件开发经验,对行业前沿技术永远不懈追求。
继续阅读 »
认识 Electron

Electron是由GitHub开发,用HTML、CSS 和 JavaScript来构建跨平台桌面应用程序的一个开源库。Electron通过将Chromium和Node.js合并到同一个运行时环境中,并将其打包为Mac、Windows和Linux系统下的应用。Electron于2013年作为构建GitHub上可编程的文本编辑器Atom的框架而被开发出来。

这不意味着Electron是绑定了GUI库的JavaScript。相反,Electron使用Web页面作为它的GUI,所以你能把它看作成一个被JavaScript控制的,精简版的Chromium浏览器。

Electron的版本更新很频繁,基本保持在1周发布一个小版本,每季度发布一个大版本。除了稳定版外还有Beta版和Nightly(最新功能试用版),Chromium更新时,Electron也会跟着更新。

为什么选择Electron

如今的桌面应用软件基本都需要跨平台运行,类似于MFC、Duilib等技术都无法满足需求。当今的跨平台桌面应用软件开发以使用QT,Electron较多。

QT跨平台开发

Qt是一个跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。作为使用C++语言开发的框架,他的优缺点十分明显。

优点:

运行效率高;

架构健壮,性能强大。

缺点:

开发周期长;

需要开发者具有C++编程能力;

QT是一款收费软件,如果不想缴费购买License,又想用QT开发商业(闭源)程序,必须遵守LGPL协议,开源使用了LGPL库的源代码。

Electron桌面软件开发

Electron最早用于开发GitHub上的可编程文本编辑器Atom,它是一个借助Node.js和Chromium, 利用HTML/CSS/JavaScript语言创建桌面应用的框架。与之类似的还有NW.js, 但是NW.js社区发展基本处于停滞状态,更新也较慢。

优点:

使用JavaScript语言作为开发语言,方便前端开发者轻松开发桌面应用,原C++/Java语言开发者,也可以很快入手开发;

方便调试,提供了浏览器的开发者工具,轻松断点调试;

丰富的Web前端UI资源,可以快速制作绚丽的界面;

快速构建,迭代开发。最复杂的底层浏览器部分Electron已经帮你搞定,你只需要负责上层界面及业务逻辑的开发。Electron还提供了热更新功能,只需加载更新模块,会自动帮你检查更新并后台下载;

崩溃日志报告。轻松收集崩溃日志,定位错误代码;

C++插件扩展;

代码开源。Electron是GitHub上的开源项目,开发者有疑问可以在GitHub社区(https://github.com/electron/electron)上直接提issue,高级开发者可以修改Electron底层代码,订制自己的Elcetron。

缺点:

打包文件太大。Electron毕竟是一个浏览器,最小的应用安装包也要几十兆大小;

无法代码加密。和Web开发类似,使用者可以在开发者工具看到应用的客户端代码,商业软件需要代码加密的可以选择重要功能在服务端实现,桌面应用请求,或使用Node文件实现;

运行耗资源。浏览器通病,Electron应用也是多进程系统,启动几个Electron应用还好,如果太多会造成机器卡顿;

不支持XP系统,Node.js并不支持XP系统。
综上,如果你想快速的开发出炫酷的桌面应用,而又对系统限制不大,建议你选择Electron,如果你是一个前端开发人员,又想制作桌面应用,建议你选择Electron。
 
创建一个简单的应用

环境安装

Electron应用本质上是一个Node.js应用程序,需要安装Node.js,到官网(http://Node.js.cn/download/)安装即可。安装完后,在命令行窗口中分别输入node -v和npm -v来查看Node和NPM的版本。

初始化应用

与Node.js模块相同,应用的入口为package.json 文件,该文件可以在一个文件夹下使用npm init命令,按照提示填充各项信息生成。 一个最基本的Electron 应用一般来说会有如下的目录结构:
1.png

main.js是主进程,完成窗口的创建,url或html文件的加载。GitHub上提供了一个简单的Electron应用https://github.com/electron/electron-quick-start.git,可供学习参考。 
 
 
使用C++插件扩展功能

对于复杂的业务逻辑,可以开发成C++插件Node,C++插件主要完成一些复杂的逻辑功能,供Electron调用。Electron对于C++生成的Node插件引用功能来自于Node.js,可以使用require() 函数加载到工程中,像普通的模块一样使用。JavaScript 与C++ 库之间接口使用V8引擎,如下图所示:
2.jpg

插件开发环境
C++插件的开发需要安装node-gyp、Python 2.76,Windows下开发还要安装Visual Studio。
每个插件都有一个工程文件binging.gyp,配置了源文件、include路径及链接库,目标文件,使用的编译器等,格式如下:
3.png

C++与JavaScript通过V8交互执行的整体过程如下图所示:
4.jpg

 C++可以使用Napi接口,模块的加载使用宏NODEAPIMODULE(hello, Init),导出的JavaScript接口在Init中定义,示例如下:
5.png

编译C++插件使用命令如下:
6.png

生成的C++插件为node文件,如hello.node 在JavaScript中调用C++插件直接使用require函数,代码hello.js如下:
7.png

JavaScript就可以调用C++的接口了,执行命令node hello.js,输出"world"。
C++中调用JavaScript传递的回调函数需要使用libuv库,libuv实现了Node.js的事件循环、工作线程、以及平台所有的的异步操作的C库。 具体参考示例代码https://github.com/nodejs/node-addon-examples 
 
Electron打包
Electron应用打包可以使用electron-builder和electron-packager,推荐使用electron-builder,打包命令为npm run builder,可以使用参数配置生成的安装包的操作系统。

环信IM桌面端
环信的IM桌面端SDK提供了JavaScript接口,并且使用Electron框架开发的示例Demo,可以让任何一个前端人员在极短时间内搭建出一款同时在Mac、Windows上运行的即时通讯软件,拥有单聊、群聊和聊天室功能,支持文字、表情、图片、音视频等消息格式,开发时间短、界面美观,可以为开发者提供方便快捷的桌面端即时通讯解决方案。
下载地址:http://www.easemob.com/download/im
集成说明:http://docs-im.easemob.com/im/pc/intro/integration
 作者:李小明,现就职于环信,高级软件开发工程师,负责IM桌面端软件的研发,以C++、Node.js为开发语言,从事多年桌面软件开发经验,对行业前沿技术永远不懈追求。 收起阅读 »

据直播软件开发者们说,关于卡顿,直播系统源码尽力了

直播app软件制作、开发完毕后,搭建到服务器上就可以开始运营了,在运营一段时间后,直播平台的客服们最常被问及的问题是:客服小姐姐,为什么我这边看直播会卡顿呀?这时候,客服人员一边会把该问题反馈上去,一边查看下同类问题的反馈量,再根据情况进行回复。


直播卡顿是一件非常常见的事,在网络环境差、源码有BUG、服务器带宽不足、在线人数大导致服务器配置吃紧等情况下都会产生。
当然,直播软件开发者也会在开发直播系统源码时尽量降低直播卡顿的频率,比如:

1、 使用系统官方提供的开源代码编写原生系统,保障系统层面上的优势,原生系统在所有系统开发方式中,是交互性、用户体验感最好的一种开发方式。

2、 使用H.264、H.265等编码方式,降低带宽占用率

3、 默认使用硬编硬解的编解码方式,降低对手机CPU的占用率

4、 使用RTMP流媒体传输协议,保障直播传输速度。

总之,我们先假设直播软件开发者们已经很尽力的开发软件了,直播系统源码本身并没有BUG,开发人员也并非新手或仍坚持使用技术落后的开发方式进行软件开发的团队。在这种情况下,都有什么常见的导致直播卡顿的原因呢?
1、 网络环境差

先说网络环境差这个硬伤,回到开头,客服人员在接到用户反馈“直播卡顿”后,会主动查询是否有其他用户反馈同类问题,如果集中于某一区域有大量用户反应同类问题,可能是当地CDN分发网络出现问题,或由于天气原因导致的网络问题。

而如果反映用户聚集于同一直播间,则可能是主播方面网络的原因。

2、 服务器配置差

我们都知道在某些大主播开播时,由于一瞬间涌入直播间的人数过多而导致直播间进不去的情况是很常见的,在同一时刻,做同一操作的用户量大于服务器所能够承受的并发数,这种情况会使直播间产生卡顿。
用户方网络环境差的情况,或许能够因这份文件的下发而被解决。

5月8日,工信部在官网发布《两部门关于开展深入推进宽带网络提速降费 支撑经济高质量发展2019专项行动的通知》。通知要求:

1、 开展“双G双提”,100M及以上宽带用户比例提升至80%,4G用户渗透率力争提升至80%;

2、 开展“同网同速”,推动我国行政村4G和光纤覆盖率双双超过98%,实现农村宽带网络接入能力和速率基本达到城市同等水平;

3、 开展“精准降费”,推动基础电信企业面向全国建档立卡贫困户给予最大折扣基础通信资费优惠

长期以来,带宽网速“降价提速”的通知不断下达,三大网络运营商也在随之作出响应,农村网络基站覆盖率低、网络环境差的情况是长期存在的,但从一次比一次详尽严谨的通知来看,逐步建成更优质的网络环境,是一件有计划、有实施可能性的事。
本文到此结束,更多与直播软件开发、直播系统源码相关的行业资讯和分析会在以后逐渐放出,敬请期待,需要的朋友请关注我。

声明:文章为原创内容,转载请注明原文链接及作者
继续阅读 »
直播app软件制作、开发完毕后,搭建到服务器上就可以开始运营了,在运营一段时间后,直播平台的客服们最常被问及的问题是:客服小姐姐,为什么我这边看直播会卡顿呀?这时候,客服人员一边会把该问题反馈上去,一边查看下同类问题的反馈量,再根据情况进行回复。


直播卡顿是一件非常常见的事,在网络环境差、源码有BUG、服务器带宽不足、在线人数大导致服务器配置吃紧等情况下都会产生。
当然,直播软件开发者也会在开发直播系统源码时尽量降低直播卡顿的频率,比如:

1、 使用系统官方提供的开源代码编写原生系统,保障系统层面上的优势,原生系统在所有系统开发方式中,是交互性、用户体验感最好的一种开发方式。

2、 使用H.264、H.265等编码方式,降低带宽占用率

3、 默认使用硬编硬解的编解码方式,降低对手机CPU的占用率

4、 使用RTMP流媒体传输协议,保障直播传输速度。

总之,我们先假设直播软件开发者们已经很尽力的开发软件了,直播系统源码本身并没有BUG,开发人员也并非新手或仍坚持使用技术落后的开发方式进行软件开发的团队。在这种情况下,都有什么常见的导致直播卡顿的原因呢?
1、 网络环境差

先说网络环境差这个硬伤,回到开头,客服人员在接到用户反馈“直播卡顿”后,会主动查询是否有其他用户反馈同类问题,如果集中于某一区域有大量用户反应同类问题,可能是当地CDN分发网络出现问题,或由于天气原因导致的网络问题。

而如果反映用户聚集于同一直播间,则可能是主播方面网络的原因。

2、 服务器配置差

我们都知道在某些大主播开播时,由于一瞬间涌入直播间的人数过多而导致直播间进不去的情况是很常见的,在同一时刻,做同一操作的用户量大于服务器所能够承受的并发数,这种情况会使直播间产生卡顿。
用户方网络环境差的情况,或许能够因这份文件的下发而被解决。

5月8日,工信部在官网发布《两部门关于开展深入推进宽带网络提速降费 支撑经济高质量发展2019专项行动的通知》。通知要求:

1、 开展“双G双提”,100M及以上宽带用户比例提升至80%,4G用户渗透率力争提升至80%;

2、 开展“同网同速”,推动我国行政村4G和光纤覆盖率双双超过98%,实现农村宽带网络接入能力和速率基本达到城市同等水平;

3、 开展“精准降费”,推动基础电信企业面向全国建档立卡贫困户给予最大折扣基础通信资费优惠

长期以来,带宽网速“降价提速”的通知不断下达,三大网络运营商也在随之作出响应,农村网络基站覆盖率低、网络环境差的情况是长期存在的,但从一次比一次详尽严谨的通知来看,逐步建成更优质的网络环境,是一件有计划、有实施可能性的事。
本文到此结束,更多与直播软件开发、直播系统源码相关的行业资讯和分析会在以后逐渐放出,敬请期待,需要的朋友请关注我。

声明:文章为原创内容,转载请注明原文链接及作者 收起阅读 »

收藏了~阿里巴巴程序员常用的 15 款开发者工具

从人工到自动化,从重复到创新,技术演进的历程中,伴随着开发者工具类产品的发展。

阿里巴巴将自身在各类业务场景下的技术积淀,通过开源、云上实现或工具等形式对外开放,本文将精选了一些阿里巴巴的开发者工具,希望能帮助开发者们提高开发效率、更优雅的写代码。

由于开发者涉及的技术领域众多,笔者仅从自己熟悉的领域,以后端开发者的视角盘点平时可能用得到的工具。每个工具按照以下几点进行介绍:

工具名称和简介

使用场景

使用教程

获取方式

一、Java 线上诊断工具 Arthas

Arthas 阿里巴巴 2018 年 9 月开源的一款 Java 线上诊断工具。

工具的使用场景:

这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?

我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?

遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?

线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!

是否有一个全局视角来查看系统的运行状况?

有什么办法可以监控到 JVM 的实时运行状态?

Arthas 支持 JDK 6+,支持 Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。

使用教程:

基础教程:

https://alibaba.github.io/arth ... asics

进阶教程:

https://alibaba.github.io/arth ... anced

获取方式:(免费)

开源地址:

https://github.com/alibaba/arthas

二、IDE 插件 Cloud Toolkit

Cloud Toolkit是一款 IDE 插件,可以帮助开发者更高效地开发、测试、诊断并部署应用。通过 Cloud Toolkit,开发者能够方便地将本地应用一键部署到任意机器(本地或云端),并内置 Arthas 诊断、高效执行终端命令和 SQL 等,提供 IntelliJ IDEA 版,Eclipse 版,PyCharm 版和 Maven 版。

工具的使用场景:

每次修改完代码后,是否正在经历反复地打包?

在 Maven 、Git 以及其他运维脚本和工具的之间频繁切换?

采用 SCP 工具上传?使用 XShell 或 SecureCRT 登陆服务器?替换部署包?重启?

文件上传到服务器指定目录,在各种 FTP、SCP 工具之间频繁切换 ?

使用教程:

IntelliJ IDEA 版:

https://help.aliyun.com/document_detail/98762.html

Eclipse 版:

https://help.aliyun.com/document_detail/29970.html

PyCharm 版:

https://help.aliyun.com/docume ... .html

Maven 版:

https://help.aliyun.com/docume ... .html

获取方式:(免费) 工具地址:

https://www.aliyun.com/product/cloudtoolkit

三、混沌实验注入工具 ChaosBlade

ChaosBlade是一款遵循混沌工程实验原理,提供丰富故障场景实现,帮助分布式系统提升容错性和可恢复性的混沌工程工具,可实现底层故障的注入,提供了延迟、异常、返回特定值、修改参数值、重复调用和 try-catch 块异常等异常场景。

工具的使用场景:

微服务的容错能力不易衡量?

容器编排配置是否合理无法验证?

PaaS 层健壮性的测试工作无从入手?

使用教程:

https://github.com/chaosblade-io/chaosblade/wiki/ 新手指南

获取方式:(免费)

开源地址:

https://github.com/chaosblade-io/chaosblade/wiki/ 新手指南

四、Java 代码规约扫描插件

该插件用于检测 Java 代码中存在的不规范的位置,并给予提示。规约插件是采用 Kotlin 语言开发。

使用教程:

IDEA 插件使用文档:

https://github.com/alibaba/p3c/wiki/IDEA 插件使用文档

Eclipse 插件使用文档:

https://github.com/alibaba/p3c/wiki/Eclipse 插件使用文档

获取方式:(免费)

开源地址:

https://github.com/alibaba/p3c

五、应用实时监控工具 ARMS

ARMS是一款 APM 类的监控工具,提供前端、应用、自定义监控 3 类监控选项,可快速构建实时的应用性能和业务监控能力。

工具的使用场景:

晚上 10 点收到 37 条报警信息,你却无从下手?

当我们发现问题的时候,客户 / 业务方已经发起投诉?

每个月花几十万买服务器,却无法保障用户体验?

使用教程:

前端监控接入:

https://help.aliyun.com/documentdetail/106086.html

应用监控接入:

https://help.aliyun.com/documentdetail/63796.html

自定义监控:

https://help.aliyun.com/document_detail/47474.html

获取方式:(收费)

工具地址:

https://www.aliyun.com/product/arms

六、静态开源站点搭建工具 Docsite

Docsite一款集官网、文档、博客和社区为一体的静态开源站点的解决方案,具有简单易上手、上手不撒手的特质,同时支持 react 和静态渲染、PC 端和移动端、支持中英文国际化、SEO、markdown 文档、全局站点搜索、站点风格自定义、页面自定义等功能。

使用教程:

https://docsite.js.org/zh-cn/d ... .html

获取方式:(免费)

项目地址:

https://github.com/txd-team/docsite

七、Android 平台上的秒级编译方案 Freeline

Freeline 可以充分利用缓存文件,在几秒钟内迅速地对代码的改动进行编译并部署到设备上,有效地减少了日常开发中的大量重新编译与安装的耗时。Freeline 最快捷的使用方法就是直接安装 Android Studio 插件。

使用教程:

https://github.com/alibaba/fre ... zh.md

获取方式:(免费)

项目地址:

https://github.com/alibaba/freeline

八、性能测试工具 PTS

PTS可以模拟大量用户访问业务的场景,任务随时发起,免去搭建和维护成本,支持 JMeter 脚本转化为 PTS 压测,同样支持原生 JMeter 引擎进行压测。

使用教程:

https://help.aliyun.com/document_detail/70290.html

获取方式:(收费)

工具地址:

https://www.aliyun.com/product/pts

九、云效开发者工具 KT

KT 可以简化在 Kubernetes 下进行联调测试的复杂度,提高基于 Kubernetes 的研发效率。

使用教程:

https://yq.aliyun.com/articles/690519

获取方式:(免费)

工具地址:

https://yq.aliyun.com/download/3393

十、架构可视化工具 AHAS

AHAS为 K8s 等容器环境提供了架构可视化的功能,同时,具有故障注入式高可用能力评测和一键流控降级等功能,可以快速低成本的提升应用可用性。

工具的使用场景:

服务化改造过程中,想精确的了解资源实例的构成和交互情况,实现架构的可视化?

想引入真实的故障场景和演练模型?

低门槛获得流控、降级功能?

使用教程:

https://help.aliyun.com/document_detail/90323.html

获取方式:(免费)

工具地址:

https://www.aliyun.com/product/ahas

十一、数据处理工具 EasyExcel

EasyExcel 是一个用来对 Java 进行解析、生成 Excel 的框架,它重写了 poi 对 07 版 Excel 的解析,原本一个 3M 的 Excel 用 POI sax 需要 100M 左右内存,EasyExcel 可降低到 KB 级别,并且再大的 excel 也不会出现内存溢出的情况。03 版依赖 POI 的 sax 模式。在上层做了模型转换的封装,让使用者更加简单方便。

使用教程:

https://github.com/alibaba/eas ... rt.md

获取方式:(开源)

https://github.com/alibaba/easyexcel

十二、iOS 类工具 HandyJSON

HandyJSON 是一个用于 Swift 语言中的 JSON 序列化 / 反序列化库。

与其他流行的 Swift JSON 库相比,HandyJSON 的特点是,它支持纯 Swift 类,使用也简单。它反序列化时 (把 JSON 转换为 Model) 不要求 Model 从 NSObject 继承 (因为它不是基于 KVC 机制),也不要求你为 Model 定义一个 Mapping 函数。只要你定义好 Model 类,声明它服从 HandyJSON 协议,HandyJSON 就能自行以各个属性的属性名为 Key,从 JSON 串中解析值。

使用教程:

https://github.com/alibaba/Han ... cn.md

获取方式:(开源)

https://github.com/alibaba/HandyJSON

十三、云上资源和应用部署工具 EDAS Serverless

EDAS Serverless一款基于 Kubernetes,面向应用和微服务的 Serverless 平台。用户无需管理和维护集群与服务器,即可通过镜像、WAR 包和 JAR 包,快速创建原生支持 Kubernetes 的容器应用,同时支持 Spring Cloud 和 Dubbo 等主流微服务框架。

使用教程:

https://help.aliyun.com/docume ... .html

获取方式:(公测期间免费)

https://help.aliyun.com/document_detail/97792.html

十四、数据库连接池 Druid

Druid 是 Java 语言下的数据库连接池,它能够提供强大的监控和扩展功能。

使用教程:

https://github.com/alibaba/druid/wiki/ 常见问题

获取方式:(开源)

http://central.maven.org/maven2/com/alibaba/druid/

十五、Java 工具集 Dragonwell

Alibaba Dragonwell 是阿里巴巴内部 OpenJDK 定制版 AJDK 的开源版本, AJDK 为在线电商,金融,物流做了结合业务场景的优化,运行在超大规模的,100,000+ 服务器的阿里巴巴数据中心。 Alibaba Dragonwell 与 Java SE 标准兼容,目前仅支持 Linux/x86_64 平台。

使用教程:

https://github.com/alibaba/dragonwell8/wiki/ 阿里巴巴 Dragonwell8 用户指南

获取方式:(开源)

https://github.com/alibaba/dragonwell8


上一篇: Java首度承认PK失败,愿永久服软Python!
 
继续阅读 »
从人工到自动化,从重复到创新,技术演进的历程中,伴随着开发者工具类产品的发展。

阿里巴巴将自身在各类业务场景下的技术积淀,通过开源、云上实现或工具等形式对外开放,本文将精选了一些阿里巴巴的开发者工具,希望能帮助开发者们提高开发效率、更优雅的写代码。

由于开发者涉及的技术领域众多,笔者仅从自己熟悉的领域,以后端开发者的视角盘点平时可能用得到的工具。每个工具按照以下几点进行介绍:

工具名称和简介

使用场景

使用教程

获取方式

一、Java 线上诊断工具 Arthas

Arthas 阿里巴巴 2018 年 9 月开源的一款 Java 线上诊断工具。

工具的使用场景:

这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?

我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?

遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?

线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!

是否有一个全局视角来查看系统的运行状况?

有什么办法可以监控到 JVM 的实时运行状态?

Arthas 支持 JDK 6+,支持 Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。

使用教程:

基础教程:

https://alibaba.github.io/arth ... asics

进阶教程:

https://alibaba.github.io/arth ... anced

获取方式:(免费)

开源地址:

https://github.com/alibaba/arthas

二、IDE 插件 Cloud Toolkit

Cloud Toolkit是一款 IDE 插件,可以帮助开发者更高效地开发、测试、诊断并部署应用。通过 Cloud Toolkit,开发者能够方便地将本地应用一键部署到任意机器(本地或云端),并内置 Arthas 诊断、高效执行终端命令和 SQL 等,提供 IntelliJ IDEA 版,Eclipse 版,PyCharm 版和 Maven 版。

工具的使用场景:

每次修改完代码后,是否正在经历反复地打包?

在 Maven 、Git 以及其他运维脚本和工具的之间频繁切换?

采用 SCP 工具上传?使用 XShell 或 SecureCRT 登陆服务器?替换部署包?重启?

文件上传到服务器指定目录,在各种 FTP、SCP 工具之间频繁切换 ?

使用教程:

IntelliJ IDEA 版:

https://help.aliyun.com/document_detail/98762.html

Eclipse 版:

https://help.aliyun.com/document_detail/29970.html

PyCharm 版:

https://help.aliyun.com/docume ... .html

Maven 版:

https://help.aliyun.com/docume ... .html

获取方式:(免费) 工具地址:

https://www.aliyun.com/product/cloudtoolkit

三、混沌实验注入工具 ChaosBlade

ChaosBlade是一款遵循混沌工程实验原理,提供丰富故障场景实现,帮助分布式系统提升容错性和可恢复性的混沌工程工具,可实现底层故障的注入,提供了延迟、异常、返回特定值、修改参数值、重复调用和 try-catch 块异常等异常场景。

工具的使用场景:

微服务的容错能力不易衡量?

容器编排配置是否合理无法验证?

PaaS 层健壮性的测试工作无从入手?

使用教程:

https://github.com/chaosblade-io/chaosblade/wiki/ 新手指南

获取方式:(免费)

开源地址:

https://github.com/chaosblade-io/chaosblade/wiki/ 新手指南

四、Java 代码规约扫描插件

该插件用于检测 Java 代码中存在的不规范的位置,并给予提示。规约插件是采用 Kotlin 语言开发。

使用教程:

IDEA 插件使用文档:

https://github.com/alibaba/p3c/wiki/IDEA 插件使用文档

Eclipse 插件使用文档:

https://github.com/alibaba/p3c/wiki/Eclipse 插件使用文档

获取方式:(免费)

开源地址:

https://github.com/alibaba/p3c

五、应用实时监控工具 ARMS

ARMS是一款 APM 类的监控工具,提供前端、应用、自定义监控 3 类监控选项,可快速构建实时的应用性能和业务监控能力。

工具的使用场景:

晚上 10 点收到 37 条报警信息,你却无从下手?

当我们发现问题的时候,客户 / 业务方已经发起投诉?

每个月花几十万买服务器,却无法保障用户体验?

使用教程:

前端监控接入:

https://help.aliyun.com/documentdetail/106086.html

应用监控接入:

https://help.aliyun.com/documentdetail/63796.html

自定义监控:

https://help.aliyun.com/document_detail/47474.html

获取方式:(收费)

工具地址:

https://www.aliyun.com/product/arms

六、静态开源站点搭建工具 Docsite

Docsite一款集官网、文档、博客和社区为一体的静态开源站点的解决方案,具有简单易上手、上手不撒手的特质,同时支持 react 和静态渲染、PC 端和移动端、支持中英文国际化、SEO、markdown 文档、全局站点搜索、站点风格自定义、页面自定义等功能。

使用教程:

https://docsite.js.org/zh-cn/d ... .html

获取方式:(免费)

项目地址:

https://github.com/txd-team/docsite

七、Android 平台上的秒级编译方案 Freeline

Freeline 可以充分利用缓存文件,在几秒钟内迅速地对代码的改动进行编译并部署到设备上,有效地减少了日常开发中的大量重新编译与安装的耗时。Freeline 最快捷的使用方法就是直接安装 Android Studio 插件。

使用教程:

https://github.com/alibaba/fre ... zh.md

获取方式:(免费)

项目地址:

https://github.com/alibaba/freeline

八、性能测试工具 PTS

PTS可以模拟大量用户访问业务的场景,任务随时发起,免去搭建和维护成本,支持 JMeter 脚本转化为 PTS 压测,同样支持原生 JMeter 引擎进行压测。

使用教程:

https://help.aliyun.com/document_detail/70290.html

获取方式:(收费)

工具地址:

https://www.aliyun.com/product/pts

九、云效开发者工具 KT

KT 可以简化在 Kubernetes 下进行联调测试的复杂度,提高基于 Kubernetes 的研发效率。

使用教程:

https://yq.aliyun.com/articles/690519

获取方式:(免费)

工具地址:

https://yq.aliyun.com/download/3393

十、架构可视化工具 AHAS

AHAS为 K8s 等容器环境提供了架构可视化的功能,同时,具有故障注入式高可用能力评测和一键流控降级等功能,可以快速低成本的提升应用可用性。

工具的使用场景:

服务化改造过程中,想精确的了解资源实例的构成和交互情况,实现架构的可视化?

想引入真实的故障场景和演练模型?

低门槛获得流控、降级功能?

使用教程:

https://help.aliyun.com/document_detail/90323.html

获取方式:(免费)

工具地址:

https://www.aliyun.com/product/ahas

十一、数据处理工具 EasyExcel

EasyExcel 是一个用来对 Java 进行解析、生成 Excel 的框架,它重写了 poi 对 07 版 Excel 的解析,原本一个 3M 的 Excel 用 POI sax 需要 100M 左右内存,EasyExcel 可降低到 KB 级别,并且再大的 excel 也不会出现内存溢出的情况。03 版依赖 POI 的 sax 模式。在上层做了模型转换的封装,让使用者更加简单方便。

使用教程:

https://github.com/alibaba/eas ... rt.md

获取方式:(开源)

https://github.com/alibaba/easyexcel

十二、iOS 类工具 HandyJSON

HandyJSON 是一个用于 Swift 语言中的 JSON 序列化 / 反序列化库。

与其他流行的 Swift JSON 库相比,HandyJSON 的特点是,它支持纯 Swift 类,使用也简单。它反序列化时 (把 JSON 转换为 Model) 不要求 Model 从 NSObject 继承 (因为它不是基于 KVC 机制),也不要求你为 Model 定义一个 Mapping 函数。只要你定义好 Model 类,声明它服从 HandyJSON 协议,HandyJSON 就能自行以各个属性的属性名为 Key,从 JSON 串中解析值。

使用教程:

https://github.com/alibaba/Han ... cn.md

获取方式:(开源)

https://github.com/alibaba/HandyJSON

十三、云上资源和应用部署工具 EDAS Serverless

EDAS Serverless一款基于 Kubernetes,面向应用和微服务的 Serverless 平台。用户无需管理和维护集群与服务器,即可通过镜像、WAR 包和 JAR 包,快速创建原生支持 Kubernetes 的容器应用,同时支持 Spring Cloud 和 Dubbo 等主流微服务框架。

使用教程:

https://help.aliyun.com/docume ... .html

获取方式:(公测期间免费)

https://help.aliyun.com/document_detail/97792.html

十四、数据库连接池 Druid

Druid 是 Java 语言下的数据库连接池,它能够提供强大的监控和扩展功能。

使用教程:

https://github.com/alibaba/druid/wiki/ 常见问题

获取方式:(开源)

http://central.maven.org/maven2/com/alibaba/druid/

十五、Java 工具集 Dragonwell

Alibaba Dragonwell 是阿里巴巴内部 OpenJDK 定制版 AJDK 的开源版本, AJDK 为在线电商,金融,物流做了结合业务场景的优化,运行在超大规模的,100,000+ 服务器的阿里巴巴数据中心。 Alibaba Dragonwell 与 Java SE 标准兼容,目前仅支持 Linux/x86_64 平台。

使用教程:

https://github.com/alibaba/dragonwell8/wiki/ 阿里巴巴 Dragonwell8 用户指南

获取方式:(开源)

https://github.com/alibaba/dragonwell8


上一篇: Java首度承认PK失败,愿永久服软Python!
  收起阅读 »

史上最完整的官方Oracle OCP中文文教材,快来下载吧!!

内含文件:
1、Oracle Database 11g:SQL 基础 学生指南第1 册 
2、Oracle Database 11g:SQL 基础 学生指南第2 册 
3、Oracle Database 11g:数据库管理- 课堂练习I 学生指南第1 册
4、Oracle Database 11g:数据库管理- 课堂练习II 学生指南第1 册 
5、Oracle Database 11g:数据库管理- 课堂练习I 学生指南第2 册 
6、Oracle Database 11g:数据库管理- 课堂练习II 学生指南第2 册 
7、Oracle Da等等
继续阅读 »
内含文件:
1、Oracle Database 11g:SQL 基础 学生指南第1 册 
2、Oracle Database 11g:SQL 基础 学生指南第2 册 
3、Oracle Database 11g:数据库管理- 课堂练习I 学生指南第1 册
4、Oracle Database 11g:数据库管理- 课堂练习II 学生指南第1 册 
5、Oracle Database 11g:数据库管理- 课堂练习I 学生指南第2 册 
6、Oracle Database 11g:数据库管理- 课堂练习II 学生指南第2 册 
7、Oracle Da等等 收起阅读 »

Android短视频开发需要注意些什么?这是我的建议

在2017年快手、抖音兴起后,短视频app成为了互联网行业炙手可热的宝贝,无数短视频开发者在前两者的成功中找到了商机,一窝蜂的扎入到短视频开发中,而不少公司在运营前期仅做单端开发,将运营重心集中起来,这种方法是非常聪明的。

本篇文章就从Android短视频开发过程中要注意的几点重点来讲一讲短视频APP该如何开发。

一、难点——功能方面

APP的基础功能必须完备,各项机制可以复刻市面上已有的成功案例,也可以自行研发,关键点就在于与众不同的新功能。

1. 基础功能指:美颜等各种特效、拍摄剪辑小视频的能力、推荐列表等视频列表、分享功能、点赞功能、评论功能等短视频APP必有的功能。

2. 各项机制如:推荐机制、拉黑机制、鉴黄机制、信息流广告密度机制等,通常是一个APP一个样,比如抖音和快手的推荐机制就不同,抖音的推荐机制将流量聚集在少数视频上而快手将流量聚集在更多的用户身上。

3. 层出不穷又与众不同的新功能是与其他APP拉开差距最有用的手段,但如果你真的完全想不出新点子来,也可以“取百家之长”学习其他APP身上的亮眼功能,比如学习吸引电商入驻的抖音购物车功能和快手小店功能、比如加入直播系统增加收入、比如自微博起就非常好用的“话题功能”……

二、重点——风格定位

Android短视频开发前就要想好软件的风格定位,因为这是吸引特定人群的法宝,经典案例有“一罐”目标群众是心情沮丧又无处诉说的人、“小红书”目标群众是热爱美妆的精致姑娘和热爱金钱的美妆电商、抖音目标群众是向往时尚与潮流的男孩女孩。

什么样的定位产生什么风格的短视频平台,平台内的内容也会逐渐向运营方期待的的方向转移。

三、注意点——服务器的选择

服务器通常可以使用VPS服务器、云服务器、独立服务器等,因为不用提前购买硬件、相对高性价比等原因,通常我们会建议用户使用云服务器。

如果开始使用的是独立服务器,后期用户增加,可以把程序分布式部署到不同服务器上,以减轻服务器的压力。

短视频拍摄剪辑门槛的降低、流量的降价提速、三方提供的特效滤镜不断更新换代使得短视频越来越受到用户的喜爱,Android短视频开发也因此越来越互联网行业的喜爱。更多与Android短视频开发行业相关的资讯和分析会在以后逐渐放出,敬请期待,需要的朋友请关注我。

声明:文章为原创内容,转载请注明原文链接及作者
继续阅读 »
在2017年快手、抖音兴起后,短视频app成为了互联网行业炙手可热的宝贝,无数短视频开发者在前两者的成功中找到了商机,一窝蜂的扎入到短视频开发中,而不少公司在运营前期仅做单端开发,将运营重心集中起来,这种方法是非常聪明的。

本篇文章就从Android短视频开发过程中要注意的几点重点来讲一讲短视频APP该如何开发。

一、难点——功能方面

APP的基础功能必须完备,各项机制可以复刻市面上已有的成功案例,也可以自行研发,关键点就在于与众不同的新功能。

1. 基础功能指:美颜等各种特效、拍摄剪辑小视频的能力、推荐列表等视频列表、分享功能、点赞功能、评论功能等短视频APP必有的功能。

2. 各项机制如:推荐机制、拉黑机制、鉴黄机制、信息流广告密度机制等,通常是一个APP一个样,比如抖音和快手的推荐机制就不同,抖音的推荐机制将流量聚集在少数视频上而快手将流量聚集在更多的用户身上。

3. 层出不穷又与众不同的新功能是与其他APP拉开差距最有用的手段,但如果你真的完全想不出新点子来,也可以“取百家之长”学习其他APP身上的亮眼功能,比如学习吸引电商入驻的抖音购物车功能和快手小店功能、比如加入直播系统增加收入、比如自微博起就非常好用的“话题功能”……

二、重点——风格定位

Android短视频开发前就要想好软件的风格定位,因为这是吸引特定人群的法宝,经典案例有“一罐”目标群众是心情沮丧又无处诉说的人、“小红书”目标群众是热爱美妆的精致姑娘和热爱金钱的美妆电商、抖音目标群众是向往时尚与潮流的男孩女孩。

什么样的定位产生什么风格的短视频平台,平台内的内容也会逐渐向运营方期待的的方向转移。

三、注意点——服务器的选择

服务器通常可以使用VPS服务器、云服务器、独立服务器等,因为不用提前购买硬件、相对高性价比等原因,通常我们会建议用户使用云服务器。

如果开始使用的是独立服务器,后期用户增加,可以把程序分布式部署到不同服务器上,以减轻服务器的压力。

短视频拍摄剪辑门槛的降低、流量的降价提速、三方提供的特效滤镜不断更新换代使得短视频越来越受到用户的喜爱,Android短视频开发也因此越来越互联网行业的喜爱。更多与Android短视频开发行业相关的资讯和分析会在以后逐渐放出,敬请期待,需要的朋友请关注我。

声明:文章为原创内容,转载请注明原文链接及作者 收起阅读 »

直播app制作须知:直播行业的卖点和机遇在哪里?

直播行业发展时间已经很久了,建议新入局的玩家在进行直播app制作前要想好,直播平台的定位是什么,清晰明确的定位更利于定位受众人群,也更利于直播app制作时的对接和开发。

一、 直播发展契机
早在2012年,9158视频互动交友平台就被爆出在2011年收入近10亿人民币。依托网络,直播平台飞速发展,几年后,坐上了手机移动化的快车,随着手机市场的发展和资本市场对直播行业的看好,2015年,直播行业千播大战爆发。
时间线继续前进,直到2019年,直播行业依然是很赚钱的行业,随着电商、教育等元素的不断加入,随着短视频、主播PK等功能的开发,直播变得越来越好玩。
直播app制作所需的价格也逐渐走低,2015年,纯定制开发一套直播app需要七八十万,开源直播源码也要四五十万一套,而现在,一套运营级别的开源直播系统也不过8w左右。封装版本还会更低。

二、 直播卖点在哪
1、 涉足范围广
直播app制作时,会在直播平台中内置分类列表,每个直播平台也都会有各自的定位,比如斗鱼主打游戏直播,虎牙宣称自己是弹幕交互直播平台,陌陌主打社交等。
即便已经有了各种各样的定位和主打产品,直播软件内的分类中仍有很多分类,比如美食直播、游戏直播、户外直播等等,直播内容涉足领域十分广泛,可选择性强。
2、 没有广告
如果看电视,广告一定会在节目表演到最精彩的时候插播一段广告,这对于观看者而言是非常不友好的,而看网络直播就不会有这样情况产生,主播只要不下线,用户可以一直看,很多公会都会要求主播每天直播大于多少个小时才能拿到全额底薪,这对用户而言是非常友好的。
直播app制作时也会为平台变现预留一定的广告位,比如轮播图、开屏广告等。
3、 互动性强
互动性强体现在两方面,一方面,主播可能会看到你的弹幕和评论,并作出回复,另一方面,共同观看直播的水友们也可能在直播间内回应你,之前在B站,有主播直播看猫和老鼠,然后主播去吃饭了,电脑就放那儿播着,也没人抱怨,大家一边看,一边发弹幕聊天怀念自己的童年,这样温馨的气氛可比自己观看老电视剧而不被人理解要强多了。
4、 存在感强
每一次发送礼物都会得到主播的感谢,带着头衔进场会有特殊效果出现,存在感、人前显贵是可以拿钱买的,这种轻而易举就能得到的尊重和快乐是非常诱人的。

以上就是本文的全部内容,更多与直播app制作相关的资讯和分析会在以后逐渐放出,敬请期待,需要的朋友请关注我。
声明:文章为原创内容,转载请注明原文链接及作者
继续阅读 »
直播行业发展时间已经很久了,建议新入局的玩家在进行直播app制作前要想好,直播平台的定位是什么,清晰明确的定位更利于定位受众人群,也更利于直播app制作时的对接和开发。

一、 直播发展契机
早在2012年,9158视频互动交友平台就被爆出在2011年收入近10亿人民币。依托网络,直播平台飞速发展,几年后,坐上了手机移动化的快车,随着手机市场的发展和资本市场对直播行业的看好,2015年,直播行业千播大战爆发。
时间线继续前进,直到2019年,直播行业依然是很赚钱的行业,随着电商、教育等元素的不断加入,随着短视频、主播PK等功能的开发,直播变得越来越好玩。
直播app制作所需的价格也逐渐走低,2015年,纯定制开发一套直播app需要七八十万,开源直播源码也要四五十万一套,而现在,一套运营级别的开源直播系统也不过8w左右。封装版本还会更低。

二、 直播卖点在哪
1、 涉足范围广
直播app制作时,会在直播平台中内置分类列表,每个直播平台也都会有各自的定位,比如斗鱼主打游戏直播,虎牙宣称自己是弹幕交互直播平台,陌陌主打社交等。
即便已经有了各种各样的定位和主打产品,直播软件内的分类中仍有很多分类,比如美食直播、游戏直播、户外直播等等,直播内容涉足领域十分广泛,可选择性强。
2、 没有广告
如果看电视,广告一定会在节目表演到最精彩的时候插播一段广告,这对于观看者而言是非常不友好的,而看网络直播就不会有这样情况产生,主播只要不下线,用户可以一直看,很多公会都会要求主播每天直播大于多少个小时才能拿到全额底薪,这对用户而言是非常友好的。
直播app制作时也会为平台变现预留一定的广告位,比如轮播图、开屏广告等。
3、 互动性强
互动性强体现在两方面,一方面,主播可能会看到你的弹幕和评论,并作出回复,另一方面,共同观看直播的水友们也可能在直播间内回应你,之前在B站,有主播直播看猫和老鼠,然后主播去吃饭了,电脑就放那儿播着,也没人抱怨,大家一边看,一边发弹幕聊天怀念自己的童年,这样温馨的气氛可比自己观看老电视剧而不被人理解要强多了。
4、 存在感强
每一次发送礼物都会得到主播的感谢,带着头衔进场会有特殊效果出现,存在感、人前显贵是可以拿钱买的,这种轻而易举就能得到的尊重和快乐是非常诱人的。

以上就是本文的全部内容,更多与直播app制作相关的资讯和分析会在以后逐渐放出,敬请期待,需要的朋友请关注我。
声明:文章为原创内容,转载请注明原文链接及作者 收起阅读 »

手!慢!无!价值1980的数据分析教程,终终终于免费啦!!!

对比互联网各个岗位的裁员程度可以发现,数据分析相关岗位正在不断的扩招,已经成为了这波逆流中的黑马,什么原因导致的数据分析人才如此紧缺?
因为数据分析是大势所趋,未来的发展空间会大有可为。随着5G网络即将商用,企业每天将会产生海量的数据,BAT日均数据更是达到了PB的级别,数据分析相关岗位才会存在着巨大的需求缺口。
长此以往,企业要用尽可能少的人才,来满足尽可能多岗位的诉求,可以这么说,数据分析将会是每个程序员个人能力最重要的补充,也是BAT这类大公司急招人才的必备技能。
但是一提数据分析,很多人就觉得无从下手,知识点零散总是抓不住重点,学习起来相当吃力。这有一份廖雪峰大神历时3个月打磨出来的《数据分析必备技能》的视频学习资料,由浅入深系统化的讲解,内容详尽。基本囊括了平时学习工作中经常用到的分析方式,这份不可或缺的宝贵资料原价值1980元,现在,关注公众号cainiao_xueyuan就可以免费领取(仅限300名)。

学完这套资料可以给你将会得到哪些收获?

1. 总时长>48个小时的干货内容,每天2小时,20天掌握数据分析必备技能;
2. 对照自己掌握知识点进行查缺补漏,帮助你扫除知识盲区、重构知识体系。
具体详细的资料内容:
1 数学理论基础           
01.数据挖掘之数学基础02.数学基础之微积分
03.机器学习之线性回归
04.机器学习之逻辑回归
05.朴素贝叶斯
06.机器学习之决策树
07.机器学习之集成学习
2 必备Python基础            
01.Python语言介绍、发展、特色02.概念介绍:Python解释器
03.Python函数及高级特性
04.交互环境介绍:启动和退出交互环境
05.Python基础语法及模块
3 高效scrapy爬虫框架           
01.scrapy简介02.scrapy选择器
03.创建scrapy爬虫
04.下载器与爬虫中间件
05.突破反爬虫机制与策略
06.使用管道 pipelines        
4 Excel数据处理            
01.认识数据表的字段和记录02.使用Excel制作数据表
03.指定常用数据类型
04.Excel导入网站数据、文本数据
05.Excel数据清洗、筛选
06.Excel数据抽样和计算

5 使用SQL实现数据操作
01SQL基础语法
02.SQL表连接
03.SQL普通函数
04.SQL窗口函数
05.SQL优化 

长按扫码 添加微信,领取干货视频

微信图片_20190507095431.jpg


Ps:学习资料由"开课吧"友情提供。
继续阅读 »
对比互联网各个岗位的裁员程度可以发现,数据分析相关岗位正在不断的扩招,已经成为了这波逆流中的黑马,什么原因导致的数据分析人才如此紧缺?
因为数据分析是大势所趋,未来的发展空间会大有可为。随着5G网络即将商用,企业每天将会产生海量的数据,BAT日均数据更是达到了PB的级别,数据分析相关岗位才会存在着巨大的需求缺口。
长此以往,企业要用尽可能少的人才,来满足尽可能多岗位的诉求,可以这么说,数据分析将会是每个程序员个人能力最重要的补充,也是BAT这类大公司急招人才的必备技能。
但是一提数据分析,很多人就觉得无从下手,知识点零散总是抓不住重点,学习起来相当吃力。这有一份廖雪峰大神历时3个月打磨出来的《数据分析必备技能》的视频学习资料,由浅入深系统化的讲解,内容详尽。基本囊括了平时学习工作中经常用到的分析方式,这份不可或缺的宝贵资料原价值1980元,现在,关注公众号cainiao_xueyuan就可以免费领取(仅限300名)。

学完这套资料可以给你将会得到哪些收获?

1. 总时长>48个小时的干货内容,每天2小时,20天掌握数据分析必备技能;
2. 对照自己掌握知识点进行查缺补漏,帮助你扫除知识盲区、重构知识体系。
具体详细的资料内容:
1 数学理论基础           
01.数据挖掘之数学基础02.数学基础之微积分
03.机器学习之线性回归
04.机器学习之逻辑回归
05.朴素贝叶斯
06.机器学习之决策树
07.机器学习之集成学习
2 必备Python基础            
01.Python语言介绍、发展、特色02.概念介绍:Python解释器
03.Python函数及高级特性
04.交互环境介绍:启动和退出交互环境
05.Python基础语法及模块
3 高效scrapy爬虫框架           
01.scrapy简介02.scrapy选择器
03.创建scrapy爬虫
04.下载器与爬虫中间件
05.突破反爬虫机制与策略
06.使用管道 pipelines        
4 Excel数据处理            
01.认识数据表的字段和记录02.使用Excel制作数据表
03.指定常用数据类型
04.Excel导入网站数据、文本数据
05.Excel数据清洗、筛选
06.Excel数据抽样和计算

5 使用SQL实现数据操作
01SQL基础语法
02.SQL表连接
03.SQL普通函数
04.SQL窗口函数
05.SQL优化 

长按扫码 添加微信,领取干货视频

微信图片_20190507095431.jpg


Ps:学习资料由"开课吧"友情提供。 收起阅读 »

做Android短视频开发要知道,这四点不可忽视

短视频app风靡已久,很多玩家都已入局,前有腾讯微视、快手、抖音等老玩家,后有百度等新玩家,那么,想要入局短视频app,前期又不想投入太多资金到软件开发上,我们就可以先只做单端(ios/Android)的开发,把运营重心放在单端上,节约资金投入和人力成本

一、 Android短视频开发必备功能

1、 基础功能

摄录功能、多端登录、多渠道分享、私信功能等最为基础的功能是要开发完备的,这些功能就像五星酒店里的地板砖,有的时候也看不出多重要来,没有的话,就会让用户感觉不舒服了。

2、 美颜特效

美颜特效功能在短视频app中被用到了极致,作为短视频app的个性能功能,我们对美颜、萌颜、特效的要求不仅仅是“有”而且要“精美”“更新快”,这要求我们选择更优秀的SDK厂家进行合作

3、 广告投放

广告投放功能是短视频app软件中最常用的盈利功能,首屏广告、信息流广告、话题挑战广告、贴纸广告等方式都是常见的短视频软件广告盈利方式。

二、 Android短视频开发升级功能

1、 直播功能:直播功能是能够进一步增强主播、平台盈利能力,增强主播影响力和用户粘性的可靠功能,通过直播收礼物,能够刺激用户直接消费。

2、 社区功能:社区功能为用户之间的交流沟通提供了帮助,能够有效建成社交关系网,增加用户黏性。

这两点功能并非短视频app开发必备功能,而是可以有选择性的添加的升级功能,没有它的时候用户也不会觉得很不方便,但一旦有了它,用户会更乐于使用该功能。

三、 软件开发的三种方式优劣对比

软件开发方法有三种,原生开发、HTML5开发和混合开发,原生开发是指使用某一系统(如安卓/ios)官方提供的开发语言、开发工具进行App开发,这种开发方式的优势是,在该系统上,原生开发的软件的交互体验和性能是最好的,但缺点是需要把Android端和IOS端分开开发,写两套界面,开发时间比较长。常用Android短视频开发工具有java、Android studio等

而HTML5开发是利用Web技术进行的App开发,这种开发方法局限性很大,一般不采用这种方法。

混合开发是很多外包团队常用的开发方法,它牺牲了一定的系统流畅性来提高开发效率、节省开发成本。

综上所述我们可以看出,原生开发的软件对于运营方而言是最好用的,只做Android短视频开发也不会浪费太多的时间。

四、 Android短视频开发常用开发工具

分享一套常用的Android短视频开发环境、开发工具、开发语言

1. Android短视频端开发环境:Android studio 2.2

2. Android短视频端开发工具:Java

3. 服务端:基础环境LAMP(linux ,apache,mysql,php )或者LNMP(linux,ngnix,mysql,php)

4. 缓存服务Redis

5. Android短视频端开发框架:服务端主要采用两个,整个PC端是Thinkphp3.2,接口部分是π框架(http://www.phalapi.net/

以上就是本篇文章的全部内容,更多与Android短视频开发相关的行业资讯和分析会在以后逐渐放出,敬请期待,需要的朋友请关注我。
继续阅读 »
短视频app风靡已久,很多玩家都已入局,前有腾讯微视、快手、抖音等老玩家,后有百度等新玩家,那么,想要入局短视频app,前期又不想投入太多资金到软件开发上,我们就可以先只做单端(ios/Android)的开发,把运营重心放在单端上,节约资金投入和人力成本

一、 Android短视频开发必备功能

1、 基础功能

摄录功能、多端登录、多渠道分享、私信功能等最为基础的功能是要开发完备的,这些功能就像五星酒店里的地板砖,有的时候也看不出多重要来,没有的话,就会让用户感觉不舒服了。

2、 美颜特效

美颜特效功能在短视频app中被用到了极致,作为短视频app的个性能功能,我们对美颜、萌颜、特效的要求不仅仅是“有”而且要“精美”“更新快”,这要求我们选择更优秀的SDK厂家进行合作

3、 广告投放

广告投放功能是短视频app软件中最常用的盈利功能,首屏广告、信息流广告、话题挑战广告、贴纸广告等方式都是常见的短视频软件广告盈利方式。

二、 Android短视频开发升级功能

1、 直播功能:直播功能是能够进一步增强主播、平台盈利能力,增强主播影响力和用户粘性的可靠功能,通过直播收礼物,能够刺激用户直接消费。

2、 社区功能:社区功能为用户之间的交流沟通提供了帮助,能够有效建成社交关系网,增加用户黏性。

这两点功能并非短视频app开发必备功能,而是可以有选择性的添加的升级功能,没有它的时候用户也不会觉得很不方便,但一旦有了它,用户会更乐于使用该功能。

三、 软件开发的三种方式优劣对比

软件开发方法有三种,原生开发、HTML5开发和混合开发,原生开发是指使用某一系统(如安卓/ios)官方提供的开发语言、开发工具进行App开发,这种开发方式的优势是,在该系统上,原生开发的软件的交互体验和性能是最好的,但缺点是需要把Android端和IOS端分开开发,写两套界面,开发时间比较长。常用Android短视频开发工具有java、Android studio等

而HTML5开发是利用Web技术进行的App开发,这种开发方法局限性很大,一般不采用这种方法。

混合开发是很多外包团队常用的开发方法,它牺牲了一定的系统流畅性来提高开发效率、节省开发成本。

综上所述我们可以看出,原生开发的软件对于运营方而言是最好用的,只做Android短视频开发也不会浪费太多的时间。

四、 Android短视频开发常用开发工具

分享一套常用的Android短视频开发环境、开发工具、开发语言

1. Android短视频端开发环境:Android studio 2.2

2. Android短视频端开发工具:Java

3. 服务端:基础环境LAMP(linux ,apache,mysql,php )或者LNMP(linux,ngnix,mysql,php)

4. 缓存服务Redis

5. Android短视频端开发框架:服务端主要采用两个,整个PC端是Thinkphp3.2,接口部分是π框架(http://www.phalapi.net/

以上就是本篇文章的全部内容,更多与Android短视频开发相关的行业资讯和分析会在以后逐渐放出,敬请期待,需要的朋友请关注我。 收起阅读 »

vue仿微信网页端聊天室|仿微信客户端vue版

基于Vue2.5.6+Vuex+vue-router+vue-gemini-scrollbar+swiper+elementUI等技术开发的仿微信web端聊天室,实现了发送消息、表情(动图),图片、视频预览,仿微信右键菜单、网页截图可直接粘贴至编辑框发送。
https://www.cnblogs.com/xiaoyan2017/p/10793728.html
 

009360截图20190429230828577.png


002360截图20190429225404663.png


003360截图20190429225544303.png


004360截图20190429225824919.png


005360截图20190429225945884.png


006360截图20190429230254807.png


007360截图20190429230405160.png


008360截图20190429230519310.png


012360截图20190429231530721.png


013360截图20190429231625431.png


014360截图20190429231721255.png


015360截图20190429231737056.png


016360截图20190429231834918.png

 
/*
* 页面地址路由js
*/
import Vue from 'vue'
import Router from 'vue-router'
import store from '../vuex'

// 通过改写router.go方法,当new Router 实例就包含back方法
Router.prototype.back = function(){
window.history.go(-1)
}

Vue.use(Router)

const router = new Router({
routes: [
// 登录、注册
{
path: '/login',
component: resolve => require(['../views/auth/login'], resolve),
meta: { hideSideBar: true },
},
{
path: '/register',
component: resolve => require(['../views/auth/register'], resolve),
meta: { hideSideBar: true },
},

// 首页、通讯录、动态圈
{
path: '/',
redirect: '/chat',
component: resolve => require(['../views/index'], resolve),
meta: { requireAuth: true },
},
{
path: '/contact',
redirect: '/contact/new-friends',
component: resolve => require(['../views/contact'], resolve),
meta: { requireAuth: true },
},
{
path: '/contact/new-friends',
component: resolve => require(['../views/contact/new-friends'], resolve),
meta: { requireAuth: true },
},
{
path: '/contact/uinfo',
component: resolve => require(['../views/contact/uinfo'], resolve),
},
{
path: '/qzone',
component: resolve => require(['../views/qzone'], resolve),
},
{
path: '/qzone/write',
component: resolve => require(['../views/qzone/write'], resolve),
meta: { requireAuth: true },
},
{
path: '/my',
component: resolve => require(['../views/my'], resolve),
meta: { requireAuth: true },
},

// 聊天页面
{
path: '/chat',
component: resolve => require(['../views/chat/group-chat'], resolve),
meta: { requireAuth: true }
},
{
path: '/chat/single-chat',
component: resolve => require(['../views/chat/single-chat'], resolve),
meta: { requireAuth: true }
},
{
path: '/chat/group-info',
component: resolve => require(['../views/chat/group-info'], resolve),
meta: { requireAuth: true }
}

]
});

// 注册全局钩子(拦截登录状态)
router.beforeEach((to, from, next) => {
const token = store.state.token
// 判断该路由地址是否需要登录权限
if(to.meta.requireAuth){
// 判断token是否存在
if(token){
next()
}else{
next()
// 未登录授权
wcPop({
content: '还未登录授权!', anim: 'shake', style: 'background:#e03b30;color:#fff;', time: 2,
end: function(){
next({ path: '/login' })
}
});
}
}else{
next()
}
})

export default router
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

import {mm} from '../common.js'

export default new Vuex.Store({
state: {
user: window.sessionStorage.getItem('user'),
token: window.sessionStorage.getItem('token'), //登录标识
onlineStatus: { status: 'online', text: '在线' }, //用户在线状态 【 online:在线、 offline:离开、 busy:忙碌、 invisible:隐身】
},
mutations: {
// 将token存储到sessionStorage
SET_TOKEN (state, data){
state.token = data;
window.sessionStorage.setItem('token', data);
},
// 获取用户名
SET_USER (state, data){
state.user = data;
window.sessionStorage.setItem('user', data);
},
// 退出
LOGOUT (state){
state.user = null;
state.token = null;
window.sessionStorage.removeItem('user');
window.sessionStorage.removeItem('token');
},
},
getters:{}
})

// 这种写法也ok
// export default () => {
// return new Vuex.Store({
// state: {},
// mutations: {},
// actions: {},
// })
// }

20180817002157557.jpg

欢迎大家一起交流、学习  Q:282310962  wx:xy190310
 
继续阅读 »
基于Vue2.5.6+Vuex+vue-router+vue-gemini-scrollbar+swiper+elementUI等技术开发的仿微信web端聊天室,实现了发送消息、表情(动图),图片、视频预览,仿微信右键菜单、网页截图可直接粘贴至编辑框发送。
https://www.cnblogs.com/xiaoyan2017/p/10793728.html
 

009360截图20190429230828577.png


002360截图20190429225404663.png


003360截图20190429225544303.png


004360截图20190429225824919.png


005360截图20190429225945884.png


006360截图20190429230254807.png


007360截图20190429230405160.png


008360截图20190429230519310.png


012360截图20190429231530721.png


013360截图20190429231625431.png


014360截图20190429231721255.png


015360截图20190429231737056.png


016360截图20190429231834918.png

 
/*
* 页面地址路由js
*/
import Vue from 'vue'
import Router from 'vue-router'
import store from '../vuex'

// 通过改写router.go方法,当new Router 实例就包含back方法
Router.prototype.back = function(){
window.history.go(-1)
}

Vue.use(Router)

const router = new Router({
routes: [
// 登录、注册
{
path: '/login',
component: resolve => require(['../views/auth/login'], resolve),
meta: { hideSideBar: true },
},
{
path: '/register',
component: resolve => require(['../views/auth/register'], resolve),
meta: { hideSideBar: true },
},

// 首页、通讯录、动态圈
{
path: '/',
redirect: '/chat',
component: resolve => require(['../views/index'], resolve),
meta: { requireAuth: true },
},
{
path: '/contact',
redirect: '/contact/new-friends',
component: resolve => require(['../views/contact'], resolve),
meta: { requireAuth: true },
},
{
path: '/contact/new-friends',
component: resolve => require(['../views/contact/new-friends'], resolve),
meta: { requireAuth: true },
},
{
path: '/contact/uinfo',
component: resolve => require(['../views/contact/uinfo'], resolve),
},
{
path: '/qzone',
component: resolve => require(['../views/qzone'], resolve),
},
{
path: '/qzone/write',
component: resolve => require(['../views/qzone/write'], resolve),
meta: { requireAuth: true },
},
{
path: '/my',
component: resolve => require(['../views/my'], resolve),
meta: { requireAuth: true },
},

// 聊天页面
{
path: '/chat',
component: resolve => require(['../views/chat/group-chat'], resolve),
meta: { requireAuth: true }
},
{
path: '/chat/single-chat',
component: resolve => require(['../views/chat/single-chat'], resolve),
meta: { requireAuth: true }
},
{
path: '/chat/group-info',
component: resolve => require(['../views/chat/group-info'], resolve),
meta: { requireAuth: true }
}

]
});

// 注册全局钩子(拦截登录状态)
router.beforeEach((to, from, next) => {
const token = store.state.token
// 判断该路由地址是否需要登录权限
if(to.meta.requireAuth){
// 判断token是否存在
if(token){
next()
}else{
next()
// 未登录授权
wcPop({
content: '还未登录授权!', anim: 'shake', style: 'background:#e03b30;color:#fff;', time: 2,
end: function(){
next({ path: '/login' })
}
});
}
}else{
next()
}
})

export default router
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

import {mm} from '../common.js'

export default new Vuex.Store({
state: {
user: window.sessionStorage.getItem('user'),
token: window.sessionStorage.getItem('token'), //登录标识
onlineStatus: { status: 'online', text: '在线' }, //用户在线状态 【 online:在线、 offline:离开、 busy:忙碌、 invisible:隐身】
},
mutations: {
// 将token存储到sessionStorage
SET_TOKEN (state, data){
state.token = data;
window.sessionStorage.setItem('token', data);
},
// 获取用户名
SET_USER (state, data){
state.user = data;
window.sessionStorage.setItem('user', data);
},
// 退出
LOGOUT (state){
state.user = null;
state.token = null;
window.sessionStorage.removeItem('user');
window.sessionStorage.removeItem('token');
},
},
getters:{}
})

// 这种写法也ok
// export default () => {
// return new Vuex.Store({
// state: {},
// mutations: {},
// actions: {},
// })
// }

20180817002157557.jpg

欢迎大家一起交流、学习  Q:282310962  wx:xy190310
  收起阅读 »

一对一软件怎样开发?需要注意什么?

一对一软件怎样开发才能解决现代人的社交恐惧症?熟人社交,目前已经成为绝大多数人内心十分抗拒的社交方式,就连发个微信朋友圈都需要屏蔽各种七大姑八大姨,还有小学初中高中同学,而一对一陌生人社交的方式可以有效解决这个问题。那么,应该怎样进行一对一软件开发呢?需要注意什么?
一对一软件开发需要哪些功能?
1.主播列表
主要显示经过平台认证后的主播信息,对主播的信息进行简单的展示。一般情况下该页面显示在首页,即用户登录软件之后最先看到的页面。这一功能主要是让用户直观的看到当前平台上的主播,通常默认显示的是热门或推荐的主播,其次是附近的主播。
一对一4.png

2.主播详情页
主要显示主播认证时上传的图片、头像、昵称、星级、收费价格等,上拉之后可跳转到主播的个人介绍、签名、形象标签和个人资料等。开发这个功能主要是为了让用户对当前查看的主播能有一个简单的了解,然后再进行视频或语音聊天。
3.动态
开发一对一软件最主要的目的就是解决熟人社交带来的压力,而动态功能对于社交属性的软件来说,是非常重要的。不仅能够增加平台的用户粘性,还能够从动态中与天南海北的线上好友进行互动。
4.短视频功能
自从抖音把短视频带火之后,人们开始喜欢用录制短视频的形式展现自己。在一对一软件开发中加入短视频,主播可以在自己的详情页面上传短视频,用户可以通过查看主播以往短视频,了解主播的日常工作生活,以及主播的平台活跃度。
短视频5.jpg

一对一软件开发需要注意什么?
1.跨平台互通
基于当下移动端软件的受欢迎程度,所以在进行一对一软件开发时需要实现跨平台互通,即支持Android与ios端开播、观看及互通,后台web端与前端互联,也就是我们常说的三端互通。
2.源码是否开源
如果想要购买一套源码,那么首先需要确定的就是这套源码是否开源。开源的源码不仅拥有相关的独立版权,而且支持二次开发,后期在维护和修复bug时相对比较轻松。
一对一6.png

3.程序的稳定性
为了保证后期开发出来的软件能够给用户带来良好的体验,在运行系统时需要具备一定的稳定性和流畅性,同时它的安全兼容性也要足够强。
以上内容就是关于一对一软件开发时需要开发的功能和需要注意的事情,要想真正的解决现阶段社会中存在的社交压力问题,需要找准用户的真实需求、产品定位等方面入手,至于编代码和程序是否问题就不需要我们操心了。
本文声明原创,转载请注明作者、出外及原文链接。
继续阅读 »
一对一软件怎样开发才能解决现代人的社交恐惧症?熟人社交,目前已经成为绝大多数人内心十分抗拒的社交方式,就连发个微信朋友圈都需要屏蔽各种七大姑八大姨,还有小学初中高中同学,而一对一陌生人社交的方式可以有效解决这个问题。那么,应该怎样进行一对一软件开发呢?需要注意什么?
一对一软件开发需要哪些功能?
1.主播列表
主要显示经过平台认证后的主播信息,对主播的信息进行简单的展示。一般情况下该页面显示在首页,即用户登录软件之后最先看到的页面。这一功能主要是让用户直观的看到当前平台上的主播,通常默认显示的是热门或推荐的主播,其次是附近的主播。
一对一4.png

2.主播详情页
主要显示主播认证时上传的图片、头像、昵称、星级、收费价格等,上拉之后可跳转到主播的个人介绍、签名、形象标签和个人资料等。开发这个功能主要是为了让用户对当前查看的主播能有一个简单的了解,然后再进行视频或语音聊天。
3.动态
开发一对一软件最主要的目的就是解决熟人社交带来的压力,而动态功能对于社交属性的软件来说,是非常重要的。不仅能够增加平台的用户粘性,还能够从动态中与天南海北的线上好友进行互动。
4.短视频功能
自从抖音把短视频带火之后,人们开始喜欢用录制短视频的形式展现自己。在一对一软件开发中加入短视频,主播可以在自己的详情页面上传短视频,用户可以通过查看主播以往短视频,了解主播的日常工作生活,以及主播的平台活跃度。
短视频5.jpg

一对一软件开发需要注意什么?
1.跨平台互通
基于当下移动端软件的受欢迎程度,所以在进行一对一软件开发时需要实现跨平台互通,即支持Android与ios端开播、观看及互通,后台web端与前端互联,也就是我们常说的三端互通。
2.源码是否开源
如果想要购买一套源码,那么首先需要确定的就是这套源码是否开源。开源的源码不仅拥有相关的独立版权,而且支持二次开发,后期在维护和修复bug时相对比较轻松。
一对一6.png

3.程序的稳定性
为了保证后期开发出来的软件能够给用户带来良好的体验,在运行系统时需要具备一定的稳定性和流畅性,同时它的安全兼容性也要足够强。
以上内容就是关于一对一软件开发时需要开发的功能和需要注意的事情,要想真正的解决现阶段社会中存在的社交压力问题,需要找准用户的真实需求、产品定位等方面入手,至于编代码和程序是否问题就不需要我们操心了。
本文声明原创,转载请注明作者、出外及原文链接。 收起阅读 »

开发直播平台多少钱?没有技术团队怎么办?

“开发直播平台多少钱?”
“没有技术团队怎么办?”
以上两个问题是绝大多数想要加入直播行业的人都非常关注的问题,所以本文就以这两个问题来简单探讨一下,希望能给大家提供一定的帮助。
开发一个直播平台需要多少钱?
首先,需要确定的是选择定制开发还是购买一套源码进行开发;其次,需要选择专业的直播软件开发公司;最后,确定开发费用。
其实目前最简单直接的方法就是购买一套成品在线直播源码来进行搭建部署,实现快速上线运营。一般从源码服务商那里购买的直播源码都是开源的,支持二次开发,还可以直接搭建部署上线运营。这种方式不仅性价比较高,而且初期费用基本上只有源码本身的费用,当然,如果有额外的开发需要单独按照开发工期计算费用。但整体算下来,比起自己组建团队进行开发,无论是时间成本还是人力成本上都要划算的多。
没有技术团队怎么办?
绝大多数想做直播APP的人都没有配备相应的技术团队,那么他们就会考虑到一个问题,是不是没有技术团队就没办法做直播APP了?其实并非如此,现在市面上专业的软件开发公司除了提供直播源码以外,还会提供一系列的服务,主要就是为了解决客户没有技术团队的问题。举个简单的例子,我们购买一套直播源码之后,如果想要在现有的基础上添加几个功能,那么就把功能需求整理成为一份文档给开发公司,然后他们会负责将功能开发完成好之后交付给我们,后期还可以免费搭建部署实现上架运营。也就是说,就算没有技术团队,只需要花费一套源码和相关功能开发的费用就可以得到一个成品直播APP,不仅省时省力,还节省了自己组建技术团队的相关人力费用。
其实说来说去,还是找专业的直播软件开发公司更合适。因为他们大都是长期专注于直播系统开发的公司,在技术和功能等方面的实现都具备一定的经验和实力,并且对于直播场景中经常出现的问题也有对应的解决方案,所以,有开发直播平台意向的人不妨去正规、专业的公司咨询一下关于开发费用和技术等方面的问题,这样一来不仅程序的质量得到了强有力的保证,还能享受到相应的服务。
本文声明原创,转载请注明原文链接及出处。
继续阅读 »
“开发直播平台多少钱?”
“没有技术团队怎么办?”
以上两个问题是绝大多数想要加入直播行业的人都非常关注的问题,所以本文就以这两个问题来简单探讨一下,希望能给大家提供一定的帮助。
开发一个直播平台需要多少钱?
首先,需要确定的是选择定制开发还是购买一套源码进行开发;其次,需要选择专业的直播软件开发公司;最后,确定开发费用。
其实目前最简单直接的方法就是购买一套成品在线直播源码来进行搭建部署,实现快速上线运营。一般从源码服务商那里购买的直播源码都是开源的,支持二次开发,还可以直接搭建部署上线运营。这种方式不仅性价比较高,而且初期费用基本上只有源码本身的费用,当然,如果有额外的开发需要单独按照开发工期计算费用。但整体算下来,比起自己组建团队进行开发,无论是时间成本还是人力成本上都要划算的多。
没有技术团队怎么办?
绝大多数想做直播APP的人都没有配备相应的技术团队,那么他们就会考虑到一个问题,是不是没有技术团队就没办法做直播APP了?其实并非如此,现在市面上专业的软件开发公司除了提供直播源码以外,还会提供一系列的服务,主要就是为了解决客户没有技术团队的问题。举个简单的例子,我们购买一套直播源码之后,如果想要在现有的基础上添加几个功能,那么就把功能需求整理成为一份文档给开发公司,然后他们会负责将功能开发完成好之后交付给我们,后期还可以免费搭建部署实现上架运营。也就是说,就算没有技术团队,只需要花费一套源码和相关功能开发的费用就可以得到一个成品直播APP,不仅省时省力,还节省了自己组建技术团队的相关人力费用。
其实说来说去,还是找专业的直播软件开发公司更合适。因为他们大都是长期专注于直播系统开发的公司,在技术和功能等方面的实现都具备一定的经验和实力,并且对于直播场景中经常出现的问题也有对应的解决方案,所以,有开发直播平台意向的人不妨去正规、专业的公司咨询一下关于开发费用和技术等方面的问题,这样一来不仅程序的质量得到了强有力的保证,还能享受到相应的服务。
本文声明原创,转载请注明原文链接及出处。 收起阅读 »

找优质的直播软件开发公司不用担心系统架构问题

文章标题中提到的系统架构问题,在直播软件开发过程中也是非常重要的一部分。为什么这么说呢?我们举个简单的例子,一个施工队盖楼肯定先要把整体的框架用钢筋扎好,然后再进行下一步的工作。开发直播软件也是一样,先把整体的架构设计好罗列出来,再把其中的功能挨个添加进去。
目前市面上的直播软件开发公司都有专人负责系统架构的设计和实现,他们会根据用户需求进行调整,以满足各种应用场景,在这里给大家分享三种常见的直播架构。
1.简单的直播架构
在已有的CDN基础上,再自行搭建一个信令服务器,这样就可以完成服务层的搭建工作了。用户向信令服务器发送共享音视频指令后,再通过相机或摄像头采集数据,编码之后通过直播中常用的RTMP协议将这个流推到CDN。然后接收端向信令服务器发送指令,获取音视频流的名称,再从CDN中拉取该流,经过解码之后渲染在屏幕上,用户就可以观看直播了。建议:在选择CDN服务商时可以选择多家进行对比,比如阿里云和腾讯云等都是国内比较大的服务商。当然,也可以把这件事情交给直播软件开发公司,由他们联系长期合作的服务商提供服务。
1.jpg

2.实时交互的直播架构
为了满足直播交互性强的特性,在设计架构时需要增加自有网络。在音视频数据上传到自有网络之后,还需要通过专门的服务将数据流转成RTMP流推到CDN,对于大多数不参与实时互动的用户来说,他们可以从CDN获取音视频数据了。这种架构既能满足直播用户的实时互动需求,也可以满足其他用户只观看直播不互动的需求,在直播软件开发项目中也是比较常见的一种架构设计。
2.jpg

3.解决高并发的直播架构
可能大家经常看到“直播”“高并发”这些词汇出现,但是对于直播中的高并发并不了解。我们可以这样理解,如果只有1w人观看直播,不是同时进入直播间就没问题,但如果这1w人是在同一时刻进入直播间,如果在直播软件开发过程中没考虑到并发量的问题,那么服务器就会直接崩溃,导致无法观看。所以说,为了解决直播的高负载和并发问题,需要增加资源管理服务器,从而实时监控各个服务的资源情况。
3.jpg

绝大多数人都认为开发直播软件并不需要找专业的开发公司,但实际上来看,找专业的直播软件开发公司还是非常必要的,就像文章中系统架构、CDN服务商和高并发等问题,都可以交给他们负责。比起自己从设计直播架构开始来说,要好多了。希望本篇文章能给大家提供一定的帮助。
本文声明原创,转载请注明出处及链接。
继续阅读 »
文章标题中提到的系统架构问题,在直播软件开发过程中也是非常重要的一部分。为什么这么说呢?我们举个简单的例子,一个施工队盖楼肯定先要把整体的框架用钢筋扎好,然后再进行下一步的工作。开发直播软件也是一样,先把整体的架构设计好罗列出来,再把其中的功能挨个添加进去。
目前市面上的直播软件开发公司都有专人负责系统架构的设计和实现,他们会根据用户需求进行调整,以满足各种应用场景,在这里给大家分享三种常见的直播架构。
1.简单的直播架构
在已有的CDN基础上,再自行搭建一个信令服务器,这样就可以完成服务层的搭建工作了。用户向信令服务器发送共享音视频指令后,再通过相机或摄像头采集数据,编码之后通过直播中常用的RTMP协议将这个流推到CDN。然后接收端向信令服务器发送指令,获取音视频流的名称,再从CDN中拉取该流,经过解码之后渲染在屏幕上,用户就可以观看直播了。建议:在选择CDN服务商时可以选择多家进行对比,比如阿里云和腾讯云等都是国内比较大的服务商。当然,也可以把这件事情交给直播软件开发公司,由他们联系长期合作的服务商提供服务。
1.jpg

2.实时交互的直播架构
为了满足直播交互性强的特性,在设计架构时需要增加自有网络。在音视频数据上传到自有网络之后,还需要通过专门的服务将数据流转成RTMP流推到CDN,对于大多数不参与实时互动的用户来说,他们可以从CDN获取音视频数据了。这种架构既能满足直播用户的实时互动需求,也可以满足其他用户只观看直播不互动的需求,在直播软件开发项目中也是比较常见的一种架构设计。
2.jpg

3.解决高并发的直播架构
可能大家经常看到“直播”“高并发”这些词汇出现,但是对于直播中的高并发并不了解。我们可以这样理解,如果只有1w人观看直播,不是同时进入直播间就没问题,但如果这1w人是在同一时刻进入直播间,如果在直播软件开发过程中没考虑到并发量的问题,那么服务器就会直接崩溃,导致无法观看。所以说,为了解决直播的高负载和并发问题,需要增加资源管理服务器,从而实时监控各个服务的资源情况。
3.jpg

绝大多数人都认为开发直播软件并不需要找专业的开发公司,但实际上来看,找专业的直播软件开发公司还是非常必要的,就像文章中系统架构、CDN服务商和高并发等问题,都可以交给他们负责。比起自己从设计直播架构开始来说,要好多了。希望本篇文章能给大家提供一定的帮助。
本文声明原创,转载请注明出处及链接。 收起阅读 »

直播软件开发业务需要考虑自适应的问题吗?

大家虽然经常观看直播,但是实际上对直播的流程并不是非常了解。视频直播的流程可以简单分为:采集、处理、编码和封装、推流(到服务器)、分发、播放。其中,在直播软件开发中需要注意的就是推流端的实现问题,如果流推不出去,用户就无法正常观看直播。目前市面上有很多服务商,购买源码时还需要看看他们的程序在自适应方面做的好不好。
1.帧率和码率的自适应
如果直播推流出现了问题,最容易出现的一个问题就是卡顿。假如我们在观看直播时网络环境较差,那么就可以将帧率或者是码率降低一点,音视频流就可以正常推出去。在码率自适应的时候,是可以直接反馈到编码器的,然后动态调整自己的码率,使得传出来的视频码率下降,而帧率的控制相对来说比较简单,在此就不多作赘述了。
2.软硬自适应
大部分人反馈比较多的就是,在观看直播的时候手机会出现发热现象,其实这就涉及到了在直播软件开发过程中,软硬编码的方式选择问题。比如硬件编码,它的优点就是不会导致手机发热,但是音视频比较南通不,而且兼容性不太好。软件编码的话,码率低并且画质好,它也是导致手机发热的“罪魁祸首”。
3.算法自适应
对于推流端来说,它最主要的任务就是将更好的直播画质给推出来,要想使得直播画质变得更好,可以采用H.265编码,举个简单的例子就是,H.264能推出来480P的画质,那么经过H.265之后就能推出来720P的画质。在直播这种交互性强的应用场景,直播画质是否清晰也是评价软件是否优质的标准之一。不仅是主播,现在大多数用户对于画质方面的要求非常严格,假如说用户花钱观看一个主播,但是始终无法看到高清状态下的主播,用户的产品体验就会变得非常糟糕,直播平台就有可能会流失掉一个用户。所以说,选择适合直播应用场景的编码标准也是非常重要的。

在直播应用场景中,自适应并不算是非常复杂的问题。如果想要购买一套程序,但是又不确定程序的质量应该怎么办呢?是否需要考虑自适应的问题呢?事实上,现在的直播软件开发商在购买程序之前,会先提供产品演示供我们下载体验,如果觉得可以再进行下一步的开发或者购买流程,当然这只是针对正规商家,其他渠道来源的程序是否稳定我们就无从得知了。最后,还是建议大家从正规渠道购买程序吧,这样不仅质量有保证,还更加省心。
本文声明原创,转载请注明出处。
继续阅读 »
大家虽然经常观看直播,但是实际上对直播的流程并不是非常了解。视频直播的流程可以简单分为:采集、处理、编码和封装、推流(到服务器)、分发、播放。其中,在直播软件开发中需要注意的就是推流端的实现问题,如果流推不出去,用户就无法正常观看直播。目前市面上有很多服务商,购买源码时还需要看看他们的程序在自适应方面做的好不好。
1.帧率和码率的自适应
如果直播推流出现了问题,最容易出现的一个问题就是卡顿。假如我们在观看直播时网络环境较差,那么就可以将帧率或者是码率降低一点,音视频流就可以正常推出去。在码率自适应的时候,是可以直接反馈到编码器的,然后动态调整自己的码率,使得传出来的视频码率下降,而帧率的控制相对来说比较简单,在此就不多作赘述了。
2.软硬自适应
大部分人反馈比较多的就是,在观看直播的时候手机会出现发热现象,其实这就涉及到了在直播软件开发过程中,软硬编码的方式选择问题。比如硬件编码,它的优点就是不会导致手机发热,但是音视频比较南通不,而且兼容性不太好。软件编码的话,码率低并且画质好,它也是导致手机发热的“罪魁祸首”。
3.算法自适应
对于推流端来说,它最主要的任务就是将更好的直播画质给推出来,要想使得直播画质变得更好,可以采用H.265编码,举个简单的例子就是,H.264能推出来480P的画质,那么经过H.265之后就能推出来720P的画质。在直播这种交互性强的应用场景,直播画质是否清晰也是评价软件是否优质的标准之一。不仅是主播,现在大多数用户对于画质方面的要求非常严格,假如说用户花钱观看一个主播,但是始终无法看到高清状态下的主播,用户的产品体验就会变得非常糟糕,直播平台就有可能会流失掉一个用户。所以说,选择适合直播应用场景的编码标准也是非常重要的。

在直播应用场景中,自适应并不算是非常复杂的问题。如果想要购买一套程序,但是又不确定程序的质量应该怎么办呢?是否需要考虑自适应的问题呢?事实上,现在的直播软件开发商在购买程序之前,会先提供产品演示供我们下载体验,如果觉得可以再进行下一步的开发或者购买流程,当然这只是针对正规商家,其他渠道来源的程序是否稳定我们就无从得知了。最后,还是建议大家从正规渠道购买程序吧,这样不仅质量有保证,还更加省心。
本文声明原创,转载请注明出处。 收起阅读 »

打击电信诈骗保障客户安全,环信客服云6大安全机制让骗子无所遁形!

近日,环信收到海淀网警和用户的反馈,部分不法分子通过注册环信客服云获取专业客服工具在各大论坛和二手交易平台:如百度贴吧、58同城“转转”等进行电信诈骗,不法分子冒充平台的专业客服人员诱导客户先行付款进行诈骗,造成了很恶劣的社会影响。

2.jpg



环信第一时间获悉即敏锐的采取行动,一期关停450个诈骗账号信息,同时推出6大安全机制让骗子无所遁形。

环信客服云防诈骗六大安全机制:

1.注册环节:单手机号15天内只能注册一个账号,以防反复账号行骗。

2.使用环节:关停H5聊天窗口,需申请审核后才能打开。

3.聊天环节:敏感词预警,在用户聊天记录过程中系统监控到提前设置的关键词,会触发预警给到运营人员,进行账户关停。

4.账号限制:实时操作异常账号关闭,一经发现,立即关停账号

5.黑名单机制:加入黑名单的注册手机号,永久无法再注册环信

6.报警机制:第一时间反馈所有诈骗信息至公安网警等相关部门

同时,环信也开通了反诈骗投诉信箱:Antifraud@easemob.com 和 400专线:400-622-1776,我们的工作人员会第一时间解决所有用户碰到的所有潜在欺诈问题。

维护网络安全繁荣是环信义不容辞的社会责任,环信会一如既往和网警网安等部门密切合作,打击电信诈骗,保护客户安全,环信客服云一直在路上!
继续阅读 »
近日,环信收到海淀网警和用户的反馈,部分不法分子通过注册环信客服云获取专业客服工具在各大论坛和二手交易平台:如百度贴吧、58同城“转转”等进行电信诈骗,不法分子冒充平台的专业客服人员诱导客户先行付款进行诈骗,造成了很恶劣的社会影响。

2.jpg



环信第一时间获悉即敏锐的采取行动,一期关停450个诈骗账号信息,同时推出6大安全机制让骗子无所遁形。

环信客服云防诈骗六大安全机制:

1.注册环节:单手机号15天内只能注册一个账号,以防反复账号行骗。

2.使用环节:关停H5聊天窗口,需申请审核后才能打开。

3.聊天环节:敏感词预警,在用户聊天记录过程中系统监控到提前设置的关键词,会触发预警给到运营人员,进行账户关停。

4.账号限制:实时操作异常账号关闭,一经发现,立即关停账号

5.黑名单机制:加入黑名单的注册手机号,永久无法再注册环信

6.报警机制:第一时间反馈所有诈骗信息至公安网警等相关部门

同时,环信也开通了反诈骗投诉信箱:Antifraud@easemob.com 和 400专线:400-622-1776,我们的工作人员会第一时间解决所有用户碰到的所有潜在欺诈问题。

维护网络安全繁荣是环信义不容辞的社会责任,环信会一如既往和网警网安等部门密切合作,打击电信诈骗,保护客户安全,环信客服云一直在路上! 收起阅读 »

初试直播软件开发项目需要了解后台开发语言吗?

刷论坛的时候看到有位朋友发帖,大概意思就是自己想尝试直播软件开发项目,简单说就是做个直播软件,但发现有后台有两种不同的开发语言:java和php,所以才发帖求助帮他解答两个后台之间的区别。那么实际上,java后台和php后台到底有什么区别呢?
1.两种编程语言有什么区别?
先来说一下php,它最大的特点就是非常迅速,甚至都可以不用框架去写一个功能,只需要几行代码就能搞定了。但java就不一样了,它需要先想一下用怎样的框架,然后再选择配置各种数据库、过滤器等。
20160112174716_24356.jpg

2.java和php在技术层面有何区别?
php汲取了java和c以及perl等语言的所有优点,专注于互联网领域,在web领域几乎没有语言可以和php相比。而java只是面向对象开发,虽然功能强、分支多,但它所具备的优势往往也是它的劣势。
3.java和php在市场份额方面有何区别?
Java的语言相对比较老,经过了多年时间的发展,在C/S和B/S领域占据一定的地位,但是随着社会需求的不断变化,java的市场在逐渐减少。而php的市场份额只需要看web领域就足够了,因为web领域php的市场超过了80%,剩下的就是向asp、C#、python等,大部分企业都在使用php,Facebook和新浪微博也在使用php。相比较之下,php的市场份额比java要多。
t01515cca18405c61d9.jpg

4.哪一种更适合直播软件开发业务?
对于开发直播软件来讲,我们需要考虑到一个问题花费,这是大多数人都十分关注的。Java后台虽然稳定性、承载量等方面都比php要好,但是java后台开发起来费用高、开发周期长、后期的维护成本也很高,所以对于一些启动资金有限的人来说并不划算,但并不代表java后台就不能适用于直播业务。相比之下,php后台不但开发周期短,而且也不需要过高的费开发用,目前大多数软件开发公司都默认是php后台。需要避免的误区就是,java后台和php后台两种都可以选择,只不过php后台从各方面来看的话性价比更高一些。
以上就是java后台和php后台的区别,在此只作参考。对于初试直播软件开发项目的朋友来说,如果实在不知道选择哪种后台的话,不妨把这个棘手的问题交给开发商,让他们帮你制定相对应的直播解决方案,当然,选择正规的官方公司才是最靠谱的。如果大家对直播业务感兴趣,可以在下方与我互动。
本文声明原创,转载请注明出处。
继续阅读 »
刷论坛的时候看到有位朋友发帖,大概意思就是自己想尝试直播软件开发项目,简单说就是做个直播软件,但发现有后台有两种不同的开发语言:java和php,所以才发帖求助帮他解答两个后台之间的区别。那么实际上,java后台和php后台到底有什么区别呢?
1.两种编程语言有什么区别?
先来说一下php,它最大的特点就是非常迅速,甚至都可以不用框架去写一个功能,只需要几行代码就能搞定了。但java就不一样了,它需要先想一下用怎样的框架,然后再选择配置各种数据库、过滤器等。
20160112174716_24356.jpg

2.java和php在技术层面有何区别?
php汲取了java和c以及perl等语言的所有优点,专注于互联网领域,在web领域几乎没有语言可以和php相比。而java只是面向对象开发,虽然功能强、分支多,但它所具备的优势往往也是它的劣势。
3.java和php在市场份额方面有何区别?
Java的语言相对比较老,经过了多年时间的发展,在C/S和B/S领域占据一定的地位,但是随着社会需求的不断变化,java的市场在逐渐减少。而php的市场份额只需要看web领域就足够了,因为web领域php的市场超过了80%,剩下的就是向asp、C#、python等,大部分企业都在使用php,Facebook和新浪微博也在使用php。相比较之下,php的市场份额比java要多。
t01515cca18405c61d9.jpg

4.哪一种更适合直播软件开发业务?
对于开发直播软件来讲,我们需要考虑到一个问题花费,这是大多数人都十分关注的。Java后台虽然稳定性、承载量等方面都比php要好,但是java后台开发起来费用高、开发周期长、后期的维护成本也很高,所以对于一些启动资金有限的人来说并不划算,但并不代表java后台就不能适用于直播业务。相比之下,php后台不但开发周期短,而且也不需要过高的费开发用,目前大多数软件开发公司都默认是php后台。需要避免的误区就是,java后台和php后台两种都可以选择,只不过php后台从各方面来看的话性价比更高一些。
以上就是java后台和php后台的区别,在此只作参考。对于初试直播软件开发项目的朋友来说,如果实在不知道选择哪种后台的话,不妨把这个棘手的问题交给开发商,让他们帮你制定相对应的直播解决方案,当然,选择正规的官方公司才是最靠谱的。如果大家对直播业务感兴趣,可以在下方与我互动。
本文声明原创,转载请注明出处。 收起阅读 »

在线直播源码打造互动直播平台需要开发的功能

通常情况下,我们在购买一套在线直播源码之前,需要事先了解一下它都包含哪些功能。在直播应用场景下,其自身具备的互动性和实时性是非常显著的特点。要想满足直播的实时性和互动性,并且能够给用户带来优质的产品体验,就需要在功能层面上多下功夫。那么,要想打造一款互动直播平台需要开发哪些功能呢?
1.弹幕功能
直播中最基础且必不可少的就是弹幕功能了。不仅可以带动直播间内的活跃程度,还可以增进用户与主播之间的交流沟通,特别是游戏直播场景下,满屏的弹幕和发送弹幕已经成为直播平台靓丽的“风景线”。当然,在开发弹幕功能时还需要注意弹幕的自动审核,对于弹幕消息进行一定的过滤,从而保证平台的整体语言风气。

47291482820971.jpg

2.礼物功能
刷礼物,是直播中最直接也最实现的变现方式。用户以送礼物的形式表达自己对主播的喜爱,而主播也会为了获得更多的礼物努力输出令人感兴趣的直播内容,从而增加直播平台的用户黏性和活跃程度。当然,礼物的配置也需要进行一定的优化,比如支持PC、APP、H5的道具播放效果。
3.活动功能
大多数运营级直播平台都会利用各种各样的节日策划各种活动,以奖励为“噱头”吸引用户参与互动,从而增加平台的用户黏性。
4.任务功能
一些直播平台为了增强用户黏性,提高用户日活量,会在新用户注册之后提供任务指引,比如“观看3位主播的直播,并尝试送礼物1次”,以完成任务的形式发送奖励,打消用户的试玩心理。

14816215168966_副本.png


5.靓号功能
这一功能主要是给喜欢个性并且有意义号码需求的提供的,就像有的人喜欢换简单好记的手机号,有的人并不介意手机号的排列顺序。
6.会员功能
为用户提供相应的特权服务,将会员分为多个不同的层次,刺激用户进行消费充值,并设定有效期,这也是直播平台能够变现的方式之一。
7.守护功能
大部分直播平台都会具备守护功能,给主播礼物打赏数量最高的会获得守护头像框,并排名在显眼的位置,还可以享受一定的特权服务。
8.游戏功能
小游戏对于互动性强的直播平台来说是必不可少的,主播可以在直播过程中与用户玩游戏进行互动,以游戏的方式增强用户黏性,从而给主播增加一定的观看人数,并且使用户能够感受到强烈的参与感。
所以说,要想打购买在线直播源码并打造一款互动直播平台的话,不仅需要对其质量进行考察,还需要了解其中所包含的功能是否能够调动用户的活跃性和积极性。只有这样,才能增加平台的用户流量,最终实现变现目的。文章结尾给大家提个建议,购买源码还是要找专业的源码服务商才行。
本文声明原创,转载请注明出处及作者。
继续阅读 »
通常情况下,我们在购买一套在线直播源码之前,需要事先了解一下它都包含哪些功能。在直播应用场景下,其自身具备的互动性和实时性是非常显著的特点。要想满足直播的实时性和互动性,并且能够给用户带来优质的产品体验,就需要在功能层面上多下功夫。那么,要想打造一款互动直播平台需要开发哪些功能呢?
1.弹幕功能
直播中最基础且必不可少的就是弹幕功能了。不仅可以带动直播间内的活跃程度,还可以增进用户与主播之间的交流沟通,特别是游戏直播场景下,满屏的弹幕和发送弹幕已经成为直播平台靓丽的“风景线”。当然,在开发弹幕功能时还需要注意弹幕的自动审核,对于弹幕消息进行一定的过滤,从而保证平台的整体语言风气。

47291482820971.jpg

2.礼物功能
刷礼物,是直播中最直接也最实现的变现方式。用户以送礼物的形式表达自己对主播的喜爱,而主播也会为了获得更多的礼物努力输出令人感兴趣的直播内容,从而增加直播平台的用户黏性和活跃程度。当然,礼物的配置也需要进行一定的优化,比如支持PC、APP、H5的道具播放效果。
3.活动功能
大多数运营级直播平台都会利用各种各样的节日策划各种活动,以奖励为“噱头”吸引用户参与互动,从而增加平台的用户黏性。
4.任务功能
一些直播平台为了增强用户黏性,提高用户日活量,会在新用户注册之后提供任务指引,比如“观看3位主播的直播,并尝试送礼物1次”,以完成任务的形式发送奖励,打消用户的试玩心理。

14816215168966_副本.png


5.靓号功能
这一功能主要是给喜欢个性并且有意义号码需求的提供的,就像有的人喜欢换简单好记的手机号,有的人并不介意手机号的排列顺序。
6.会员功能
为用户提供相应的特权服务,将会员分为多个不同的层次,刺激用户进行消费充值,并设定有效期,这也是直播平台能够变现的方式之一。
7.守护功能
大部分直播平台都会具备守护功能,给主播礼物打赏数量最高的会获得守护头像框,并排名在显眼的位置,还可以享受一定的特权服务。
8.游戏功能
小游戏对于互动性强的直播平台来说是必不可少的,主播可以在直播过程中与用户玩游戏进行互动,以游戏的方式增强用户黏性,从而给主播增加一定的观看人数,并且使用户能够感受到强烈的参与感。
所以说,要想打购买在线直播源码并打造一款互动直播平台的话,不仅需要对其质量进行考察,还需要了解其中所包含的功能是否能够调动用户的活跃性和积极性。只有这样,才能增加平台的用户流量,最终实现变现目的。文章结尾给大家提个建议,购买源码还是要找专业的源码服务商才行。
本文声明原创,转载请注明出处及作者。 收起阅读 »

直播平台开发搭建常见问题汇总

直播平台开发的重点在于功能设计,以及如何优化提升后期直播平台的用户直播体验,从整个直播平台开发到搭建部署、封装上架,有很多常见的问题是需要我们关注的。我们就来汇总整理下。
1.直播平台CDN是如何计费的?
三方CDN服务为直播平台内容的分发提供了可行性方案。但CDN费用如何计算经常困扰着运营方,尤其是刚刚接触直播平台开发项目的朋友。目前两种主流的CDN计费方式,一种是按照峰值计费,另一种则是按照流量计费。在后期的直播平台运营过程中,当在线用户较多时,建议采用峰值计费方式会更加经济实惠一些。
2.直播平台搭建部署需要准备哪些内容?
针对手机直播APP的搭建部署需要准备的内容主要有:APP名字,APP应用进场图,观看页图等,开通CDN服务,三方接口信息资料,合理的服务器配置,苹果App Store上架和安卓相关应用市场上架需要的内容资料等。
3.苹果开发者账号相关问题
申请苹果开发者账号,主要的目的是用于将应用上架到App Store供用户安装下载。目前苹果开发者账号主要有以下三种:
(1)企业开发者账号:企业账号开发的应用不能上架App Store,通常用于企业内部分发测试应用。申请费用299美元,现阶段来讲企业账号很难申请。需要提供公司的邓白氏编码。
(2)公司开发者账号:申请时需要填写公司的邓白氏编码,可以用来进行应用上架App Store,有条件的话尽量申请。
(3)个人开发者账号:个人开发者账号也可以进行上架,如果用作签名分发时会有设备数量限制,从字面意思看更适用于个人开发者,如果做APP运营推广,还是要申请公司账号。
4.打开直播APP源码用什么开发工具?
安卓端的开发工具:Android studio 
iOS端开发工具:xcode
5.服务器的系统该如何选择?
建议使用Linux 服务系统, CentOS 7.2 64位操作系统。通常直播平台搭建部署环境是支持LNMP或LAMP配置环境的。
6.什么是苹果UDID?
UDID是由子母和数字组成的40个字符串的序号,主要用来区分每一个唯一的iOS设备的标识,当使用个人签名进行应用分发下载时,需要提供设备的UDID给开发者。如果是企业签名分发下载则不需要UDID,而且没有设备数量限制。
7.直播平台开发广泛使用的流媒体协议有哪些? 
比较常见的如UDP私有协议,使用最为广泛的是RTMP协议,在手机网页端观看视频直播则更多地采用HLS传输协议。这些协议各有优劣势,适用的场景也各不相同。
8.直播平台中的 定位功能,跟附近的人功能有何区别?
绝大多数直播平台都具有“定位”功能和“附近的人”功能,二者是不同的。定位功能主要用于直播的个人信息中,显示主播的位置;附近的人功能,则是在主播列表中,用来显示主播和用户之间的距离。
以上这些问题都是大家在直播平台开发搭建运营时经常遇到的,搞清楚这些问题后,会使得整个开发过程更加顺畅。
继续阅读 »
直播平台开发的重点在于功能设计,以及如何优化提升后期直播平台的用户直播体验,从整个直播平台开发到搭建部署、封装上架,有很多常见的问题是需要我们关注的。我们就来汇总整理下。
1.直播平台CDN是如何计费的?
三方CDN服务为直播平台内容的分发提供了可行性方案。但CDN费用如何计算经常困扰着运营方,尤其是刚刚接触直播平台开发项目的朋友。目前两种主流的CDN计费方式,一种是按照峰值计费,另一种则是按照流量计费。在后期的直播平台运营过程中,当在线用户较多时,建议采用峰值计费方式会更加经济实惠一些。
2.直播平台搭建部署需要准备哪些内容?
针对手机直播APP的搭建部署需要准备的内容主要有:APP名字,APP应用进场图,观看页图等,开通CDN服务,三方接口信息资料,合理的服务器配置,苹果App Store上架和安卓相关应用市场上架需要的内容资料等。
3.苹果开发者账号相关问题
申请苹果开发者账号,主要的目的是用于将应用上架到App Store供用户安装下载。目前苹果开发者账号主要有以下三种:
(1)企业开发者账号:企业账号开发的应用不能上架App Store,通常用于企业内部分发测试应用。申请费用299美元,现阶段来讲企业账号很难申请。需要提供公司的邓白氏编码。
(2)公司开发者账号:申请时需要填写公司的邓白氏编码,可以用来进行应用上架App Store,有条件的话尽量申请。
(3)个人开发者账号:个人开发者账号也可以进行上架,如果用作签名分发时会有设备数量限制,从字面意思看更适用于个人开发者,如果做APP运营推广,还是要申请公司账号。
4.打开直播APP源码用什么开发工具?
安卓端的开发工具:Android studio 
iOS端开发工具:xcode
5.服务器的系统该如何选择?
建议使用Linux 服务系统, CentOS 7.2 64位操作系统。通常直播平台搭建部署环境是支持LNMP或LAMP配置环境的。
6.什么是苹果UDID?
UDID是由子母和数字组成的40个字符串的序号,主要用来区分每一个唯一的iOS设备的标识,当使用个人签名进行应用分发下载时,需要提供设备的UDID给开发者。如果是企业签名分发下载则不需要UDID,而且没有设备数量限制。
7.直播平台开发广泛使用的流媒体协议有哪些? 
比较常见的如UDP私有协议,使用最为广泛的是RTMP协议,在手机网页端观看视频直播则更多地采用HLS传输协议。这些协议各有优劣势,适用的场景也各不相同。
8.直播平台中的 定位功能,跟附近的人功能有何区别?
绝大多数直播平台都具有“定位”功能和“附近的人”功能,二者是不同的。定位功能主要用于直播的个人信息中,显示主播的位置;附近的人功能,则是在主播列表中,用来显示主播和用户之间的距离。
以上这些问题都是大家在直播平台开发搭建运营时经常遇到的,搞清楚这些问题后,会使得整个开发过程更加顺畅。 收起阅读 »

同一个网站,手机端跟电脑端显示不同是怎么实现的?

同一个网站,手机端跟电脑端不同是怎么实现的?

常见的方式有三种:

1,自适应网站

同一套代码,自动实现手机端和电脑端的布局自动调整。例如:openGPS.cn 网站现在大部分页面已经支持自适应展示,手机端电脑端都可以访问本站内容,正常阅读。自适应站点,往往是对CSS布局的重点考虑,本站使用的是BootStrap这个前端样式组件实现的自适应布局。

2,网站二级目录

这种是早期网站比较喜欢的做法,因为其实这是一个网站。早期网站往往是使用虚拟主机(也叫空间)发布,一个空间只能放一个网站,所以这种做法在早期特别流行。这种结构本质还是一个网站,但是针对手机电脑客户端单独做了往往对应的一套目录,例如:

电脑站点地址一般是:www.domain.com/xxxxxxx

手机站点地址往往是:www.domain.com/m/xxxxxxx

3,手机站点使用二级域名,电脑手机各一套2套站点代码


这种做法,工作量跟二级目录基本相似,严格来说代码量稍微多点。由于是2套代码,所以发布时候也得配备2套域名,不过要求两套站点连接同一个数据库来实现数据统一。例如:

电脑端网站域名是:www.domain.com

手机端网站域名是:m.domain.com




原文地址: https://www.opengps.cn/Blog/View.aspx?id=302 文章的更新编辑依此链接为准。欢迎关注源站原创文章!
 
继续阅读 »
同一个网站,手机端跟电脑端不同是怎么实现的?

常见的方式有三种:

1,自适应网站

同一套代码,自动实现手机端和电脑端的布局自动调整。例如:openGPS.cn 网站现在大部分页面已经支持自适应展示,手机端电脑端都可以访问本站内容,正常阅读。自适应站点,往往是对CSS布局的重点考虑,本站使用的是BootStrap这个前端样式组件实现的自适应布局。

2,网站二级目录

这种是早期网站比较喜欢的做法,因为其实这是一个网站。早期网站往往是使用虚拟主机(也叫空间)发布,一个空间只能放一个网站,所以这种做法在早期特别流行。这种结构本质还是一个网站,但是针对手机电脑客户端单独做了往往对应的一套目录,例如:

电脑站点地址一般是:www.domain.com/xxxxxxx

手机站点地址往往是:www.domain.com/m/xxxxxxx

3,手机站点使用二级域名,电脑手机各一套2套站点代码


这种做法,工作量跟二级目录基本相似,严格来说代码量稍微多点。由于是2套代码,所以发布时候也得配备2套域名,不过要求两套站点连接同一个数据库来实现数据统一。例如:

电脑端网站域名是:www.domain.com

手机端网站域名是:m.domain.com




原文地址: https://www.opengps.cn/Blog/View.aspx?id=302 文章的更新编辑依此链接为准。欢迎关注源站原创文章!
  收起阅读 »

在微信小程序里实现聊天室

第一次搞小程序,老板让我实现一个聊天室功能,压力山大啊。
花了几天时间研究比较了一下方案,最后基于环信的小程序SDK 开发了一个聊天室。
 
准备工作
  1. 下载环信 小程序demo+sdk
    git clone https://github.com/easemob/webim-weixin-xcx
  2. 创建一个文件夹,将 demo 中的文件 comps、images、sdk、utils 拷贝到新的文件,文件目录说明
    ml.png

集成
  1. 登录环信没什么可说的,这里选择的是使用 username/password 登录,和demo中的一样,文件没有进行任何更改
    login.png
  2. 在app.js 中注册的 WebIM.conn.listen, 然后在 登陆成功的回调 onOpened 设置的跳转页面,并将登陆的 username 赋给 myName,传到新的页面中使用
    tz.png
  3. 修改 roomlist.js 获取聊天室列表,是分页获取的,这里先偷个懒,获取了第一页 20 个聊天室
    getroom.png
    然后将listChatrooms() 分别在onLoad、onShow 内,更改下,将原有的 listGroups() 替换掉
  4. 然后在roomlist.wxml 修改对应的 变量绑定名称
    listui.png
    list.png
  5. demo中的group.js 中,获取到的是当前登陆账号已加入的群组,咱们做的是聊天室功能,所以需要有一个加入的操作,找roomlist.js 中找到 into_room: function (event),然后填写加入聊天室的方法, 我是直接在当前这个里面加的跳转到聊天页面,并将当前登陆的IDmyName,聊天室IDgroupID,聊天室名称your 传给新页面
    joinrom.png
    Ex:监听是否加入聊天室成功的回调是在 onPresence 中,type:memberJoinChatRoomSuccess,正常是监听这个回调跳转页面,有点麻烦就直接这样吧
  6. 到会话页面后,需要修改一下对应的消息格式,在comps/chat/suit 目录下,将里面的文件对应的 js 文件根据文档给聊天室发送消息 格式进行修改,聊天室消息和群组消息不同,所以我目前是直接将getSendToParam()、isGroupChat() 注释,改成下面这样,demo 中下面还有代码的,这里就用 …… 代替了
    send.png
    chat.png
    就这样了,简单集成聊天室功能,demo中的UI 是开源的,可以根据自己的需求更改~下面是具体实现过程。代码也放在github 上了,有需要的兄弟自取。demo下载地址:https://github.com/lizgDonkey/room-xcx

继续阅读 »
第一次搞小程序,老板让我实现一个聊天室功能,压力山大啊。
花了几天时间研究比较了一下方案,最后基于环信的小程序SDK 开发了一个聊天室。
 
准备工作
  1. 下载环信 小程序demo+sdk
    git clone https://github.com/easemob/webim-weixin-xcx
  2. 创建一个文件夹,将 demo 中的文件 comps、images、sdk、utils 拷贝到新的文件,文件目录说明
    ml.png

集成
  1. 登录环信没什么可说的,这里选择的是使用 username/password 登录,和demo中的一样,文件没有进行任何更改
    login.png
  2. 在app.js 中注册的 WebIM.conn.listen, 然后在 登陆成功的回调 onOpened 设置的跳转页面,并将登陆的 username 赋给 myName,传到新的页面中使用
    tz.png
  3. 修改 roomlist.js 获取聊天室列表,是分页获取的,这里先偷个懒,获取了第一页 20 个聊天室
    getroom.png
    然后将listChatrooms() 分别在onLoad、onShow 内,更改下,将原有的 listGroups() 替换掉
  4. 然后在roomlist.wxml 修改对应的 变量绑定名称
    listui.png
    list.png
  5. demo中的group.js 中,获取到的是当前登陆账号已加入的群组,咱们做的是聊天室功能,所以需要有一个加入的操作,找roomlist.js 中找到 into_room: function (event),然后填写加入聊天室的方法, 我是直接在当前这个里面加的跳转到聊天页面,并将当前登陆的IDmyName,聊天室IDgroupID,聊天室名称your 传给新页面
    joinrom.png
    Ex:监听是否加入聊天室成功的回调是在 onPresence 中,type:memberJoinChatRoomSuccess,正常是监听这个回调跳转页面,有点麻烦就直接这样吧
  6. 到会话页面后,需要修改一下对应的消息格式,在comps/chat/suit 目录下,将里面的文件对应的 js 文件根据文档给聊天室发送消息 格式进行修改,聊天室消息和群组消息不同,所以我目前是直接将getSendToParam()、isGroupChat() 注释,改成下面这样,demo 中下面还有代码的,这里就用 …… 代替了
    send.png
    chat.png
    就这样了,简单集成聊天室功能,demo中的UI 是开源的,可以根据自己的需求更改~下面是具体实现过程。代码也放在github 上了,有需要的兄弟自取。demo下载地址:https://github.com/lizgDonkey/room-xcx

收起阅读 »

(客服云)iOS访客端集成常见问题(非报错)

1、UI上很多地方显示英文,比如聊天页面的工具栏
显示英文1.png

把客服demo中配置的国际化文件添加到您自己的工程中。拖之前要打开国际化文件,全部选中这三个,再进行拖入。
显示英文2.png

 
2、进入聊天页面没有加载聊天记录
这种情况一般出现在只使用了 HDMessageViewController 没有使用 HDChatViewController 的时候
在HDMessageViewController 的 viewDidLoad 方法中, 将 [self tableViewDidTriggerHeaderRefresh]; 的注释打开,再在这之前
加上 self.showRefreshHeader = YES; 这句代码
 
3、发送表情却显示字符串
访客端表情符号.png

把下面这段代码添加到appdelegate中就可以了
[[HDEmotionEscape sharedInstance] setEaseEmotionEscapePattern:@"\\[[^\\[\\]]{1,3}\\]"];
[[HDEmotionEscape sharedInstance] setEaseEmotionEscapeDictionary:[HDConvertToCommonEmoticonsHelper emotionsDictionary]];
 
4、客服能收到访客的消息,访客收不到客服的消息
(1)客服和im同时使用的话,初始化sdk、登录、登出用的是im的api会出现这种情况。必须使用客服的api。
(2)IM sdk升级为客服sdk,不兼容导致的,这种情况可以线上发起会话咨询。
     
5、发送的消息,出现在聊天页面的左侧
一般是由于当前访客没有登录或者登录失败,断点仔细检查下。
继续阅读 »
1、UI上很多地方显示英文,比如聊天页面的工具栏
显示英文1.png

把客服demo中配置的国际化文件添加到您自己的工程中。拖之前要打开国际化文件,全部选中这三个,再进行拖入。
显示英文2.png

 
2、进入聊天页面没有加载聊天记录
这种情况一般出现在只使用了 HDMessageViewController 没有使用 HDChatViewController 的时候
在HDMessageViewController 的 viewDidLoad 方法中, 将 [self tableViewDidTriggerHeaderRefresh]; 的注释打开,再在这之前
加上 self.showRefreshHeader = YES; 这句代码
 
3、发送表情却显示字符串
访客端表情符号.png

把下面这段代码添加到appdelegate中就可以了
[[HDEmotionEscape sharedInstance] setEaseEmotionEscapePattern:@"\\[[^\\[\\]]{1,3}\\]"];
[[HDEmotionEscape sharedInstance] setEaseEmotionEscapeDictionary:[HDConvertToCommonEmoticonsHelper emotionsDictionary]];
 
4、客服能收到访客的消息,访客收不到客服的消息
(1)客服和im同时使用的话,初始化sdk、登录、登出用的是im的api会出现这种情况。必须使用客服的api。
(2)IM sdk升级为客服sdk,不兼容导致的,这种情况可以线上发起会话咨询。
     
5、发送的消息,出现在聊天页面的左侧
一般是由于当前访客没有登录或者登录失败,断点仔细检查下。 收起阅读 »

(客服云)iOS访客端集成常见报错(总有一款适合你)

注意:向自己工程中添加环信SDK和UI文件的时候,不要直接向xcode中拖拽添加,先把SDK和UI文件粘贴到自己工程的finder目录中,再从finder中向xcode中拖拽添加,避免出现找不到SDK或者UI文件的情况。
 
1、如果工程中引入的是不带音视频版本的sdk:HyphenateLite.framework和HelpDeskLite.framework,#import <HelpDeskLite/HelpDeskLite.h> 头文件报错的话,那么把HDMessage.h中的#import <Hyphenate/Hyphenate.h>改成#import <HyphenateLite/HyphenateLite.h>即可(HDMessage.h 用xcode全局搜索不到,需要到sdk里面去找)。
 
2、很多同学在首次“导入SDK”或“更新SDK重新导入SDK”后,Xcode运行报以下的error:
dyld: Library not loaded: @rpath/Hyphenate.framework/Hyphenate
  Referenced from: /Users/shenchong/Library/Developer/CoreSimulator/Devices/C768FE68-6E79-40C8-8AD1-FFFC434D51A9/data/Containers/Bundle/Application/41EA9A48-4DD5-4AA4-AB3F-139CFE036532/CallBackTest.app/CallBackTest
  Reason: image not found
       这个原因是工程未加载到 framework,正确的处理方式是在TARGETS → General → Embedded Binaries 中添加HelpDesk.framework和Hyphenate.framework依赖库,且 Linked Frameworks and Libraries中依赖库的Status必须是Required。
1访客端_image_not_found.png

 
3、运行之后,自变量为nil,这就有可能是因为上面所说的依赖库的status设置为了Optional,需要改成Required。
2访客端自变量为nil.png

 
4、打包后上传到appstore报错
(1)ERROR ITMS-90535: "Unexpected CFBundleExecutable Key. The bundle at 'Payload/toy.app/HelpDeskUIResource.bundle' does not contain a bundle executable. If this bundle intentionally does not contain an executable, consider removing the CFBundleExecutable key from its Info.plist and using a CFBundlePackageType of BNDL. If this bundle is part of a third-party framework, consider contacting the developer of the framework for an update to address this issue."
方法:把HelpDeskUIResource.bundle里的Info.plist删掉就即可。
3访客端打包90535.png

(2)This bundle is invalid. The value for key CFBundleShortVersionString ‘1.2.2.1’in the Info.plist must be a period-separated list of at most three non-negative integers. 
4访客端打包90060.png

把sdk里的plist文件的版本号改成3位数即可
5访客端打包1.2_.2_.1位置_.png

(3)Invalid Mach-O Format.The Mach-O in bundle “SMYG.app/Frameworks/Hyphenate.framework” isn’t consistent with the Mach-O in the main bundle.The main bundle Mach-O contains armv7(bitcode) and arm64(bitcode),while the nested bundle Mach-O contains armv7(machine code) and arm64(machine code).Verify that all of the targets for a platform have a consistent value for the ENABLE_BITCODE build setting.”
6访客端打包90636.png

将TARGETS-Build Settings-Enable Bitcode改为NO
7访客端打包bitcode改为NO.png

(4)还有很多同学打包失败,看不出什么原因
8访客端打包需剔除.png

那么可以先看看有没有按照文档剔除x86_64 i386两个平台
文档链接:http://docs.easemob.com/cs/300visitoraccess/iossdk#%E4%B8%8A%E4%BC%A0appstore%E4%BB%A5%E5%8F%8A%E6%89%93%E5%8C%85ipa%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9
 
5、那么剔除x86_64 i386时会遇到can't open input file的错误,这是因为cd的路径错误,把“/HelpDesk.framework”删掉。是cd到framework所在的路径,不是cd到framework
9访客端剔除cd错误.png

 
6、下图中的报错,需要在pch文件添加如下判断,环信的和自己的头文件都引入到#ifdef内部
   #ifdef __OBJC__
   #endif
10pch加判断1.png

11pch加判断2.png

 
7、集成环信HelpDeskUI的时候,由于HelpDeskUI内部使用了第三方库,如果与开发者第三方库产生冲突,可将HelpDeskUI中冲突的第三方库删除,如果第三方库中的接口有升级的部分,请酌情进行升级。
12第三方库冲突.png

 
8、集成1.2.2版本demo中的HelpDeskUI,Masonry报错:Passing ‘CGFloat’(aka ‘double’) to parameter of incompatible type ‘__strong id’
需要在pch中添加#define MAS_SHORTHAND_GLOBALS
13访客端Masonry报错.png
继续阅读 »
注意:向自己工程中添加环信SDK和UI文件的时候,不要直接向xcode中拖拽添加,先把SDK和UI文件粘贴到自己工程的finder目录中,再从finder中向xcode中拖拽添加,避免出现找不到SDK或者UI文件的情况。
 
1、如果工程中引入的是不带音视频版本的sdk:HyphenateLite.framework和HelpDeskLite.framework,#import <HelpDeskLite/HelpDeskLite.h> 头文件报错的话,那么把HDMessage.h中的#import <Hyphenate/Hyphenate.h>改成#import <HyphenateLite/HyphenateLite.h>即可(HDMessage.h 用xcode全局搜索不到,需要到sdk里面去找)。
 
2、很多同学在首次“导入SDK”或“更新SDK重新导入SDK”后,Xcode运行报以下的error:
dyld: Library not loaded: @rpath/Hyphenate.framework/Hyphenate
  Referenced from: /Users/shenchong/Library/Developer/CoreSimulator/Devices/C768FE68-6E79-40C8-8AD1-FFFC434D51A9/data/Containers/Bundle/Application/41EA9A48-4DD5-4AA4-AB3F-139CFE036532/CallBackTest.app/CallBackTest
  Reason: image not found
       这个原因是工程未加载到 framework,正确的处理方式是在TARGETS → General → Embedded Binaries 中添加HelpDesk.framework和Hyphenate.framework依赖库,且 Linked Frameworks and Libraries中依赖库的Status必须是Required。
1访客端_image_not_found.png

 
3、运行之后,自变量为nil,这就有可能是因为上面所说的依赖库的status设置为了Optional,需要改成Required。
2访客端自变量为nil.png

 
4、打包后上传到appstore报错
(1)ERROR ITMS-90535: "Unexpected CFBundleExecutable Key. The bundle at 'Payload/toy.app/HelpDeskUIResource.bundle' does not contain a bundle executable. If this bundle intentionally does not contain an executable, consider removing the CFBundleExecutable key from its Info.plist and using a CFBundlePackageType of BNDL. If this bundle is part of a third-party framework, consider contacting the developer of the framework for an update to address this issue."
方法:把HelpDeskUIResource.bundle里的Info.plist删掉就即可。
3访客端打包90535.png

(2)This bundle is invalid. The value for key CFBundleShortVersionString ‘1.2.2.1’in the Info.plist must be a period-separated list of at most three non-negative integers. 
4访客端打包90060.png

把sdk里的plist文件的版本号改成3位数即可
5访客端打包1.2_.2_.1位置_.png

(3)Invalid Mach-O Format.The Mach-O in bundle “SMYG.app/Frameworks/Hyphenate.framework” isn’t consistent with the Mach-O in the main bundle.The main bundle Mach-O contains armv7(bitcode) and arm64(bitcode),while the nested bundle Mach-O contains armv7(machine code) and arm64(machine code).Verify that all of the targets for a platform have a consistent value for the ENABLE_BITCODE build setting.”
6访客端打包90636.png

将TARGETS-Build Settings-Enable Bitcode改为NO
7访客端打包bitcode改为NO.png

(4)还有很多同学打包失败,看不出什么原因
8访客端打包需剔除.png

那么可以先看看有没有按照文档剔除x86_64 i386两个平台
文档链接:http://docs.easemob.com/cs/300visitoraccess/iossdk#%E4%B8%8A%E4%BC%A0appstore%E4%BB%A5%E5%8F%8A%E6%89%93%E5%8C%85ipa%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9
 
5、那么剔除x86_64 i386时会遇到can't open input file的错误,这是因为cd的路径错误,把“/HelpDesk.framework”删掉。是cd到framework所在的路径,不是cd到framework
9访客端剔除cd错误.png

 
6、下图中的报错,需要在pch文件添加如下判断,环信的和自己的头文件都引入到#ifdef内部
   #ifdef __OBJC__
   #endif
10pch加判断1.png

11pch加判断2.png

 
7、集成环信HelpDeskUI的时候,由于HelpDeskUI内部使用了第三方库,如果与开发者第三方库产生冲突,可将HelpDeskUI中冲突的第三方库删除,如果第三方库中的接口有升级的部分,请酌情进行升级。
12第三方库冲突.png

 
8、集成1.2.2版本demo中的HelpDeskUI,Masonry报错:Passing ‘CGFloat’(aka ‘double’) to parameter of incompatible type ‘__strong id’
需要在pch中添加#define MAS_SHORTHAND_GLOBALS
13访客端Masonry报错.png
收起阅读 »

(客服云)iOS访客端怎么判断会话是否结束

1、联系商务开通【会话创建、接起、结束】功能
2、在 cmdMessagesDidReceive 方法中做如下判断,返回ServiceSessionClosedEvent,则是会话已结束,如图:
判断会话是否结束.png

代码:
if ([message.body isKindOfClass:[EMCmdMessageBody class]]) {
EMCmdMessageBody *_bb = (EMCmdMessageBody *)message.body;
if ([_bb.action isEqualToString:@"ServiceSessionCreatedEvent"]) {
NSLog(@"hhhhh--Creat");
} else if ([_bb.action isEqualToString:@"ServiceSessionOpenedEvent"]) {
NSLog(@"hhhhh--Open");
} else if ([_bb.action isEqualToString:@"ServiceSessionClosedEvent"]) {
NSLog(@"hhhhh--Close");
}
}
 
继续阅读 »
1、联系商务开通【会话创建、接起、结束】功能
2、在 cmdMessagesDidReceive 方法中做如下判断,返回ServiceSessionClosedEvent,则是会话已结束,如图:
判断会话是否结束.png

代码:
if ([message.body isKindOfClass:[EMCmdMessageBody class]]) {
EMCmdMessageBody *_bb = (EMCmdMessageBody *)message.body;
if ([_bb.action isEqualToString:@"ServiceSessionCreatedEvent"]) {
NSLog(@"hhhhh--Creat");
} else if ([_bb.action isEqualToString:@"ServiceSessionOpenedEvent"]) {
NSLog(@"hhhhh--Open");
} else if ([_bb.action isEqualToString:@"ServiceSessionClosedEvent"]) {
NSLog(@"hhhhh--Close");
}
}
  收起阅读 »

(客服云)iOS访客端点击订单消息

1、在HDMessageCell.m 的
- (void)_setupSubviewsWithType:(EMMessageBodyType)messageType
                      isSender:(BOOL)isSender
                         model:(id<HDIMessageModel>)model
方法中给orderBgView 添加手势
点击订单消息1.png
UITapGestureRecognizer *tapRecognizer3 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(orderImageViewTapAction:)];
[_bubbleView.orderBgView addGestureRecognizer:tapRecognizer3];
 
2、在HDMessageCell.m 中添加手势点击事件
点击订单消息2.png
- (void)orderImageViewTapAction:(UITapGestureRecognizer *)tapRecognizer
{
if ([_delegate respondsToSelector:@selector(messageCellSelected:)]) {
[_delegate messageCellSelected:_model];
}
}
 
3、在HDMessageViewController的 
   - (void)messageCellSelected:(id<HDIMessageModel>)model 方法中添加订单消息的判断
点击订单消息3.png
代码:
if ([HDMessageHelper getMessageExtType:model.message] == HDExtOrderMsg) {
// 订单消息携带的扩展
NSDictionary *dic = model.message.ext;
NSLog(@"点击了订单消息");
}
继续阅读 »
1、在HDMessageCell.m 的
- (void)_setupSubviewsWithType:(EMMessageBodyType)messageType
                      isSender:(BOOL)isSender
                         model:(id<HDIMessageModel>)model
方法中给orderBgView 添加手势
点击订单消息1.png
UITapGestureRecognizer *tapRecognizer3 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(orderImageViewTapAction:)];
[_bubbleView.orderBgView addGestureRecognizer:tapRecognizer3];
 
2、在HDMessageCell.m 中添加手势点击事件
点击订单消息2.png
- (void)orderImageViewTapAction:(UITapGestureRecognizer *)tapRecognizer
{
if ([_delegate respondsToSelector:@selector(messageCellSelected:)]) {
[_delegate messageCellSelected:_model];
}
}
 
3、在HDMessageViewController的 
   - (void)messageCellSelected:(id<HDIMessageModel>)model 方法中添加订单消息的判断
点击订单消息3.png
代码:
if ([HDMessageHelper getMessageExtType:model.message] == HDExtOrderMsg) {
// 订单消息携带的扩展
NSDictionary *dic = model.message.ext;
NSLog(@"点击了订单消息");
}
收起阅读 »

(客服云)IOS访客端设置访客昵称头像

1.在HDMessageViewController.h 中添加访客昵称、头像的属性
1.png
// 访客昵称
@property (nonatomic, strong) NSString *sendName;
// 访客头像(url)
@property (nonatomic, strong) NSString *sendAvatarUrl;
// 访客头像(本地图片)
@property (nonatomic, strong) UIImage *sendAvatarImage;
 
2.在HDMessageViewController.m   - (NSArray *)formatMessages:(NSArray *)messages 方法中添加判断
2.png
if (isSender) {
if (self.sendName) {
model.nickname = self.sendName;
}
// 加载网络头像
if (self.sendAvatarUrl) {
model.avatarURLPath = self.sendAvatarUrl;
}
// 加载本地头像
if (self.sendAvatarImage) {
model.avatarImage = self.sendAvatarImage;
model.avatarURLPath = nil;
}
}
 
3.在初始化聊天页面的时候,传入访客的昵称、头像即可。
(可选择url或者本地头像图片)
3.png
ctrl.sendName = @"访客昵称";
ctrl.sendAvatarImage = [UIImage imageNamed:@"测试图片"];
// chat.sendAvatarUrl = @"";
继续阅读 »
1.在HDMessageViewController.h 中添加访客昵称、头像的属性
1.png
// 访客昵称
@property (nonatomic, strong) NSString *sendName;
// 访客头像(url)
@property (nonatomic, strong) NSString *sendAvatarUrl;
// 访客头像(本地图片)
@property (nonatomic, strong) UIImage *sendAvatarImage;
 
2.在HDMessageViewController.m   - (NSArray *)formatMessages:(NSArray *)messages 方法中添加判断
2.png
if (isSender) {
if (self.sendName) {
model.nickname = self.sendName;
}
// 加载网络头像
if (self.sendAvatarUrl) {
model.avatarURLPath = self.sendAvatarUrl;
}
// 加载本地头像
if (self.sendAvatarImage) {
model.avatarImage = self.sendAvatarImage;
model.avatarURLPath = nil;
}
}
 
3.在初始化聊天页面的时候,传入访客的昵称、头像即可。
(可选择url或者本地头像图片)
3.png
ctrl.sendName = @"访客昵称";
ctrl.sendAvatarImage = [UIImage imageNamed:@"测试图片"];
// chat.sendAvatarUrl = @"";
收起阅读 »

(客服云)iOS访客端设置客服系统头像

0、在客服系统内 管理员模式--设置--企业基本信息 处上传企业logo
   在 管理员模式--设置--系统开关--系统开关--访客端显示客服昵称 处打开开关
客服系统头像1.png

客服系统头像2.png


1、在HDIMessageModel.h 中添加客服系统头像url属性
客服系统头像3.png
@property (strong, nonatomic) NSString *officialAccountURL;
 
2、在HDMessageModel.h 中添加客服系统头像url属性
客服系统头像4.png
@property (strong, nonatomic) NSString *officialAccountURL;
 
3、在HDMessageModel.m类  - (instancetype)initWitMessage:(HDMessage *)message方法中添加  
客服系统头像5.png
NSDictionary *officialAccount = [NSDictionary dictionary];
if ([weichat objectForKey:@"official_account"]) {
officialAccount = [weichat valueForKey:@"official_account"];
if ([officialAccount objectForKey:@"img"]) {
self.officialAccountURL = [[@"https:" stringByAppendingString:[officialAccount objectForKey:@"img"]] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
}
}
 
4、在HDBaseMessageCell.m类  - (void)setModel:(id<HDIMessageModel>)model方法中 修改代码 
(“系统消息”改成您自己客服系统中设置的调度员昵称)
客服系统头像6.png
if (model.avatarURLPath) {
if (model.nickname) {
if ([model.nickname isEqualToString:@"系统消息"]) {
if (model.officialAccountURL) {
[self.avatarView sd_setImageWithURL:[NSURL URLWithString:model.officialAccountURL] placeholderImage:model.avatarImage];
}
} else {
[self.avatarView sd_setImageWithURL:[NSURL URLWithString:model.avatarURLPath] placeholderImage:model.avatarImage];
}
}

} else {
self.avatarView.image = model.avatarImage;
}
继续阅读 »
0、在客服系统内 管理员模式--设置--企业基本信息 处上传企业logo
   在 管理员模式--设置--系统开关--系统开关--访客端显示客服昵称 处打开开关
客服系统头像1.png

客服系统头像2.png


1、在HDIMessageModel.h 中添加客服系统头像url属性
客服系统头像3.png
@property (strong, nonatomic) NSString *officialAccountURL;
 
2、在HDMessageModel.h 中添加客服系统头像url属性
客服系统头像4.png
@property (strong, nonatomic) NSString *officialAccountURL;
 
3、在HDMessageModel.m类  - (instancetype)initWitMessage:(HDMessage *)message方法中添加  
客服系统头像5.png
NSDictionary *officialAccount = [NSDictionary dictionary];
if ([weichat objectForKey:@"official_account"]) {
officialAccount = [weichat valueForKey:@"official_account"];
if ([officialAccount objectForKey:@"img"]) {
self.officialAccountURL = [[@"https:" stringByAppendingString:[officialAccount objectForKey:@"img"]] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
}
}
 
4、在HDBaseMessageCell.m类  - (void)setModel:(id<HDIMessageModel>)model方法中 修改代码 
(“系统消息”改成您自己客服系统中设置的调度员昵称)
客服系统头像6.png
if (model.avatarURLPath) {
if (model.nickname) {
if ([model.nickname isEqualToString:@"系统消息"]) {
if (model.officialAccountURL) {
[self.avatarView sd_setImageWithURL:[NSURL URLWithString:model.officialAccountURL] placeholderImage:model.avatarImage];
}
} else {
[self.avatarView sd_setImageWithURL:[NSURL URLWithString:model.avatarURLPath] placeholderImage:model.avatarImage];
}
}

} else {
self.avatarView.image = model.avatarImage;
}
收起阅读 »