Flutter即时通讯插件rongcloud_im_wrapper_plugin的使用

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

Flutter即时通讯插件rongcloud_im_wrapper_plugin的使用

本教程是为了让新手快速了解融云 Flutter 即时通讯能力库。在本教程中,您可以体验集成 SDK 的基本流程和基础通信能力。

融云开发者账户

融云开发者账户是使用融云 SDK 产品的必要条件。

在开始之前,请先[前往融云官网注册开发者账户]。注册后,开发者后台将自动为您创建一个应用,默认为开发环境应用,使用国内数据中心。请获取该应用的 App Key,在本教程中使用。

App Secret 用于生成数据签名,仅在请求融云服务端 API 接口时使用。本教程中暂不涉及。

如果您已拥有融云开发者账户,您可以直接选择合适的环境,创建应用。

应用的 App Key / Secret 是获取连接融云服务器身份凭证的必要条件,请注意不要泄露。

导入 SDK

  1. 在项目的 pubspec.yaml 中添加依赖
dependencies:
  flutter:
    sdk: flutter

  rongcloud_im_wrapper_plugin: 5.12.1+1
  1. 在项目路径执行 flutter pub get 来下载相关插件

初始化

  1. 使用 SDK 功能前,需要 import 下面的头文件
import 'package:rongcloud_im_wrapper_plugin/rongcloud_im_wrapper_plugin.dart';
  1. 开发者在使用融云 SDK 所有功能之前,开发者必须先调用此方法初始化 SDK 并配置相关引擎参数。
RCIMIWEngineOptions options = RCIMIWEngineOptions.create();
RCIMIWEngine engine = await RCIMIWEngine.create(appkey, options);

注意:请使用开发功能之前从融云开发者后台注册得到的 Appkey

连接融云

  1. Token 即用户令牌,相当于您 APP 上当前用户连接融云的身份凭证。在您连接融云服务器之前,您需要请求您的 App Server,您的 App Server 通过融云 Server API 获取 Token 并返回给您的客户端,客户端获取到这个 Token 即可连接融云服务器。

  2. timeout 连接超时时间,单位:秒。

注:如果 code == 31004 即过 Token 无效,是因为您在开发者后台设置了 Token 过期时间或者 Token 和初始化的 AppKey 不同环境,您需要请求您的服务器重新获取 Token 并再次用新的 Token 建立连接。

engine.connect(
  token,
  timeout,
);

engine.onConnected = (
  int? code,
  String? userId,
) {
  // 处理连接成功后的逻辑
};

监听消息

实现此功能需要开发者实现消息监听回调。

代码示例

设置消息接收监听器,用于接收所有类型的实时或者离线消息。

engine.onMessageReceived = (
  RCIMIWMessage? message,
  int? left,
  bool? offline,
  bool? hasPackage,
) {
  // 处理接收到的消息
};

发送消息

RCIMIWTextMessage? textMessage = await engine.createTextMessage(
  conversationType,
  targetId,
  channelId,
  text,
);

engine.sendMessage(textMessage);

监听消息发送结果

engine.onMessageAttached = (
  RCIMIWMessage? message,
) {
  // 处理消息附着的结果
};

engine.onMessageSent = (
  int? code,
  RCIMIWMessage? message,
) {
  // 处理消息发送的结果
};

退出登录

engine.disconnect(receivePush);

引擎销毁

engine.destroy();

完整示例Demo

以下是一个完整的示例代码,展示了如何使用 rongcloud_im_wrapper_plugin 插件进行即时通讯的基本操作:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  RCIMIWEngine? engine;

  [@override](/user/override)
  void initState() {
    super.initState();
    initSDK();
  }

  Future<void> initSDK() async {
    final options = RCIMIWEngineOptions.create();
    engine = await RCIMIWEngine.create('YOUR_APP_KEY', options);

    engine?.onConnected = (int? code, String? userId) {
      if (code == 0) {
        print('Connected as user $userId');
      } else {
        print('Connection failed with code $code');
      }
    };

    engine?.onMessageReceived = (
      RCIMIWMessage? message,
      int? left,
      bool? offline,
      bool? hasPackage,
    ) {
      if (message != null) {
        print('Received message: ${message.content}');
      }
    };
  }

  Future<void> connectToRongCloud(String token) async {
    try {
      await engine?.connect(token, 10); // 10 seconds timeout
    } catch (e) {
      print('Failed to connect: $e');
    }
  }

  Future<void> sendMessage(String text, String targetId) async {
    final message = await engine?.createTextMessage(
      RCConversationType.Private, // Conversation type
      targetId,
      null,
      text,
    );

    if (message != null) {
      await engine?.sendMessage(message);
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('RongCloud IM Example')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: () async {
                  await connectToRongCloud('YOUR_TOKEN');
                },
                child: Text('Connect'),
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () async {
                  await sendMessage('Hello, RongCloud!', 'targetUserId');
                },
                child: Text('Send Message'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter即时通讯插件rongcloud_im_wrapper_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter即时通讯插件rongcloud_im_wrapper_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何使用 rongcloud_im_wrapper_plugin 插件进行即时通讯的基本代码示例。请注意,这只是一个简单的示例,用于展示如何初始化 RongCloud IM 服务、连接服务器、发送和接收消息等。实际应用中,你可能需要根据具体需求进行更多的配置和处理。

首先,确保你已经在 pubspec.yaml 文件中添加了 rongcloud_im_wrapper_plugin 依赖:

dependencies:
  flutter:
    sdk: flutter
  rongcloud_im_wrapper_plugin: ^最新版本号  # 请替换为实际可用的最新版本号

然后,运行 flutter pub get 来获取依赖。

接下来,在你的 Flutter 项目中,你可以按照以下步骤使用 RongCloud IM 服务:

  1. 初始化 RongCloud IM 服务

在你的主应用入口(例如 main.dart)中,初始化 RongCloud IM 服务:

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

void main() {
  runApp(MyApp());

  // 初始化 RongCloud IM 服务
  RongIMClient.init(
    appKey: '你的AppKey',
    token: '用户的Token',
  ).then((result) {
    if (result.code == 200) {
      print('初始化成功');
    } else {
      print('初始化失败: ${result.message}');
    }
  }).catchError((error) {
    print('初始化过程中发生错误: $error');
  });
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ChatScreen(),
    );
  }
}
  1. 连接到 RongCloud IM 服务器

在需要连接服务器的组件中(例如 ChatScreen.dart),你可以调用连接方法:

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

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

class _ChatScreenState extends State<ChatScreen> {
  @override
  void initState() {
    super.initState();

    // 连接到 RongCloud IM 服务器
    RongIMClient.connect().then((result) {
      if (result.code == 200) {
        print('连接成功');
      } else {
        print('连接失败: ${result.message}');
      }
    }).catchError((error) {
      print('连接过程中发生错误: $error');
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Chat Screen'),
      ),
      body: Center(
        child: Text('Chat functionality goes here...'),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          // 发送消息示例(需要替换为实际的会话ID和用户ID)
          sendMessage('会话ID', '发送者ID', '接收者ID', 'Hello, RongCloud!');
        },
        tooltip: 'Send message',
        child: Icon(Icons.send),
      ),
    );
  }

  void sendMessage(String conversationId, String senderId, String receiverId, String message) {
    // 创建消息对象
    Map<String, dynamic> messageMap = {
      'content': message,
      'conversationType': ConversationType.PRIVATE, // 私聊
      'targetId': receiverId,
      'senderUserId': senderId,
    };

    // 发送消息
    RongIMClient.sendMessage(conversationId, messageMap).then((result) {
      if (result.code == 200) {
        print('消息发送成功');
      } else {
        print('消息发送失败: ${result.message}');
      }
    }).catchError((error) {
      print('发送消息过程中发生错误: $error');
    });
  }
}
  1. 接收消息

为了接收消息,你需要监听 RongCloud IM 提供的消息接收事件。这通常可以通过在合适的生命周期方法中设置监听器来实现。例如,在 ChatScreeninitState 方法中添加消息监听器:

@override
void initState() {
  super.initState();

  // 连接到 RongCloud IM 服务器(同上)
  ...

  // 添加消息监听器
  RongIMClient.addMessageListener((message) {
    print('收到新消息: ${message['content']}');
    // 在这里更新UI以显示新消息
    setState(() {
      // 更新状态以反映新消息
    });
  });
}

@override
void dispose() {
  // 移除消息监听器(在组件销毁时)
  RongIMClient.removeMessageListener();
  super.dispose();
}

请注意,上述代码仅用于演示基本功能,并未包含完整的错误处理和UI更新逻辑。在实际应用中,你需要根据具体需求进行更多的配置和优化,例如处理不同类型的消息、管理会话列表、更新聊天界面等。

此外,由于 RongCloud IM 插件的API可能会随着版本更新而发生变化,因此请参考插件的官方文档以获取最新和最准确的API信息。

回到顶部