一个使用 iOS 和 Android 上原生库进行 WebSocket 通信的 Flutter 插件。
Flutter plugin for WebSocket communication using native libraries on iOS and Android.
由于使用 Flutter 的 WebSocket 库尝试连接某台 IoT 设备通信时,总是无法连接,所以单独做了一个 WebSocket 库,它基于各系统中已经成熟的库进行通信。
平 台 | Flutter 插件语言 | 原生端使用的库 | 库版本 | 库使用的语言 |
---|---|---|---|---|
iOS | Kotlin | Java-WebSocket | 1.5.2 | Java |
Android | Swift | Starscream | 4.0.4 | Swift |
平 台 | 可运行最低版本 | 推荐最低版本 |
---|---|---|
Dart | 2.12.0 | 2.13.4 |
Flutter | 2 | 2.2.3 |
iOS | 10 | 14 |
Android | 4.1 | 11 |
在使用本插件前,请先将 APP 的适用版本设置为「可运行最低版本」之上。
- 如果您准备使用 release 发布版本:
- 在项目目录中,运行
flutter pub add ya_websocket
。 - 运行后,您项目中
pubspec.yaml
中的dependencies:
节会自动添加一行代码(并自动运行dart pub get
) :
- 在项目目录中,运行
ya_websocket: ^(使用的版本号,你也可以修改它)
- 如果您准备使用 main 主线版本,请添加:
- 编辑您项目中的文件
pubspec.yaml
,在dependencies:
节添加以下代码:
ya_websocket:
git:
url: git://github.com/kagurazakayashi/yaWebSocket.git
ref: main
- 保存后,在项目目录中运行
flutter pub get
.
- 导入包:
import 'package:ya_websocket/ya_websocket.dart';
- 在需要的类中实现接口
class ... implements YaWebsocketDelegate
,实现以下接口:
- 已连接时
yaWebsocketDelegateOnOpen(String httpStatus, String httpStatusMessage, String? tag);
- 参数:
httpStatus
: HTTP 状态码httpStatusMessage
: 状态描述文本tag
: 自定义标记
- 开始尝试连接时
yaWebsocketDelegateOnConnecting(String? tag);
- 参数:
tag
: 自定义标记
- 收到信息时
yaWebsocketDelegateOnMessage(String message, String? tag);
- 参数:
message
: 信息内容tag
: 自定义标记
- 连接关闭时 (Android 和 iOS 返回信息可能有区别)
yaWebsocketDelegateOnClose(String code, String reason, String remote, String? tag);
- 参数:
code
: 状态代码reason
: 描述文本remote
: 是否由远程关闭tag
: 自定义标记
- 连接发生错误时 (Android 和 iOS 返回信息可能有区别)
yaWebsocketDelegateOnError(String localizedMessage, String? message, String? tag);
- 参数:
localizedMessage
: 本地化描述文本message
: 描述文本tag
: 自定义标记
- 通常情况下的状态代码(
code
)-1
表示操作失败/不正常0
表示正常/正常地处于关闭状态1
表示正常/正常地处于开启状态
- 创建对象:
YaWebsocket websocket = YaWebsocket();
- 指定接口实现类:
_websocket.delegate = this;
- 开始连接:
websocket.connect(uri, tag: tag);
- 参数:
uri
: Websocket 的连接地址,以ws://
开头。tag
: 可选标签,可以输入任意字符串,库调用接口返回时,会带上它。
- 返回值(字符串字典):
status
:0
: 现在开始连接,请等待接口收到yaWebsocketDelegateOnOpen
或yaWebsocketDelegateOnClose
调用后再进行下一步。-1
: 未能开始连接
info
: (可选)如果未能开始连接,可能提供此错误信息描述
- 检查是否连接
websocket.isOpen();
- 返回值(字符串字典):
status
:1
: 已连接0
: 未连接-1
: 未能查询
info
: (可选)如果未能查询,可能提供此错误信息描述
- 发送数据:
websocket.send(text);
- 参数:
text
: 要发送的字符串
- 返回值(字符串字典):
status
:0
: 已发送-1
: 未发送
info
: (可选)如果未能发送,可能提供此错误信息描述
- 断开连接:
websocket.close();
- 返回值(字符串字典):
status
:0
: 关闭成功或已经处于关闭状态,关闭成功接口将收到yaWebsocketDelegateOnClose
调用。-1
: 遇到问题
info
: (可选)如果遇到问题,可能提供此错误信息描述
- 执行
websocket.*
时会立即有返回值,该返回值通常只表示是否成功开始执行。真正的运行结果状态回调在YaWebsocketDelegate
。 - 正在进行操作时(如正在连接、正在断开链接时)不要进行操作,尤其是重复的连接和断开操作,请等到收到状态回调后再进行下一步操作。
- 连接关闭的回调
yaWebsocketDelegateOnClose
会在每次连接关闭时触发,而错误回调yaWebsocketDelegateOnError
仅在识别到错误时触发。如果因错误断开,yaWebsocketDelegateOnError
和yaWebsocketDelegateOnClose
都会触发。因此建议在yaWebsocketDelegateOnClose
中判断连接关闭。
DEMO 演示了 连接、发送、接收、断开、重新连接 的过程。
- 在输入框中输入
ws://
地址进行连接。 - 然后输入内容并发送,屏幕上会以聊天式气泡显示接收和发送的信息。
- 点按右上角连接图标可以连接和断开,请在当前连接或断开操作完成或超时后再按。