Flutter腾讯云聊天功能插件tencent_cloud_chat_sdk的使用

Flutter腾讯云聊天功能插件tencent_cloud_chat_sdk的使用

整体介绍

Tencent Cloud Chat SDK 是一个用于构建跨平台即时通讯应用的SDK,支持Android、iOS和Web。它提供了丰富的API来实现用户认证、消息发送与接收、会话管理等功能。

安装依赖

首先需要安装Flutter SDK,并确保版本在2.2.0或更高版本。然后通过flutter pub get命令安装tencent_im_sdk_plugin包。

# 克隆TIMSDK仓库
git clone https://github.com/TencentCloud/TIMSDK.git

# 进入TIMSDK/Flutter/Demo/im-flutter-uikit目录
cd TIMSDK/Flutter/Demo/im-flutter-uikit

# 安装依赖
flutter pub get

创建测试账户

在TIM控制台创建应用并完成身份验证后,获取SDKAppIDKey

  1. 在TIM控制台选择你的应用,点击左侧导航栏中的“辅助工具” > “UserSig生成与验证”,创建两个UserID及其对应的UserSig,并将UserIDKeyUserSig复制备用。
  2. 为开发和测试目的,账户仅用于开发和测试。正式发布前,正确的UserSig分发方法是将UserSig计算代码集成到服务器中,并提供面向应用的API。当需要UserSig时,应用程序可以向业务服务器请求动态UserSig。更多详情,请参阅生成UserSig

使用示例

以下是一个完整的Flutter项目示例,展示了如何使用tencent_cloud_chat_sdk进行聊天功能开发。

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:tencent_cloud_chat_sdk/manager/v2_tim_manager.dart';
import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart';
import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_info.dart';

void main() {
  runApp(
    MultiProvider(providers: [
      ChangeNotifierProvider(create: (_) => ListenerConfig()),
    ], child: const MyApp()),
  );
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';
  bool isLogin = false;
  int count = 0;

  void initConfig() async {
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    String userid = prefs.getString('userid') ?? '';

    if (userid.isNotEmpty) {
      int code = await V2TimManager.initSDK(
        sdkAppID: 0, // Replace `0` with the `SDKAppID` of your IM application during integration
        loglevel: LogLevelEnum.V2TIM_LOG_DEBUG, // Log
        listener: V2TimListener(),
      );

      if (code == 0) {
        setState(() {
          isLogin = true;
        });
      } else {
        prefs.clear();
        Navigator.push(
          context,
          MaterialPageRoute(builder: (context) => Login()),
        );
        setState(() {
          isLogin = false;
        });
      }
    } else {
      prefs.clear();
      Navigator.push(
        context,
        MaterialPageRoute(builder: (context) => Login()),
      );
      setState(() {
        isLogin = false;
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      color: Colors.white,
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
          leading: IconButton(
            onPressed: () {
              Navigator.push(
                context,
                MaterialPageRoute(builder: (context) => Login()),
              );
            },
            icon: const Icon(Icons.settings),
          ),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: () {
            Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => CallbackPage()),
            );
          },
          tooltip: '获取callback',
          child: Text('${count}'),
        ),
        body: Wrap(
          spacing: 10, // 子小部件之间的水平间距
          runSpacing: 10,
          children: [
            ElevatedButton(
              onPressed: Provider.of<ListenerConfig>(context, listen: true).isLogin
                  ? () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(builder: (context) => V2TIMManagerPage()),
                      );
                    }
                  : null,
              child: const Text('V2TIMManager 基础模块'),
            ),
            ElevatedButton(
              onPressed: Provider.of<ListenerConfig>(context, listen: true).isLogin
                  ? () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(builder: (context) => V2TIMMessageManagerPage()),
                      );
                    }
                  : null,
              child: const Text('V2TIMMessageManager 消息模块'),
            ),
            ElevatedButton(
              onPressed: Provider.of<ListenerConfig>(context, listen: true).isLogin
                  ? () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(builder: context) => V2TIMConversationManagerPage()),
                      );
                    }
                  : null,
              child: const Text('V2TIMConversationManager 会话模块'),
            ),
            ElevatedButton(
              onPressed: Provider.of<ListenerConfig>(context, listen: true).isLogin
                  ? () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(builder: context) => V2TIMGroupManagerPage()),
                      );
                    }
                  : null,
              child: const Text('V2TIMGroupManager 群组模块'),
            ),
            ElevatedButton(
              onPressed: Provider.of<ListenerConfig>(context, listen: true).isLogin
                  ? () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(builder: context) => V2TIMFriendshipManagerPage()),
                      );
                    }
                  : null,
              child: const Text('V2TIMFriendshipManager 好友模块'),
            ),
            ElevatedButton(
              onPressed: null,
              child: const Text('V2TIMOfflinePushManager 推送模块'),
            ),
            ElevatedButton(
              onPressed: null,
              child: const Text('V2TIMSignalingManager 信令模块'),
            ),
            ElevatedButton(
              onPressed: Provider.of<ListenerConfig>(context, listen: true).isLogin
                  ? () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(builder: context) => const V2TIMCommunityManagerPage()),
                      );
                    }
                  : null,
              child: const Text('V2TIMCommunityManager 社群模块'),
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter腾讯云聊天功能插件tencent_cloud_chat_sdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter腾讯云聊天功能插件tencent_cloud_chat_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用tencent_cloud_chat_sdk插件来实现腾讯云聊天功能的代码示例。这个示例包括基本的初始化、登录和发送消息的功能。请注意,实际使用时你需要根据自己的需求调整代码,并确保已经正确配置了腾讯云的IM服务。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加tencent_cloud_chat_sdk依赖:

dependencies:
  flutter:
    sdk: flutter
  tencent_cloud_chat_sdk: ^最新版本号

然后运行flutter pub get来安装依赖。

2. 初始化SDK

在Flutter应用的入口文件(通常是main.dart)中初始化SDK。

import 'package:flutter/material.dart';
import 'package:tencent_cloud_chat_sdk/tencent_cloud_chat_sdk.dart';

void main() {
  runApp(MyApp());
  // 初始化SDK(通常在应用启动时调用一次)
  TencentCloudChatSDK.init({
    "SDKAppID": "你的SDKAppID", // 替换为你的SDKAppID
  });
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ChatScreen(),
    );
  }
}

3. 用户登录

创建一个登录函数,用于用户登录到腾讯云IM服务。

Future<void> loginUser(String userId, String userSig) async {
  try {
    await TencentCloudChatSDK.login({
      "UserID": userId,
      "UserSig": userSig,
    });
    print("登录成功");
  } catch (e) {
    print("登录失败: $e");
  }
}

4. 发送消息

创建一个发送消息的函数,用于在聊天中发送文本消息。

Future<void> sendMessage(String toUserId, String message) async {
  try {
    await TencentCloudChatSDK.sendMessage({
      "To_Account": toUserId,
      "MsgBody": {
        "Text": {
          "MsgContent": message,
        },
      },
    });
    print("消息发送成功");
  } catch (e) {
    print("消息发送失败: $e");
  }
}

5. 整合到UI

在你的ChatScreen组件中调用上述函数。

import 'package:flutter/material.dart';

class ChatScreen extends StatefulWidget {
  @override
  _ChatScreenState createState() => _ChatScreenState();
}

class _ChatScreenState extends State<ChatScreen> {
  final TextEditingController _controller = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('腾讯云聊天示例'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Column(
          children: [
            Expanded(
              child: ListView.builder(
                // 这里可以显示聊天记录,省略具体实现
                itemBuilder: (_, int index) => Text('聊天记录 $index'),
                itemCount: 10, // 示例数据,实际应动态获取
              ),
            ),
            TextField(
              controller: _controller,
              decoration: InputDecoration(
                border: OutlineInputBorder(),
                labelText: '输入消息',
              ),
            ),
            ElevatedButton(
              onPressed: () async {
                String toUserId = '接收者用户ID'; // 替换为实际的接收者用户ID
                String message = _controller.text;
                await sendMessage(toUserId, message);
                _controller.clear();
              },
              child: Text('发送'),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () async {
          String userId = '你的用户ID'; // 替换为你的用户ID
          String userSig = '你的UserSig'; // 替换为你的UserSig(通常从服务器获取)
          await loginUser(userId, userSig);
        },
        tooltip: '登录',
        child: Icon(Icons.login),
      ),
    );
  }
}

注意事项

  1. UserSig:在实际应用中,UserSig通常由你的服务器生成,并根据时间戳、随机数等信息进行签名,确保安全性。
  2. 错误处理:示例代码中仅包含了基本的错误打印,实际使用中应添加更完善的错误处理逻辑。
  3. UI优化:示例中的UI非常基础,实际项目中应根据需求进行优化。

这个示例提供了一个基本的框架,展示了如何在Flutter中使用tencent_cloud_chat_sdk插件进行腾讯云IM服务的初始化、登录和消息发送。你可以根据具体需求进一步扩展和完善。

回到顶部