更新记录
1.0.0(2024-04-19)
2024-04-18 安卓原生Socket插件发布,支持同时创建多个连接,采用事件绑定的形式接收数据。
平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:5.0 - 14.0 | armeabi-v7a:支持,arm64-v8a:支持,x86:支持 | × |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
简介
安卓原生实现Socket插件,支持同时创建多个连接
示例
具体示例见插件使用示例工程
文档
创建连接
options
- host <string> [必需]套接字应连接到的主机。
- port <number> [必需]套接字应连接到的端口。
- key <string> 用于在多个连接情况下识别Socket的key。默认为插件自动分配。
- timeout <number> 连接超时时间,单位毫秒(ms)。默认为30 * 1000ms
返回
- <string> 用于在多个连接的情况下识别Socket的key
const SocketPlugin = uni.requireNativePlugin("Sails-Socket");
const options = {
host: "localhost",
port: 3000,
key: "custom-socket-key", //非必传,省略或者为空时插件自动分配一个key
timeout: 5 * 1000, //非必传,省略或者为空时默认为30 * 1000ms
}
const socketKey = SocketPlugin.connect(options, res => {
if(res.code === 0){
console.log(`连接成功,socketKey:${res.key}`)
}else{
console.log(`连接失败,返回数据:${res}`)
}
});
绑定事件
插件提供四个事件,分别为connect
、data
、close
、error
,事件请勿重复绑定,行为与window.addEventListener
一致。
解除绑定事件使用SocketPlugin.removeEventListener(eventName, callback)
。
事件会返回相应的数据,格式为:
{
type: "connect", //事件名称,在业务中无需判断事件名称是否正常,只需要关注返回的data
data: {
key: "socket key", // SocketKey,在每个事件中都会返回对应的SocketKey
// 事件对应的数据...
}
}
事件:"connect"
成功建立套接字连接时触发。
data
- key <string> 用于在多个连接情况下识别Socket的key。默认为插件自动分配。
SocketPlugin.addEventListener("connect", (e) => {
console.log(`Socket[${e.data.key}]连接成功`, e.data);
});
事件:"data"
收到数据时触发。
如果 Socket
触发 "data"
事件时没有监听器,则数据将丢失。
data
- key <string> 用于在多个连接情况下识别Socket的key。默认为插件自动分配。
- data <string> 接收到的数据。
SocketPlugin.addEventListener("data", (e) => {
console.log(`Socket[${e.data.key}]收到消息,消息内容:${e.data.data}`);
});
事件:"close"
套接字完全关闭后触发。
data
- key <string> 用于在多个连接情况下识别Socket的key。默认为插件自动分配。
SocketPlugin.addEventListener("close", (e) => {
console.log(`Socket[${e.data.key}]连接已关闭`);
});
事件:"error"
data
- key <string> 用于在多个连接情况下识别Socket的key。默认为插件自动分配。
- code <number> 消息代码,成功为:0,其余为错误代码。
- description <string> 错误消息。
- exception <string> 系统抛出的异常名称。
- message <string> 系统抛出的异常消息内容。
SocketPlugin.addEventListener("error", (e) => {
onsole.log(`Socket[${e.data.key}]连接发生错误,错误消息`, e.data);
});
发送数据
如果同时存在多个连接的时候,发送数据时需要传入SocketKey,只有一个连接的情况下可以省略。
如果省略SocketKey,在没有已经存在的连接或者连接数量大于1的情况下会返回一个错误。
params
- message <string> [必需]要发送的消息。
- socketKey <string> 用于识别Socket的Key。
返回
- code <number> 消息代码,成功为:0,其余为错误代码。
- description <string> 错误消息。
const data = {
cmd: "init",
params: {
token: "xxxxxxxxx.xxxxxxxx.xxxxxxx"
}
};
const res = SocketPlugin.send(JSON.stringify(data), "socket-key");
if(res.code !== 0) {
console.log("消息发送失败,错误消息", res);
}
关闭连接
-
关闭指定连接
如果同时存在多个连接的时候,发送数据时需要传入SocketKey,只有一个连接的情况下可以省略。
如果省略SocketKey,在没有已经存在的连接或者连接数量大于1的情况下会返回一个错误。
params
- socketKey <string> 用于识别Socket的Key。
返回
- code <number> 消息代码,成功为:0,其余为错误代码。
- description <string> 错误消息。
const res = SocketPlugin.close("socket-key"); if(res.code !== 0) { console.log("关闭连接失败,错误消息", res); }
-
关闭全部连接
直接关闭关闭的连接。
SocketPlugin.closeAll();
获取SocketKeys
获取正在连接中的SocketKeys
返回
-
<string[]> 正处于连接中的Socket的key列表。
const keys = SocketPlugin.getConnectedSockets(); console.log(keys);