虽说微信本来就是个社交工具,但在开发小程序时还是免不了涉及到及时通信的功能。说到及时通信,我脑瓜子第一反应想到了环信im,腾讯im,融云im等等的第三方。今天我们来谈谈环信im。

1.下载小程序demon
先看看环信im的demon能够实现怎么样的大致动能,对环信im来一个初步认识。

2.到环信管理后台注册并创建应用
申请唯一的appkey,替换到上一步下载的demon中,我们就能通过管理后台更加深入,方便是测试环信im的功能。

3.把demon搬到我们自己的小程序当中
从demon中提取sdk、xmldom、striphe.js、WebIM.js和WebIMConfig.js放到自己的小程序的对应位置。
tips: 在app.js应用striphe.js、WebIM.js时,你可能会遇到报错,但是别慌。

原因:xxx标识符已经声明.
那么我们只需要改名或者不要重复声明就可以了。


1.使用环信im的“前期准备”

//引入
require('./utils/strophe.js')
var WebIM = require('./utils/WebIM.js').default
在app.js里添加监听事件
 onOpened: function () {},                  //连接成功回调 onClosed: function () {},                  //连接关闭回调onTextMessage: function ( message ) {var page = that.getRoomPage()console.log(page)if (message) {if (page) {page.receiveMsg(message, 'txt')} else {var chatMsg = that.globalData.chatMsg || []var value = WebIM.parseEmoji(message.data.replace(/\n/mg, ''))var time = WebIM.time()var msgData = {info: {from: message.from,to: message.to},username: message.from,yourname: message.from,msg: {type: 'txt',data: value},style: '',time: time,mid: 'txt' + message.id}chatMsg = wx.getStorageSync(msgData.yourname + message.to) || []var num = wx.getStorageSync(msgData.yourname + message.to + '-num') || 0;wx.setStorage({key: msgData.yourname + message.to + '-num',data: ++ num,success: function () {//console.log('success')}})chatMsg.push(msgData)wx.setStorage({key: msgData.yourname + message.to,data: chatMsg,success: function () {//console.log('success')}})}}},    //收到文本消息onEmojiMessage: function ( message ) {},   //收到表情消息onPictureMessage: function ( message ) {}, //收到图片消息onCmdMessage: function ( message ) {},     //收到命令消息onAudioMessage: function ( message ) {},   //收到音频消息onLocationMessage: function ( message ) {},//收到位置消息onFileMessage: function ( message ) {},    //收到文件消息onCustomMessage: function ( message ) {},  //收到自定义消息onVideoMessage: function (message) { },   //收到视频消息onPresence: function ( message ) {},       //处理“广播”或“发布-订阅”消息,如联系人订阅请求、处理群组、聊天室被踢解散等消息onRoster: function ( message ) {},         //处理好友申请onInviteMessage: function ( message ) {},  //处理群组邀请onOnline: function () {},                  //本机网络连接成功onOffline: function () {},                 //本机网络掉线onError: function ( message ) {},          //失败回调onBlacklistUpdate: function (list) {       //黑名单变动// 查询黑名单,将好友拉黑,将好友从黑名单移除都会回调这个函数,list则是黑名单现有的所有好友信息console.log(list);},onRecallMessage: function(message){},      //收到撤回消息回调onReceivedMessage: function(message){},    //收到消息送达服务器回执onDeliveredMessage: function(message){},   //收到消息送达客户端回执onReadMessage: function(message){},        //收到消息已读回执onCreateGroup: function(message){},        //创建群组成功回执(需调用createGroupNew)onMutedMessage: function(message){},       //如果用户在A群组被禁言,在A群发消息会走这个回调并且消息不会传递给群其它成员onChannelMessage: function(message){}      //收到整个会话已读的回执,在对方发送channel ack时会在这个回调里收到消息

2.环信账号登录/注册

var WebIM = require('./utils/WebIM.js').default// 登录环信imWebIM.conn.open({apiUrl: WebIM.config.apiURL,user: 'Peach_Eiton', //环信用户idpwd: '123456', //环信用户密码appKey: WebIM.config.appkey,success: function () {// 登陆成功的话调用console.log('Siccess登录环信im成功~!')},failure: function () {// 登陆失败的话调用console.log('Failure登录环信im失败~!')},});// 如若没有账号的话,可以先注册
var options = {apiUrl: WebIM.config.apiURL,username: that.data.username, // 环信用户名password: that.data.password, // 环信用户密码nickname: '',appKey: WebIM.config.appkey,success: function(res) {if(res.statusCode == '200') {wx.showToast({title: '注册成功,正在登录',icon: 'success',duration: 1500,success: function() {var data = {apiUrl: WebIM.config.apiURL,user: that.data.username,pwd: that.data.password,grant_type: 'password',appKey: WebIM.config.appkey}setTimeout(function(){WebIM.conn.open(data) //登录},1000)}});   }    },error: function(res) {if(res.statusCode !== '200') {wx.showModal({title: '用户名已被占用',showCancel: false,confirmText: 'OK'})}}}WebIM.utils.registerUser(options)

3.发送消息

sendEvent(e) {console.log('发送信息:', this.data.inputValue)let that = thislet id = WebIM.conn.getUniqueId(); // 生成本地消息idlet msg = new WebIM.message('txt', id); // 创建文本消息console.log('msg--', msg)msg.set({msg: that.data.inputValue, // 消息内容to: that.data.toWebIM, // 接收消息对象(用户id)chatType: 'singleChat', // 设置为单聊ext: {}, //扩展消息success: function (id, serverMsgId) {console.log('send private text Success', );that.setData({inputValue: '',})let msgData = {info:{from: wx.getStorageSync('webIMuserId'),to: that.data.toWebIM}}},fail: function (e) {// 失败原因:// e.type === '603' 被拉黑// e.type === '605' 群组不存在// e.type === '602' 不在群组或聊天室中// e.type === '504' 撤回消息时超出撤回时间// e.type === '505' 未开通消息撤回// e.type === '506' 没有在群组或聊天室白名单// e.type === '501' 消息包含敏感词// e.type === '502' 被设置的自定义拦截捕获// e.type === '503' 未知错误console.log("Send private text error");}});WebIM.conn.send(msg.body);console.log('msg---', msg)var value = WebIM.parseEmoji(msg.value.replace(/\n/mg, ''))var time = WebIM.time()var msgData = {info: {from: msg.from,to: msg.to},username: '',yourname: msg.from,msg: {type: msg.type,data: value,url: msg.url},style: '',time: time,mid: msg.type + msg.id}console.log('Audio Audio msgData: ', msgData);if (msg.from == that.data.yourname) {msgData.style = ''msgData.username = msg.from} else {msgData.style = 'self'msgData.username = msg.to}//console.log(msgData, that.data.chatMsg, that.data)that.data.chatMsg.push(msgData)wx.setStorage({key: that.data.toWebIM + wx.getStorageSync('webIMuserId'),data: that.data.chatMsg,success: function () {if (msg.type == 'audio')return;//console.log('success', that.data)that.setData({chatMsg: that.data.chatMsg,})console.log('chatMsg!!~~',that.data.chatMsg)setTimeout(function () {that.setData({toView: that.data.chatMsg[that.data.chatMsg.length - 1].mid})}, 100)}})},

3.获取历史消息
通常我们会把两天记录存放在本地缓存中,一般以 用户名和好友名 作为key来缓存聊天记录。

【小程序】微信小程序集成环信im相关推荐

  1. 微信小程序----微信小程序浏览pdf文件

    微信小程序----微信小程序浏览pdf文件 说明:通过wx.downloadFile,wx.openDocumen来实现打开pdf文件.只需在js操作即可. HTTP.Config.Request(' ...

  2. 微信小程序—微信小程序端支付代码

    只有微信小程序端的代码,如下 Page({data: {},onLoad: function (options) {// 页面初始化 options为页面跳转所带来的参数var that = this ...

  3. 小程序 | 微信小程序实现商品分类列表

    小程序 | 微信小程序实现商品分类列表 一.效果展示 二.代码实现 <!-- wxml --> <view class="container"> <! ...

  4. 生鲜小程序 微信小程序怎么制作 临沂修齐网络专业制作微信小程序

    生鲜小程序 微信小程序怎么制作 临沂修齐网络专业制作微信小程序 生鲜小程序开发功能介绍: 1.产品展示:通过扫码或者搜索小程序,用户可以看到不同品种的新鲜蔬菜.水果以及肉类. 2.定时收货:买家可以预 ...

  5. 小程序 | 微信小程序中使用位置API打开地图

    小程序 | 微信小程序中使用位置API打开地图 一.效果展示 二.代码实现 使用微信内置地图查看位置,调用wx.openLocationAPI,具体内容可以查看微信官方文档. // js let In ...

  6. 小程序 | 微信小程序实现循环嵌套数据选择

    小程序 | 微信小程序实现循环嵌套数据选择 一.效果展示 二.代码实现 在.wxml文件中,有时从后台传来的数据可能会出现数组嵌套数组的情况,需要利用wx:for嵌套实现数据的展示.这时,外层循环正常 ...

  7. 小程序--微信小程序使用阿里巴巴矢量库图标

    小程序–微信小程序使用阿里巴巴矢量库图标 2020年4月20日 阿里巴巴矢量库 1.导图 1.1下载图标项目 注:项目默认引用名是iconfont,我这里改成了font,所以我引用的第一个class是 ...

  8. python开发微信小程序-微信小程序开发:python+sanic 实现小程序登录注册

    开发微信小程序时,接入小程序的授权登录可以快速实现用户注册登录的步骤,是快速建立用户体系的重要一步.这篇文章将介绍 python + sanic + 微信小程序实现用户快速注册登录全栈方案. 微信小程 ...

  9. 没学后端也能开发小程序——微信小程序云开发的介绍知识

    微信小程序云开发的介绍知识 云开发模式 产品经理-->前端开发-->上线 云开发 传统开发 效率 只关心业务逻辑,效率高 需要关注非业务逻辑,效率低 成本 按需付费,有免费额度 前期需要预 ...

  10. 用php制作微信小程序,微信小程序 自己制作小组件

    这篇文章主要介绍了微信小程序 自己制作小组件实例详解的相关资料,自己制作小组件在项目中应用,需要的朋友可以参考下 微信小程序 制作小组件 对于我们日常中一些公共的东西可以封装成组件,然后在各个页面使用 ...

最新文章

  1. java内存数据管理
  2. 如何使用Cisco命令阻止访问特定网站
  3. SQL Server 20082005维护计划对比
  4. 循环录(输)入 java 课的学生成绩(5个学生),统计分数大于等于 80 分的学生
  5. 修改mysql编码方式
  6. linux的文件系统架构
  7. c语言编程和PS,求高人剖析下这道C语言编程题(PS:越详细越好)
  8. Angular / RxJs我应该何时退订`Subscription`
  9. vba odbc 3704 mysql_[求助]ado对象调用存储过程运行时错误3704
  10. MySQL日期 专题
  11. Qt Design Studio组态软件简介及源码下载
  12. 数学建模——什么是数学建模
  13. android imagebutton 动画,android – ImageButton Icon Tint基于State
  14. “声波识别”可用于购物
  15. 最好用的 网络神偷V10.7
  16. 八进制和十六进制转二进制
  17. ubuntu 用apt安装预编译的preempt 实时操作系统内核
  18. 如何录屏制作动态图片,并在markdown中显示
  19. ABAP/4 编辑器 quot;插入quot; 命令,表TSE05
  20. 神经网络低比特量化——LSQ

热门文章

  1. 传国宝玺 第三部 巴山藏宝洞 第三十四章 千魂魈
  2. qbo head board debug
  3. 温故而知新(一)Halcon 画线,虚线,圆,矩形
  4. 什么是SEO?搜索引擎优化是什么意思?
  5. 图像处理中的傅里叶变换
  6. C/C++ 函数(有序数组插入)
  7. 开源的 IM 项目 Sealtalk
  8. db2 reorg到底需要多少表空间
  9. Everything不显示.lnk文件
  10. c#dataview遍历_c# – 列出DataView