Flutter即时通讯插件sy_im_sdk的使用
Flutter即时通讯插件sy_im_sdk的使用
本文将详细介绍如何在Flutter项目中使用sy_im_sdk
插件实现即时通讯功能。我们将涵盖依赖安装、SDK初始化、用户登录、会话管理、聊天管理和群组管理等核心功能,并附带完整的示例代码。
1. 依赖SDK
1.1 下载依赖包
在pubspec.yaml
文件中添加以下依赖:
dependencies:
sy_im_sdk: ^版本号
然后执行以下命令以安装依赖:
flutter pub get
iOS 配置
在 iOS 项目的 podfile
文件头部添加私有索引库:
source 'http://code.bestsiyuhz.com/zgl/sypodspec.git'
source 'https://github.com/CocoaPods/Specs.git'
然后在 iOS 工程根目录执行以下命令:
pod install --repo-update
2. 初始化SDK
2.1 构造SDK配置
首先创建一个 SyOptions
对象并设置必要的参数:
SyOptions syOptions = SyOptions();
syOptions.appId = "您的AppID"; // 替换为实际的AppID
syOptions.secret = "您的secret"; // 替换为实际的secret
syOptions.environment = SyEnvironmentEnum.prod; // 生产环境
2.2 调用初始化方法
调用 SyClient
的 init
方法完成初始化:
SyClient.getInstance().init(syOptions: syOptions);
3. 用户登录
3.1 通过业务方UUID登录
SyClient.getInstance().loginByUUID(
uuid: "uuid", // 替换为实际的UUID
callback: SyCallBack(
onSuccess: (authInfo) {
// 登录成功处理逻辑
},
onFail: (code, msg) {
// 登录失败处理逻辑
}
)
);
3.2 通过token登录
SyClient.getInstance().loginByToken(
token: "token", // 替换为实际的token
callback: SyCallBack(
onSuccess: (authInfo) {
// 登录成功处理逻辑
},
onFail: (code, msg) {
// 登录失败处理逻辑
}
)
);
4. 会话管理
4.1 创建会话(无用户信息)
SyClient.getInstance().conversationManager().createSignConversationByUid(
userId: "userId", // 对方用户ID
callback: SyCallBack<SyConversation>(
onSuccess: (conversation) {
// 回调会话信息
var sessionId = conversation.sessionId;
var info = conversation.contact;
},
onFail: (code, msg) {
// 错误处理
}
)
);
4.2 创建会话(有用户信息)
SyContact contact = SyContact();
contact.userId = "userId";
contact.avatar = "avatarUrl";
contact.nickName = "nickName";
SyClient.getInstance().conversationManager().createSignConversationByContact(
contact: contact,
callback: SyCallBack<SyConversation>(
onSuccess: (conversation) {
// 回调会话信息
},
onFail: (code, msg) {
// 错误处理
}
)
);
4.3 获取会话列表
SyClient.getInstance().conversationManager().getConversationList(
callback: SyCallBack<List<SyConversation>>(
onSuccess: (conversationList) {
// 获取会话列表
},
onFail: (code, msg) {
// 异常处理
}
)
);
4.4 初始化会话监听
ConversationListener listener = ConversationListener((conversationList) {
// 监听会话变化
});
4.5 注册会话监听
SyClient.getInstance().conversationManager().addConversationListener(listener);
4.6 移除会话监听
SyClient.getInstance().conversationManager().removeConversationListener(listener);
4.7 会话开启聊天
SyClient.getInstance().conversationManager().addChatting("sessionId");
4.8 会话退出聊天
SyClient.getInstance().conversationManager().removeChatting("sessionId");
4.9 重置会话未读消息数量
SyClient.getInstance().conversationManager().restUnReadCount("sessionId");
4.10 获取单个会话未读消息数量
int num = await SyClient.getInstance().conversationManager().getUnReadNum("sessionId");
4.11 获取所有群聊会话未读消息数量
int num = await SyClient.getInstance().conversationManager().getAllUnReadNumBySessionType(SessionType.GROUP);
4.12 获取所有单聊会话未读消息数量
int num = await SyClient.getInstance().conversationManager().getAllUnReadNumBySessionType(SessionType.PRIVATE);
4.13 获取所有会话未读消息数量
int num = await SyClient.getInstance().conversationManager().getAllUnReadNum();
4.14 刷新所有会话未读消息数量
刷新指定会话类型:
SyClient.getInstance().conversationManager().restAllUnReadNum(sessionType: SessionTypeEnum.group);
刷新所有会话:
SyClient.getInstance().conversationManager().restAllUnReadNum();
5. 聊天管理
5.1 获取聊天记录
SyMessage syMessage = SyMessage();
syMessage.msgTimeStamp = DateTime.now().millisecondsSinceEpoch;
syMessage.sessionId = "会话ID";
int pageSize = 20;
SyClient.getInstance().chatManager().getMessageList(
starMessage: syMessage,
pageSize: pageSize,
callBack: SyCallBack(
onSuccess: (messageList) {
// 处理消息列表
},
onFail: (code, error) {
// 查询失败处理
}
)
);
5.2 发送消息
发送文本消息
_syContact() {
SyContact receiveUserInfo = SyContact();
receiveUserInfo.userId = "接收人用户ID";
receiveUserInfo.avatar = "接收人头像";
receiveUserInfo.nickName = "接收人昵称";
return receiveUserInfo;
}
_sendTxtMessage(String content) {
SyMessage syMessage = SyMessage.buildTxtMsg(_syContact(), "会话ID");
syMessage.content = content;
SyClient.getInstance().chatManager().sendMessage(
syMessage: syMessage,
callBack: SyCallBack(
onSuccess: (syMessage) {
// 发送成功回调
},
onFail: (code, error) {
// 发送失败回调
}
)
);
}
发送图片消息
_sendImgMessage(Uri uri) {
SyMessage syMessage = SyMessage.buildImgMsg(_syContact(), "会话ID");
syMessage.uri = uri;
SyClient.getInstance().chatManager().sendMessage(
syMessage: syMessage,
callBack: SyCallBack(
onSuccess: (syMessage) {
// 发送成功回调
},
onFail: (code, error) {
// 发送失败回调
}
)
);
}
发送自定义消息
_sendCustomMessage(String content) {
SyMessage syMessage = SyMessage.buildCustomMsg(_syContact(), "会话ID");
syMessage.content = content;
SyClient.getInstance().chatManager().sendMessage(
syMessage: syMessage,
callBack: SyCallBack(
onSuccess: (syMessage) {
// 发送成功回调
},
onFail: (code, error) {
// 发送失败回调
}
)
);
}
5.3 保存消息到本地
SyMessage syMessage = SyMessage.buildTxtMsg(_syContact(), "消息内容");
SyClient.getInstance().chatManager().saveMessageToLocal(
syMessage: syMessage,
callBack: SyCallBack(
onSuccess: (syMessage) {
// 保存成功回调
},
onFail: (code, error) {
// 保存失败回调
},
),
);
5.4 删除消息
SyClient.getInstance().chatManager().deleteMessage(
msgId: "消息ID",
sessionId: "会话ID",
callBack: SyCallBack(
onSuccess: (bool status) {
// 删除成功逻辑
},
onFail: (String code, String error) {
// 删除失败逻辑
},
),
);
5.5 消息监听
初始化消息监听
OnMessageListener onMessageListener = OnMessageListener(
onMessage: (List<SyMessage> syMessage) {
// 处理新消息
},
onStatusChange: (List<SyMessage> syMessage) {
// 处理状态变更消息
},
);
注册消息监听
SyClient.getInstance().chatManager().addMessageListener(onMessageListener);
移除消息监听
SyClient.getInstance().chatManager().removeMessageListener(onMessageListener);
6. 群组管理
6.1 获取群组详情
SyClient.getInstance().groupManager().getGroupDetail(
groupId: "groupId",
callBack: SyCallBack(
onSuccess: (groupData) {},
onFail: (code, err) {},
),
);
6.2 获取群组列表
SyClient.getInstance().groupManager().getGroupList(
callBack: SyCallBack(
onSuccess: (groupList) {},
onFail: (code, err) {},
),
);
6.3 从服务器获取群组列表
SyClient.getInstance().groupManager().getGroupListFromService(
callBack: SyCallBack(
onSuccess: (groupList) {},
onFail: (code, err) {},
),
);
6.4 退出群聊
SyClient.getInstance().groupManager().exitGroup(
groupId: "groupId",
callBack: SyCallBack(
onSuccess: (groupList) {},
onFail: (code, err) {},
),
);
6.5 添加群成员
SyClient.getInstance().groupManager().addGroupMember(
userId: "outUserId",
groupId: "groupId",
callBack: SyCallBack(
onSuccess: (groupList) {},
onFail: (code, err) {},
),
);
6.6 获取群成员
SyClient.getInstance().groupManager().getGroupMemberList(
groupId: "groupId",
callBack: SyCallBack(
onSuccess: (syContacts) {},
onFail: (code, err) {},
),
);
7. 数据枚举
7.1 会话类型
位于 package:sy_im_sdk/common/enum/session_type_enum.dart
7.2 消息状态
位于 package:sy_im_sdk/common/enum/msg_status_enum.dart
7.3 消息类型
位于 package:sy_im_sdk/common/enum/msg_type_enum.dart
示例代码
以下是一个完整的示例代码,展示如何初始化SDK并实现基本的登录和消息发送功能:
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:sy_im_sdk/sy_im_sdk.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return GetMaterialApp(
debugShowCheckedModeBanner: false,
home: HomePage(),
);
}
}
class HomePage extends StatefulWidget {
[@override](/user/override)
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
final SyOptions _options = SyOptions()
..appId = "您的AppID"
..secret = "您的Secret"
..environment = SyEnvironmentEnum.prod;
[@override](/user/override)
void initState() {
super.initState();
SyClient.getInstance().init(syOptions: _options);
}
void _login() async {
SyClient.getInstance().loginByToken(
token: "您的Token",
callback: SyCallBack(
onSuccess: (authInfo) {
print("登录成功!");
},
onFail: (code, msg) {
print("登录失败:$msg");
},
),
);
}
void _sendMessage() async {
SyMessage message = SyMessage.buildTxtMsg(
SyContact()..userId = "接收人ID",
"会话ID",
);
message.content = "Hello, world!";
SyClient.getInstance().chatManager().sendMessage(
syMessage: message,
callBack: SyCallBack(
onSuccess: (msg) {
print("消息发送成功!");
},
onFail: (code, error) {
print("消息发送失败:$error");
},
),
);
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("sy_im_sdk 示例")),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: _login,
child: Text("登录"),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _sendMessage,
child: Text("发送消息"),
),
],
),
),
);
}
}
更多关于Flutter即时通讯插件sy_im_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter即时通讯插件sy_im_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
sy_im_sdk
是一个用于 Flutter 的即时通讯插件,通常用于集成即时通讯功能到 Flutter 应用中。以下是如何使用 sy_im_sdk
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 sy_im_sdk
插件的依赖。
dependencies:
flutter:
sdk: flutter
sy_im_sdk: ^版本号 # 请替换为最新版本
然后运行 flutter pub get
来获取依赖。
2. 初始化 SDK
在使用 sy_im_sdk
之前,你需要初始化 SDK。通常你会在 main.dart
或其他合适的地方进行初始化。
import 'package:sy_im_sdk/sy_im_sdk.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化 SDK
await SyImSdk.init(
appId: 'your_app_id', // 替换为你的 App ID
appKey: 'your_app_key', // 替换为你的 App Key
);
runApp(MyApp());
}
3. 用户登录
用户登录是使用即时通讯功能的前提。你可以使用以下代码让用户登录。
await SyImSdk.login(
userId: 'user_id', // 替换为用户的唯一 ID
token: 'user_token', // 替换为用户的登录令牌
);
4. 发送消息
你可以使用 SyImSdk
来发送文本消息、图片消息等。
// 发送文本消息
await SyImSdk.sendTextMessage(
toUserId: 'receiver_user_id', // 接收者的用户 ID
content: 'Hello, World!', // 消息内容
);
// 发送图片消息
await SyImSdk.sendImageMessage(
toUserId: 'receiver_user_id', // 接收者的用户 ID
imagePath: 'path/to/image.jpg', // 图片路径
);
5. 接收消息
你可以通过监听消息事件来接收消息。
SyImSdk.onMessageReceived.listen((message) {
print('收到消息: ${message.content}');
});
6. 退出登录
当用户退出应用时,你应该调用退出登录方法。
await SyImSdk.logout();
7. 其他功能
sy_im_sdk
可能还提供了其他功能,如群组管理、消息撤回、消息已读回执等。你可以根据插件的文档来使用这些功能。
8. 处理错误
在使用 sy_im_sdk
时,可能会遇到各种错误。你可以通过 try-catch
来捕获并处理这些错误。
try {
await SyImSdk.login(
userId: 'user_id',
token: 'user_token',
);
} catch (e) {
print('登录失败: $e');
}