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

项目背景

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

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

项目地址

前提条件

  • go语言环境

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

实现方法

AppKey、ClientID、ClientSecret在下图中获取

DomainURL在下图中获取

初始化IM SDK

go 复制代码
package main

import (
	"context"
	"fmt"
	IMSDK "github.com/xiaofengin/easemob-go"
)

func main() {
	client, err := IMSDK.New("appkey",
		"clientId",
		"clientSecret",
		"domainURL")
	if err != nil {
		return
	}
}

批量注册两个用户

go 复制代码
package main

import (
	"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"}
go 复制代码
package main

import (
	"context"
	"fmt"
	IMSDK "github.com/xiaofengin/easemob-go"
)

func main() {
	client, err := IMSDK.New("appkey",
		"clientId",
		"clientSecret",
		"domainURL")
	if err != nil {
		return
	}
	var tos []string
	tos = 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
go 复制代码
package main

import (
	"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 获取用户 token
  data := 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 用户信息模块 github.com/xiaofengin/...
push 推送信息模块 github.com/xiaofengin/...
message 消息模块 github.com/xiaofengin/...
contact 好友模块 github.com/xiaofengin/...
chatroom 聊天室模块 github.com/xiaofengin/...
chatgroup 群组模块 github.com/xiaofengin/...

注意

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

参考文档:

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

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

GO版本Server SDK: github.com/xiaofengin/...

IMGeek社区支持:www.imgeek.net

相关推荐
狂炫冰美式12 分钟前
人均配了AI, 为什么公司还是没变快? 🤔 本质还是分布式系统问题
前端·后端·架构
她的男孩2 小时前
Spring Boot 接 Flowable 工作流:用 3 个注解搭一个请假审批流程
java·后端·架构
爱读源码的大都督2 小时前
Claude Code源码分析(三):为什么系统提示词中需要有tools呢?
前端·人工智能·后端
爱勇宝2 小时前
Claude Code 被曝暗藏“隐形检测”代码:封代理不是最可怕的,可怕的是你根本不知道它在干什么
前端·后端·程序员
ITOM运维行者3 小时前
从零搭建企业级服务器监控体系:踩坑实录与架构设计
前端·后端
用户4099322502123 小时前
Vue状态管理入门第四章:组合式store和SSR风险
前端·vue.js·后端
用户34232323763173 小时前
SPI 通信与高速外设驱动详解
后端
魏祖潇3 小时前
SDD 完整指南——Spec 端打底、Story 端交付、留白区
人工智能·后端
feelmylife594 小时前
消息队列可靠投递与幂等消费 -- 从"消息丢了"到"消息别重复"的完整工程实践
后端
雪隐4 小时前
个人电脑玩AI-10让5060 Ti给你打工——部署 Odysseus:终于有个能打的"AI管家"了
人工智能·后端