更新记录

1.0.0(2024-04-19)

2024-04-18 安卓原生Socket插件发布,支持同时创建多个连接,采用事件绑定的形式接收数据。


平台兼容性

Android Android CPU类型 iOS
适用版本区间:5.0 - 14.0 armeabi-v7a:支持,arm64-v8a:支持,x86:支持 ×

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
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}`)
    }
});

绑定事件

插件提供四个事件,分别为connectdatacloseerror,事件请勿重复绑定,行为与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);

隐私、权限声明

1. 本插件需要申请的系统权限列表:

<uses-permission android:name=\"android.permission.INTERNET\"/> <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问