聊天app开发im用哪家sdk好选择哪家im sdk比较好?


这几天看到微信团队推出了一个名为 Donut 的小程序原生语法开发移动应用框架,通俗的讲就是将微信小程序的能力开放给其他的企业,第三方的 App 也能像微信一样运行小程序了。
其实不止微信,面对潜力越来越大的 B 端市场,阿里早期就开放了这样产品——mPaas,只不过阿里没有做太多的宣传推广,再加上并没有兼容市面中占比和使用范围最大的微信小程序,所以一直处于不温不火的状态。
今天就主要对比分析下目前市面上这类产品的技术特点及优劣。
目前这类产品有一个统一的技术名称:小程序容器技术。
小程序容器顾名思义,是一个承载小程序的运行环境,可主动干预并进行功能扩展,达到丰富能力、优化性能、提升体验的目的。
目前我已知的技术产品包括:mPaas、FinClip、uniSDK 以及上周微信团队才推出的 Donut。下面我们就一一初略讲下各自的特点。
1、mPaas
mPaaS是源于支付宝 App 的移动开发平台,为移动开发、测试、运营及运维提供云到端的一站式解决方案,能有效降低技术门槛、减少研发成本、提升开发效率,协助企业快速搭建稳定高质量的移动 App。
mPaaS 提供了包括 App 开发、H5 开发、小程序开发的能力,只要按照其文档可以开发 App,而且可以在其开发的 App 上跑 H5、也可跑基于支付宝小程序标准开发的的小程序。
由于行业巨头之间互不对眼,目前 mPaas 仅支持阿里生态的小程序,不能直接兼容例如微信、百度、字节等其他生态平台的小程序。
2、FinClip
FinClip是一款小程序容器,不论是移动 App,还是电脑、电视、车载主机等设备,在集成 FinClip SDK 之后,都能快速获得运行小程序的能力。
提供小程序 SDK 和小程序管理后台,开发者可以将已有的小程序迁移部署在自有 App 中,从而获得足够灵活的小程序开发与管理体验。
FinClip 兼容微信小程序语法,提供全套的的小程序开发管理套件,开发者不需要学习新的语法和框架,使用 FinClip IDE、小程序管理后台、小程序开发文档、FinClip App就能低成本高质量地完成从开发测试,到预览部署的全部工作。
3、Donut
Donut多端框架是支持使用小程序原生语法开发移动应用的框架,开发者可以一次编码,分别编译为小程序和 Android 以及 iOS 应用,实现多端开发。
基于该框架,开发者可以将小程序构建成可独立运行的移动应用,也可以将小程序构建成运行于原生应用中的业务模块。该框架还支持条件编译,开发者可灵活按需构建多端应用模块,可更好地满足企业在不同业务场景下搭建移动应用的需求。
4、uniSDK
Uni-app小程序 SDK,是为原生 App 打造的可运行基于 uni-app 开发的小程序前端项目的框架,从而帮助原生 App 快速获取小程序的能力。uni 小程序 SDK 是原生SDK,提供 Android 版本 和 iOS 版本,需要在原生工程中集成,然后即可运行用uni-app框架开发的小程序前端项目。
Unisdk是 uni-app 小程序生态中的一部分,开发者 App 集成了该 SDK 之后,就可以在自有 App 上面跑起来利用 uni-app 开发的小程序。
1、各自的优势
mPaas
大而全,App开发、H5开发、小程序开发一应俱全;
技术产品来源于支付宝,背靠蚂蚁金服有大厂背书;
兼容阿里系的小程序,例如支付宝、钉钉、高德、淘宝等;
拥有小程序管理端、云端服务。
FinClip
小而巧,只专注小程序集成,集成SDK后体积增加3M左右,提供小程序全生命周期的管理 ;
提供小程序转 App 服务,能够一定程度解决 App 开发难的问题;
几个产品中唯一支持企业私有化部署的,可进行定制化开发,满足定制化需求;
兼容微信小程序,之前开发者已拥有的微信小程序,可无缝迁移至 FinClip;
多端支持:iOS、Android、Windows、macOS、Linux,国产信创、车载操作系统。
Donut
微信的亲儿子,对微信小程序兼容度有其他厂商无可比拟的优势(但也不是100%兼容微信小程序);
提供小程序转 App 服务,能够一定程度解决 App 开发难的问题;
体验分析支持自动接入功能,无需修改代码即可对应用中的所有元素进行埋点;
提供丰富的登录方法:微信登录、苹果登录、验证码登录等。
uniSDK
2、各自的不足
mPaas
小程序管理略简单,没有小程序全生命周期的管理;
App 集成其 SDK 之后,体积会扩大 30M 左右;
不兼容微信小程序,之前微信开发的小程序,需要用支付宝小程序的标准进行重写才可迁移到 mPaaS 上;
目前只支持 iOS 与 Android 集成,不支持其他端。
FinClip
Donut
对小程序的数量、并发数、宽带上限等有比较严格的规定;
目前仅处于 beta 阶段,使用过程有一定 bug 感;
集成后体积增加明显,核心 SDK 500 MB,地图 300 MB;
没有小程序全生命周期的管理;
目前仅支持 iOS 与 Android 集成,不支持其他端。
uniSDK
开源社区,质量由开源者背书,在集成、开发过程当中出现问题,bug解决周期长;
uni 小程序 SDK 仅支持使用 uni-app 开发的小程序,不支持纯 wxml 微信小程序运行;
目前 uni 小程序 SDK 仅支持在原生 App 中集成使用,暂不支持 HBuilderX 打包生成的 App 中集成;
目前只支持 iOS 与 Android 集成,不支持其他端。
以上就是关于几个小程序容器的测评分析结果,可以看出并没有完美的选择,每个产品都有自己的一些优势和不足,选择适合自己的就是最好的。希望能给需要的同学一定的参考,如果你有更好的选择欢迎交流讨论。
作者:Finbird来源:juejin.cn/post/7181301359554068541
initMobile login loginOut sendKeepAlive genFingerPrint
addAccountListener addMessageListener
mobileIM 封装了MobileIMSDK,MobileIMSDK是一套专为移动端开发的原创即时通讯框架:
超轻量级、高度提炼,lib包50KB以内;
完全基于UDP协议实现;
客户端支持iOS、Android、标准Java平台;
服务端提供Mina版和Netty版,方便研究和学习 new;
可与姊妹工程 MobileIMSDK-Web 无缝互通实现网页端聊天或推送等;
可应用于跨设备、跨网络的聊天APP、企业OA、消息推送等各种场景。
初始化,android调用其他接口前需要先调用此接口,退出后再登陆前需要先调用此接口
initMobile({params})
params
appKey:
类型:字符串类型
描述:AppKey字符串
serverIp:
类型:字符串类型
描述:全局设置:服务端IP或域名。如需设置本参数,请在登陆前调用,否则将不起效。
serverPort:
类型:数字类型
描述:全局设置:服务端IP或域名。如需设置本参数,请在登陆前调用,否则将不起效。
mode:
类型:数字类型
描述:框架预设的敏感度模式,重要说明:客户端本模式的设定必须要与服务端的模式设制保持一致否则可能因参数的不一致而导致IM算法的不匹配,进而出现不可预知的问题。
取值范围:
0:KeepAlive心跳问隔为3秒,10秒后未收到服务端心跳反馈即认为连接已断开(相当于连续3 个心跳间隔后仍未收到服务端反馈)
1:KeepAlive心跳问隔为10秒,21秒后未收到服务端心跳反馈即认为连接已断开(相当于连续2 个心跳间隔后仍未收到服务端反馈)
2:KeepAlive心跳问隔为30秒,61秒后未收到服务端心跳反馈即认为连接已断开(相当于连续2 个心跳间隔后仍未收到服务端反馈)
3:KeepAlive心跳问隔为60秒,121秒后未收到服务端心跳反馈即认为连接已断开(相当于连续2 个心跳间隔后仍未收到服务端反馈)
4:KeepAlive心跳问隔为120秒,241秒后未收到服务端心跳反馈即认为连接已断开(相当于连续2 个心跳间隔后仍未收到服务端反馈)
示例代码
var mobileIM = api.require('mobileIM');
mobileIM.initMobile({
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
登陆
login({params}, callback(ret))
params
userId:
类型:字符串类型
描述:提交到服务端的准一id,保证唯一就可以通信,可能是登陆用户名、也可能是任意不重复的id等,具体意义由业务层决定
token:
类型:字符串类型
描述:提交到服务端用于身份鉴别和合法性检查的token,它可能是登陆密码,也可能是通过前置单点登陆接口拿到的token等,具体意义由业务层决定
extra:
类型:字符串类型
描述:(可选项)额外信息字符串。本字段目前为保留字段,供上层应用自行放置需要的内容
callback(ret)
ret:
类型:JSON 对象
内部字段:
{
code:0
//数字类型;结果,0表示成功,否则返回的是错误码
}
示例代码
var mobileIM= api.require('mobileIM');
mobileIM.login({
},function(ret){
console.log(JSON.stringify(ret))
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
退出登陆
loginOut(callback(ret))
callback(ret)
ret:
类型:JSON 对象
内部字段:
{
code:0
//数字类型;结果,0表示成功,否则返回的是错误码
}
示例代码
var mobileIM= api.require('mobileIM');
mobileIM.loginOut(function(ret){
console.log(JSON.stringify(ret))
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
发送Keep Alive心跳包(仅iOS支持)
sendKeepAlive(callback(ret))
callback(ret)
ret:
类型:JSON 对象
内部字段:
{
code:0
//数字类型;结果,0表示成功,否则返回的是错误码
}
示例代码
var mobileIM= api.require('mobileIM');
mobileIM.sendKeepAlive(function(ret){
console.log(JSON.stringify(ret))
});
可用性
iOS系统
可提供的1.0.0及更高版本
发送通用数据方法
sendCommonData({params}, callback(ret))
params
content:
类型:字符串类型
描述:要发送的数据内容
toUserId:
类型:字符串类型
描述:要发送到的目标用户id
qos:
类型:布尔类型
描述:(可选项)是否需要QoS机制支持(仅iOS支持,android固定为true)
默认:fasle
fp:
类型:字符串类型
描述:(可选项)QoS机制中要用到的指纹码(即消息包唯一id),genFingerPrint接口获取
typeu:
类型:数字类型
描述:(可选项)应用层专用字段——用于应用层存放聊天、推送等场景下的消息类型,不需要设置时请填-1即可)
默认:-1
callback(ret)
ret:
类型:JSON 对象
内部字段:
{
code:0
//数字类型;结果,0表示成功,否则返回的是错误码
}
示例代码
var mobileIM= api.require('mobileIM');
mobileIM.sendCommonData({
},function(ret){
console.log(JSON.stringify(ret))
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
获取指纹特征码,目前使用的UUID基本能保证全局唯一,但它有36位长(加上分隔符32+4),目前为了保持框架的算法可读性暂时不进行优化,以后可考虑使用2进制方式或者Protobuffer实现(仅iOS支持)
genFingerPrint(callback(ret))
callback(ret)
ret:
类型:JSON 对象
内部字段:
{
fingerPrint:0
//数字类型;指纹特征码,指纹特征码实际上就是系统的当时时间戳
}
示例代码
var mobileIM= api.require('mobileIM');
mobileIM.genFingerPrint(function(ret){
console.log(JSON.stringify(ret))
});
可用性
iOS系统
可提供的1.0.0及更高版本
账号事件的监听
addAccountListener(callback(ret))
callback(ret)
ret:
类型:JSON 对象
内部字段:
{
eventType: 'onLogin',
//字符串类型;监听的事件类型,取值范围如下:
//onLogin:登陆结果(仅iOS支持,android在login接口返回)
//onLinkClose:与服务端的通信断开,该消息只有在客户端连接服务器成功之后网络异常中断之时触发。导致与与服务端的通信断开的原因有(但不限于):无线网络信号不稳定、WiFi与2G/3G/4G等同开情况下的网络切换、手机系统的省电策略等
loginCode:0,
//数字类型;服务端反馈的登录结果:0 表示登陆成功,否则为服务端自定义的出错代码(按照约定通常为>=1025的数)(仅iOS支持,android在login接口返回)
linkCloseCode:0
//数字类型;本回调参数表示表示连接断开的原因,目前错误码没有太多意义,仅作保留字段,目前通常为-1
}
示例代码
var mobileIM = api.require('mobileIM');
mobileIM.addAccountListener(function(ret) {
console.log(JSON.stringify(ret))
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
消息事件的监听
addMessageListener(callback(ret))
callback(ret)
ret:
类型:JSON 对象
内部字段:
{
eventType: '',
//字符串类型;监听的事件类型,取值范围如下:
//onTransBuffer:收到普通消息
//onError:服务端反馈的出错信息
//messagesLost:消息未送达
//messagesBeReceived:消息已被对方收到,目前,判定消息被对方收到是有两种可能,1:对方确实是在线并且实时收到了,2:对方不在线或者服务端转发过程中出错了,由服务端进行离线存储成功后的反馈(此种情况严格来讲不能算是“已被收到”,但对于应用层来说,离线存储了的消息。原则上就是已送达了的消息:因为用户下次登陆时肯定能通过HTTP协议取到)
code:0,
//数字类型;错误码
msg:'',
//字符串类型;错误信息
fingerPrintOfProtocal:'',//字符串类型;当该消息需要QoS支持时本回调参数为该消息的特征指纹码,否则为空
dwUserid:'',
//字符串类型;消息的发送者id(RainbowCore框架中规定发送者id=“0”即表示是由服务端主动发过的,否则表示的是其它客户端发过来的消息)
dataContent:'', //字符串类型;消息内容
theFingerPrint:'', 字符串类型;已被收到的消息的指纹特征码(唯一ID),应用层可据此ID来找到原先已发生的消息并可在UI是将其标记为”已送达“或”已读“以便提升用户体验
typeu:0,
//数字类型;应用层专用字段——用于应用层存放聊天、推送等场景下的消息类型,此值为-1时表示未定义。MobileIMSDK_X框架中,本字段为保留字段,不参与框架的核心算法,专留用应用层自行定义和使用
messages:[{
//json数组,消息内容
bridge:true,
//布尔类型;是否来自跨服务器的消息,true表示是、否则不是。本字段是为跨服务器或集群准备的。
type:0,
//数字类型;协议类型,本字段为框架专用字段,本字段的使用涉及IM核心层算法的表现,如无必要请避免应用层使用此字段。补充:理论上应用层不参与本字段的定义,可将其视为透明,如需定义应用层的消息类型,请使用 {@link typeu} 字段并配合dataContent一起使用
dataContent:'',//字符串类型;协议数据内容,本字段用于MobileIMSDK_X框架中时,可能会存放一些指令内容。当本字段用于应用层时,由用户自行定义和使用其内容
from:'',
//字符串类型;消息发出方的id,为“-1”表示未设定、为“0”表示来自Server
to:'',
//字符串类型;消息接收方的id,为“-1”表示未设定、为“0”表示发给Server
fp:'',
//字符串类型;用于QoS消息包的质量保证时作为消息的指纹特征码(理论上全局唯一)
QoS:true,
//布尔类型;是否需要进行QoS质量保证
typeu:''
//字符串类型;应用层专用字段——用于应用层存放聊天、推送等场景下的消息类型,此值为-1时表示未定义。MobileIMSDK_X框架中,本字段为保留字段,不参与框架的核心算法,专留用应用层自行定义和使用
}]
}
示例代码
var mobileIM = api.require('mobileIM');
mobileIM.addMessageListener(function(ret) {
console.log(JSON.stringify(ret))
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
错误码常量表
0:一切正常
1:客户端尚未登陆
2:未知错误
3:数据发送失败
4:无效的 {@link Protocal}对象
201:与服务端的连接已断开
202:与服务端的网络连接失败
203:客户端SDK尚未初始化
204:本地网络不可用(未打开)
205:要连接的服务端网络参数未设置
301:客户端尚未登陆,请重新登陆
协议类型
0:由客户端发出 - 协议类型:客户端登陆
1:由客户端发出 - 协议类型:心跳包
2:由客户端发出 - 协议类型:发送通用数据
3:由客户端发出 - 协议类型:客户端退出登陆
4:由客户端发出 - 协议类型:QoS保证机制中的消息应答包(目前只支持客户端间的QoS机制)
5:由客户端发出 - 协议类型:C2S时的回显指令(此指令目前仅用于测试时)
51:由服务端发出 - 协议类型:响应客户端的登陆
52:由服务端发出 - 协议类型:响应客户端的心跳包
53:由服务端发出 - 协议类型:反馈给客户端的错误信息
54:由服务端发出 - 协议类型:反馈回显指令给客户端

我要回帖

更多关于 sdk是啥意思 的文章

 

随机推荐