开源项目|使用go语言搭建高效的环信 IM Rest接口(附源码)

项目背景

环信 Server SDK 是对环信 IM REST API 的封装, 可以节省服务器端开发者对接环信 API 的时间,只需要配置自己的 App Key 相关信息即可使用。

环信目前提供java和PHP版本的Server SDK,此项目使用go语言对环信 IM REST API 进行封装,对官方版本进行了补充,有需要的开发者可以直接通过以下地址获取源码。

项目地址

  • https://github.com/xiaofengin/easemob-go
  • 如果有任何问题可以通过 issue 的形式反馈,作者会积极更新该仓库

前提条件

  • go语言环境

  • 有效的环信即时通讯 IM 开发者账号和 AppKey、ClientID、ClientSecret、DomainURL
    登录 环信管理后台 到“应用列表” → 点击“查看”即可获取到 App Key、Client ID、ClientSecret,到"即时通讯" → 点击"服务概览"获取到 “Rest api” 的服务器域名。

实现方法

  • go.mod 文件引入: github.com/xiaofengin/easemob-go

AppKey、ClientID、ClientSecret在下图中获取

在这里插入图片描述

DomainURL在下图中获取
在这里插入图片描述

初始化IM SDK

package mainimport ("context""fmt"IMSDK "github.com/xiaofengin/easemob-go"
)func main() {client, err := IMSDK.New("appkey","clientId","clientSecret","domainURL")if err != nil {return}
}

批量注册两个用户

package mainimport ("context""fmt"IMSDK "github.com/xiaofengin/easemob-go"
)func main() {client, err := IMSDK.New("appkey","clientId","clientSecret","domainURL")if err != nil {return}user1 := UserRegisterParam{Username: "userID_1",Password: "1",}user2 := UserRegisterParam{Username: "userID_2",Password: "1",}users := []UserRegisterParam{user1, user2}ret, err := client.UserRegister(context.Background(), &users)if err != nil {return}fmt.Printf("数据的值:%v\n", ret.Entities)
}

发送一个单聊消息

  • tos 放接收方环信ID(多个)m := CreateTextMsg("hello word", tos) 创建一个消息体
  • 默认发送方ID 是 admin,如果要修改的话 m.From = "指定ID"
  • 也可以给消息添加扩展字段 m.Ext = map[string]interface{}{"key1": "value1", "key2": "value2"}
package mainimport ("context""fmt"IMSDK "github.com/xiaofengin/easemob-go"
)func main() {client, err := IMSDK.New("appkey","clientId","clientSecret","domainURL")if err != nil {return}var tos []stringtos = append(tos, "环信用户ID")m := CreateTextMsg("hello word", tos)//m.From = "指定ID"//m.Ext = map[string]interface{}{"key1": "value1", "key2": "value2"}ret, err := client.SendChatMessage(context.Background(), m)if err != nil {return}fmt.Printf("数据的值:%v\n", ret.Data)
}

获取用户token

  • 通过用户ID和密码获取用户token,也可以通过用户ID获取用户token
package mainimport ("context""fmt"IMSDK "github.com/xiaofengin/easemob-go"
)func main() {client, err := IMSDK.New("appkey","clientId","clientSecret","domainURL")if err != nil {return}//通过用户 ID 和密码获取用户 token//data := TokenParam{//	GrantType: "password",//	Username:  "userID",//	Password:  "1",//	Ttl:       "1024000",//}//通过用户 ID 获取用户 tokendata := TokenParam{GrantType:      "inherit",Username:       "userID",AutoCreateUser: true,Ttl:            "1024000",}ret, err := client.GetUserToken(context.Background(), &data)if err != nil {return}fmt.Printf("数据的值:%v\n", ret.AccessToken)
}

SDK功能清单

功能地址
user 用户信息模块https://github.com/xiaofengin/easemob-go/blob/main/user_test.go
push 推送信息模块https://github.com/xiaofengin/easemob-go/blob/main/push_test.go
message 消息模块https://github.com/xiaofengin/easemob-go/blob/main/message_test.go
contact 好友模块https://github.com/xiaofengin/easemob-go/blob/main/contact_test.go
chatroom 聊天室模块https://github.com/xiaofengin/easemob-go/blob/main/chatroom_test.go
chatgroup 群组模块https://github.com/xiaofengin/easemob-go/blob/main/chatgroup_test.go

注意

测试代码中 appkey clientId clientSecret 这三个参数我是写到环境变量里面,
如果 你没有把参数写到环境变量里面,可以直接写死该参数

在这里插入图片描述

参考文档:

注册环信IM:https://console.easemob.com/user/register

环信SDK下载:https://www.easemob.com/download/im

GO版本Server SDK: https://github.com/xiaofengin/easemob-go

IMGeek社区支持:https://www.imgeek.net

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/819879.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在比特币中,1 sat 是多少美元?

普通人绝对想不到,比特币能在2024年达到这个价值,早知道的话,我当初就是破釜沉舟也得买一个啊。 而在4月19号,也将迎来比特币再次减半。减半并不是说玩家手中的比特币要被突然减去一半,而是在后续的挖矿过程中&#xf…

【Unity】游戏场景添加后处理特效PostProcessing

添加后处理特效PostProcessing 添加雾效果后处理何为后处理?添加后处理特效 添加雾效果 依次点击Window -> Rendering -> Lighting添加Lighting面板。 点击Lighting里面的Environment,找到Other Setting 将Fog选项勾选 更改下方的颜色 调整雾的浓…

【洛谷题解】 CF1734B Bright, Nice, Brilliant

分析 首先,我们先把 a i , 1 a_{i,1} ai,1​ 上方的灯以及它本身都点亮,那么它此时的亮度为 i i i。而由于 a i , 2 a_{i,2} ai,2​ 无法被 a i , 1 a_{i,1} ai,1​ 照到,故它的亮度为 i − 1 i-1 i−1,那么那个缺少的 1 1…

go语言并发编程(五) ——Context

Context(上下文) 前言 Context是go语言中所提供的一种并发控制的解决方案,相比于管道与WaitGroup,Context可以更好的控制子孙协程以及层次更深的协程。Context本身是一个接口,只要我们实现了该接口都可以被称为上下文,context标准库本身也提供了几个实…

移动端web适配方案

以下是移动端适配的多个方案,也可以说说你是怎么做的。 正文 自适应:根据不同的设备屏幕大小来自动调整尺寸、大小 响应式:会随着屏幕的实时变动而自动调整,是一种更强的自适应 为什么要做移动端适配? 目前市面上…

Linux内核与基础命令学习总结

Linux操作系统 Linux操作系统博大精深,其中对线程,IO,文件系统等概念的实现都很有借鉴意义。 ​ 文件系统和VFS 文件系统的inode上面讲过了。VFS主要用于屏蔽底层的不同文件系统,比如接入网络中的nfs文件系统,亦或是w…

如何使用docker-compose安装数据可视化应用JSON Crack并实现远程访问

文章目录 1. 在Linux上使用Docker安装JSONCrack2. 安装Cpolar内网穿透工具3. 配置JSON Crack界面公网地址4. 远程访问 JSONCrack 界面5. 固定 JSONCrack公网地址 JSON Crack 是一款免费的开源数据可视化应用程序,能够将 JSON、YAML、XML、CSV 等数据格式可视化为交互…

SAP SD学习笔记08 - Pre-sales(售前)引合,見積的概念,数据流(完了规则和参照Status),Copy管理,VBKD表的明细

上一章讲了紧急发注,现金贩卖,贩卖传票,明细Category等知识。 SAP SD学习笔记07 - 紧急发注(急单),现金贩卖,贩卖传票Type/ 明细Category 及其Customize-CSDN博客 - 本张继续讲SAP SD模块的流程…

青铜器RDM研发管理平台 upload 任意文件上传漏洞复现

0x01 产品简介 青铜器RDM研发管理平台是集成产品管理、研发部门管理、研发项目管理、研发多项目管理、研发资源管理、研发绩效管理、研发工程管理的集中平台。 0x02 漏洞概述 青铜器RDM研发管理平台 upload 接口存在任意文件上传漏洞,未经身份验证的远程攻击者可通过该漏洞…

【板栗糖GIS】如何给微软拼音输入法加上小鹤双拼

【板栗糖GIS】如何给微软拼音输入法加上小鹤双拼 用过在注册表里新建的方法,结果弄完没有出现小鹤双拼方案,想到了自己写reg表 目录 1. 新建一个txt文件 2. 把.txt的后缀名改成.reg,双击运行 3. 在设置中找到微软输入法-常规 1. 新建一个…

微信预约怎么做_体验便捷的服务

在这个快节奏的时代,时间显得格外珍贵。无论是工作还是生活,我们都渴望能够用最短的时间完成更多的事情。在这样的背景下,微信预约应运而生,成为我们追求高效、便捷生活的新宠。今天,就让我们一起探讨微信预约的魅力&a…

Zabbix触发器函数(取前后差值last)

获取最新值last zabbix触发器方法last用于获取item最新值或者第几个值以及某个时间的哪一个值。 Last (most recent) T value is > N Last (most recent) T value is < N Last (most recent) T value is N Last (most recent) T value is NOT N触发器方法last - 语法 …

网络与 Internet因特网的基本概念

目录 网络Internet &#xff08;互联网或互连网&#xff09;Internet&#xff08;因特网&#xff09;待续、更新中 网络 指将分布在不同地理位置的、相同或不同类型的网络通过网络互连设备&#xff08;中继器、网桥、路由器或网关等&#xff09;相互连接&#xff0c;形成一个范…

相机系列——透视投影:针孔相机模型

作者&#xff1a;木一 引言 上文我们提到&#xff0c;三维相机是对真实世界成像的模拟&#xff0c;为了让三维物体在计算机屏幕上呈现出来的图像符合人眼观察效果&#xff0c;通常采用透视投影方式模拟相机成像&#xff0c;为了简化计算&#xff0c;可以用针孔相机模型来描述…

多线程(54)JMM中的内存屏障

Java内存模型&#xff08;JMM&#xff09;中的内存屏障是一种保证内存可见性、顺序性的底层机制。它们是一组指令&#xff0c;用于在多线程环境中确保内存操作的有序性和可见性。内存屏障主要分为四类&#xff1a;LoadLoad、StoreStore、LoadStore和StoreLoad。 内存屏障的类型…

麒麟服务器操作系统安装HTTP服务

往期好文&#xff1a;麒麟服务器操作系统安装TFTP服务 Hello&#xff0c;大家好啊&#xff01;今天我们将探讨如何在麒麟服务器操作系统上安装和配置HTTP服务&#xff0c;这是任何网络服务或应用的基础。无论你是想建立一个简单的网站&#xff0c;还是需要一个全功能的Web服务器…

CodeMirror使用: 编写一个在线编辑HTML、JS、CSS文件,网页的模板页面-初实现

前言&#xff1a;前几天编写一个UI模板控制的功能&#xff0c;根据上传的前端模板更换跳转入口主题页面&#xff1b;在编写的时候&#xff0c;突发奇想能不能在列表页面进行在线编辑刚刚上传的模板zip压缩包里的页面...于是经过学习研究有了这篇文章&#xff1b;当日记本一样记…

图灵《模仿游戏》论文学习

文章目录 1. 写在最前面2. 核心观点学习2.1 脑图观点记录2.2 经典观点记录 3. 感受4. 碎碎念5. 参考资料 1. 写在最前面 3 月看了一部以图灵为原型拍摄的人物传记类电影《模仿游戏》&#xff0c;里面反复提及到的论文《COMPUTING MACHINERY AND INTELLIGENCE》&#xff0c;引起…

计算机丢失VCRUNTIME140_1.dll处理办法

一、打开 下面连接地址&#xff0c;下载Visual Studio 2015, 2017, 2019, and 2022 https://learn.microsoft.com/en-US/cpp/windows/latest-supported-vc-redist?viewmsvc-170#visual-studio-2015-2017-2019-and-2022 二、下载系统对应的版本 32位系统下载X86 64位系统下载X…

MySQL:锁的分类

文章目录 行级锁Record LockGap LockNext-Key Lock插入意向锁 表级锁表锁元数据锁&#xff08;MDL&#xff09;意向锁AUTO-INC 锁 全局锁 行级锁 Record Lock 记录锁有S锁&#xff08;共享锁/读锁&#xff09;和X锁&#xff08;排他锁/写锁&#xff09;之分&#xff0c;加完S…