我们的当前的需求:需要在web中集成聊天功能。我不知道为什么我们只考虑使用别人家的云通信,没有考虑自建聊天功能,那就干脆顺着这个思路看了看腾讯云通信、网易云通信、极光IM、阿里百川、容云通信。
历史上的今天
记得18年做过网易云通信的小程序集成,记忆依旧是那么的清晰,好像昨天的事情。记得18年看到腾讯云通信是10万用户都免费,今天睁大眼睛再看看,免费的版本只支持100用户,简单差太远了。
怎么选?
从品牌实力上来讲,腾讯+阿里。但是腾讯不跟阿里玩,阿里百川社区里阿里的人在谴责、吐槽,还支招使用NGINX隐藏阿里域名。虽然阿里百川免费,但是就冲微信喜欢百川这一条,我们直接Pass掉了阿里。我到是想使用免费的百川,只是想想阿里把我的10年TB店都封掉了,我也Pass掉阿里。
从SDK 上来讲,我觉得网易云算是比较完善的,阿里虽然被Pass掉,但是今天比较的结果来看,本身阿里对于h5、小程序的支持就缺失。腾讯云通信显得比较高傲,爱用不用,demo就这么丑丑的,小程序demo可以说是亮瞎了眼,功能都不齐全。网易云的demo到是比较良心,不过,想想啊,想想啊,看起来比较良心,实际也没有怎么太考虑真实用户怎么去集成与使用。拿网易云通信小程序集成来讲,还得看我之前的版本,官方压根就不是用来集成的,纯粹用来秀。
改良版本:https://github.com/Lancker/NIM_Web_Weapp_Demo
从收费上来讲,阿里是免费的,但是不建议使用!极光好像也是免费的,但是没有来得及尝试demo,我们已经决定使用腾讯云通信了。
腾讯云通信Demo
头一次看到这么奇葩的git仓库,把H5、小程序、iOS、安卓都放一起了。公司克隆下来老是中断,浏览器下载也老是断。最后想了一招,先使用云服务器,将仓库zip包下载到服务器,再用国内云盘的离线下载功能下载,再通过云盘下到本地。
实战第一步:先去腾讯云通信后台创建一个应用
实战第二步:下载sig生成的服务端代码,很多选择。今天尝试的php版本,本来是想使用java版本的,但是时间有限啊。先来看看php版本。
部署效果:
http://imphp.joke.dog/index.php 临时部署的,访问这个页面会生成三上用户sig值,后面登陆用到。类似于一个登陆授权token。
string(308) “eJxNjV1rgzAYRv*LtxvzTTQTB7uQflDX2lqqqwwhpE3sglStxhoZ**8Tt267PYfzPB9GtNo9sOOxbAtFVV8J48kA437EkotCyUyKeoBKNArQj2FVJTllilo1-xc0PKejGhiyATC4xLo1QleyFpRlatxDhBAMcEuvom5kWQwCAyIIWwB-Usmz*E4cGxxEfv-kacDBLJ7426nO3fnbwivz-BB55TVCUReHurvMUvN1H3pbvj73SeK-k9TEnX96ceRit7H6eJ5t2tVhAsE6yYgOhGvfPS4LLvftchqm5kWz4Nn4-AJSVVjS” bool(true) ======string(308) “eJxNjdtOg0AURf9lno09MzBcfCOtSakK0ppeTBNCYIAjwoww9hr-vQTr5XWtrL3P5OVxcZukqfxsdKyPSpA7AuRmwJiJRmOOou2hFp0GdjWJUpjFiY6NNvsXdFkVD6pn1ARg4HKDXqU4KGxFnOR62KOccwbwk*5E26FsesGAcsoMgD*psRbfiW2CTfnvHxY9frrfjP1o4mz2JU5Xp0Cm25G79O2pZ3jV*rBfUvl2lNYpaPNuYdGwdAq-9EK2LiYzaMTcquh2FETmg-KSj5k5r153WY3puHbD*t2JGueZfF0A5KJYdg__” bool(true) ======string(308) “eJxNj9tOg0AQQP*FZyOzCyvWpA8VSC2WNIipqSEhUIY6FSldFlI0-rsbrJfXc*bMZD6Mx2V8mW23h65WqRoaNG4MMC5GTAXWikpCqaHCVoF1NlnTUJFmKrVk8S9oi9d0VJoxG4DDRFjsLPHUkMQ0K9W4jwkhOMBP2qNs6VBrwYEJxi2AP6noDb8TxwaHid97tNM49CN3MS9Pifm8xNgtdg9H387aY1j2eL12EtMN5NynSbxKzHuM74bwfUa3ez3ezdpqk0fei90PwxXfiy7y8kD-yStr9bQgb1PF6yCPplPj8wunDlk9” bool(true)
我直接生成了三个用户的sig值,代码是用腾讯云通信demo代码简单改造而来。php的写法让我有点想吐了。就像好久没有坐公交车。来来来,上代码。
include 'TLSSigAPI.php';
use Tencent\TLSSigAPI;
final class ZuimeIM
{
static private $private_key_string = <<<'EOT'
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgjVKC5YlaxSH8FFeq
Yac++yKIXQ6+edkSQC21+uUQivyhRANCAATtoD5MbgZ+h/O3Rdiu8c3B+BXktZrQ
XRgR39N0k/xzkTOkD5PZZfFCyUVHDjK9PiJ3iNqdE4HebFsiiSJu+xbC
-----END PRIVATE KEY-----
EOT;
static private $public_key_string = <<<'EOT'
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE7aA+TG4Gfofzt0XYrvHNwfgV5LWa
0F0YEd/TdJP8c5EzpA+T2WXxQslFRw4yvT4id4janROB3mxbIokibvsWwg==
-----END PUBLIC KEY-----
EOT;
public function testGenAndVerify($userCode)
{
$api = new TLSSigAPI();
$api->SetAppid(1400209531);//设置在腾讯云申请的appid
$api->SetPrivateKey(self::$private_key_string);//生成usersig需要先设置私钥
$api->SetPublicKey(self::$public_key_string);//校验usersig需要先设置公钥
$sig = $api->genSig($userCode);//生成usersig
$result = $api->verifySig($sig, $userCode, $init_time, $expire_time, $error_msg);//校验usersig
var_dump($sig);
var_dump($result);
}
}
$zuimeIM = new ZuimeIM();
$zuimeIM->testGenAndVerify("test01");
echo "======";
$zuimeIM->testGenAndVerify("test02");
echo "======";
$zuimeIM->testGenAndVerify("test03");
把官方的H5代码传上去(推荐使用filezilla ftp,开源免费好用)!index.html中的代码要调整一下,主要是换一下appid等,非常简单,直接看代码注释就换掉了。不再晒代码!直接看效果吧!
http://imphp.joke.dog/H5/index.html
后记:demo只是跑起来,真正的业务才刚刚开始!不过,至少知道怎么跑起来了!国内云通信还是有不少,但是他们没有真正站在集成的角度思考,坑苦了一般哥们做二次开发!统一云通信将是下一个趋势!
注意:本文中使用到的
http://imphp.joke.dog/index.php
http://imphp.joke.dog/H5/index.html
是临时搭建的,如果点不开的话,就自己再搭一个吧。喜欢玩服务器的,可以加好友!