网易的即时通讯IM功能包含即时通讯与聊天室,官方给出了很详细的开发文档与demo源码。
具体下载地址:http://yunxin.163.com/im-sdk-demo?solutionType=0#solution 点击下载web SDK。
这个sdk里包含了官方做出的NIM_Web_SDK.js和NIM_Web_NIM.js两个文件。源码看不懂,但我大致猜测应该就是把demo里注册的云信账号发送给demo服务器,然后存储本地浏览器的cookie中(不知道有没有存到数据库中)。
下载完成后命令提示符中进入到对应的目录中,执行node app(提示node不是本地命令之类的需要去下载node.JS)如图:
这里我已经在app.js里把端口改成监听9000了。默认是8182
运行http://127.0.0.1:9000/webdemo/im/index.html 即可登录。如图
现在可以注册登录了,但我想要的并不是重新注册这种效果,我想用自己项目中本地的用户数据来登录云信。网上也有将im集成到自己项目中的,但没有关于后端是python的文章供我参考。
首先去到网易云控制台,注册网易云账号后登陆,创建应用获取AppKey和AppSecret。如图:
将demo中的webdemo/im/js/config.js中的 configMap对象 online 属性的appkey改为刚刚获得的自己的appkey
网易云信的各种调试接口地址:https://app.yunxin.163.com/index#/app/imApi/15673161
创建云信账号:https://api.netease.im/nimserver/user/create.action。因为云信账号登录需要user_id和对应token值。所以在用户点击登录时需要去请求这个借口获取token 而user_id是你请求接口时传的数据参数之一,就是你的本地用户u_id.
首先改写demo里的login函数,在webdemo/im/js/login.js中用ajax发送post请求。如图:
浏览器遵守同源策略。要求所有请求的url/ip/port都要来自同一个。所以这里是跨域请求,在服务器端响应需要增加头信息,我的接口都是flask写得,写一个公用函数或者装饰器返回响应时增加就行了,如图:
还需注意的是ajax请求最好不要有自定义headers,不然会产生两次请求,首先options预请求检测服务器返回的是不是正确的信息,然后才是post请求。所以上述中我把contentType直接注释掉了,返回响应头信息中也增加了很多类型。
然后是接口接收post请求及数据。先校验传递的数据即用户信息数据库中是否存在等等(看需求)再去请求创建云信账号的接口,如图:
把requests.get返回的赋值给response。创建云信接口需要在请求头中增加Appkey、Nonce随机字符串(小于128)、CurTime(当前时间的时间戳,字符串类型)及checksum(nonce、curtime、appsecret加起来的sha1加密的16进制结果),各函数如图:
由于参数都正确的话创建云信API只返回两种结果code 200 info:token。。。各种信息和code 414 desc "already register"
所以增加判断code是否为414,是则代表已经创建,从本地数据库获取即可,不是的话200注册成功保存到数据库就行
用户数据模型表增加token字段
最后调试下,登录成功,数据库成功增加im_token字段信息: