Flutter即时通讯插件sy_im_sdk的使用

发布于 1周前 作者 caililin 来自 Flutter

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 调用初始化方法

调用 SyClientinit 方法完成初始化:

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

1 回复

更多关于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');
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!