项目背景
环信 Server SDK 是对环信 IM REST API 的封装, 可以节省服务器端开发者对接环信 API 的时间,只需要配置自己的 App Key 相关信息即可使用。
环信目前提供java和PHP版本的Server SDK,此项目使用go语言对环信 IM REST API 进行封装,对官方版本进行了补充,有需要的开发者可以直接通过以下地址获取源码。
项目地址
- github.com/xiaofengin/...
- 如果有任何问题可以通过 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
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