开源项目|使用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

相关推荐
追逐时光者27 分钟前
推荐 12 款开源美观、简单易用的 WPF UI 控件库,让 WPF 应用界面焕然一新!
后端·.net
Jagger_27 分钟前
敏捷开发流程-精简版
前端·后端
苏打水com1 小时前
数据库进阶实战:从性能优化到分布式架构的核心突破
数据库·后端
间彧2 小时前
Spring Cloud Gateway与Kong或Nginx等API网关相比有哪些优劣势?
后端
间彧2 小时前
如何基于Spring Cloud Gateway实现灰度发布的具体配置示例?
后端
间彧2 小时前
在实际项目中如何设计一个高可用的Spring Cloud Gateway集群?
后端
间彧2 小时前
如何为Spring Cloud Gateway配置具体的负载均衡策略?
后端
间彧3 小时前
Spring Cloud Gateway详解与应用实战
后端
EnCi Zheng4 小时前
SpringBoot 配置文件完全指南-从入门到精通
java·spring boot·后端
烙印6014 小时前
Spring容器的心脏:深度解析refresh()方法(上)
java·后端·spring