@ deviots/ 电容- mdns
在iOS上支持 Bonjour/mDNS 广告和发现的 Capacitor 的 mDNS 插件, Android, Electron, 和一个安全的网络倒下.
需要支持的Capacitor版本:v8. iOS 15或后期.
支持平台: iOS Android Electron 网络倒置
内存 playground 是开发过程中使用的示例应用程序.
安装
npm install @devioarts/capacitor-mdns
npx cap sync
Electron 也安装 bonjour-service@~1.4.0 运行 npx cap-electron sync。 。 。 .
见 电机设置 详细情况.
从0.1.0升级
0.2.0版本保留了现有的方法签名和结果形状并增加了连续 发现。 它还会收紧输入验证,改变重叠的发现和错误处理, 并将宣布的iOS最小值提高到15.0. 评议 升级注释 在更新现有应用程序之前.
使用量
import { mDNS } from '@devioarts/capacitor-mdns';
const runtime = await mDNS.getPluginPlatform();
await mDNS.startBroadcast({ type: '_http._tcp.', name: 'MyService', port: 9100 });
const result = await mDNS.discover({ type: '_http._tcp.', timeout: 3000 });
await mDNS.stopBroadcast();
不断发现
谢谢, 伊德里米语Name,用于贡献原始持续发现 特性在 公关7。 。 。 .
watchServices() 在iOS,Android和Electron上监视多种服务类型直至停止.
开始前注册收听器;一个新的有效呼叫取代了以前的手表.
const found = await mDNS.addListener('serviceFound', ({ service }) => {
console.log('Found', service.name, service.hosts, service.port);
});
const lost = await mDNS.addListener('serviceLost', ({ service }) => {
console.log('Lost', service.name, service.hosts, service.port);
});
const errors = await mDNS.addListener('watchError', (event) => {
console.error(event.type, event.errorMessage, event.watching);
});
const result = await mDNS.watchServices({
types: ['_http._tcp.', '_airplay._tcp.', '_googlecast._tcp.'],
});
// Later, including when leaving the screen:
await mDNS.stopWatching();
await Promise.all([found.remove(), lost.remove(), errors.remove()]);
发现/丢失的事件包含完整的服务快照; hosts 总是数组。 一个服务
在解决两个事件之前就消失了 浏览器错误停止监视并发射
watchError 与 watching: false; 已耗尽的解析重试 watching: true。 。 。 .
stopWatching() 离开广播 和一发的发现运行。 浏览器不支持 mDNS.
平台设置
Android 需要 mDNS/网络权限 AndroidManifest.xml; 插件也声明它们
故在同步时将它们合并。 iOS 需要在 Info.plist。 。 。 .
电能支持计划用于 devioarts/capacitor-electron
并使用导出自 @devioarts/capacitor-mdns/electron/settings。 。 。 .
详细设置如下:
API 密码
getPluginPlatform()startBroadcast(...)stopBroadcast()discover(...)watchServices(...)stopWatching()addListener('serviceFound' | 'serviceLost', ...)addListener('watchError', ...)removeAllListeners()- 接口
- 类型异名
Capacitor mDNS插件的公用API表面.
获取 Plugin 公式 ()
getPluginPlatform() => Promise<MdnsPluginPlatformResult>
返回当前服务插件呼叫的平台执行 .
回返情况: Promise<MdnsPluginPlatformResult>
开始广播(...)
startBroadcast(options: MdnsBroadcastOptions) => Promise<MdnsBroadcastResult>
开始宣传Bonjour/mDNS服务.
| 参数 | 类型 | 说明 |
|---|---|---|
options | MdnsBroadcastOptions | - 链接 MdnsB 广播选项{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢 |
回返情况: Promise<MdnsBroadcastResult>
停止广播( )
stopBroadcast() => Promise<MdnsStopResult>
停止对当前注册服务进行广告( 无则不开放) .
回返情况: Promise<MdnsStopResult>
发现(...)
discover(options?: MdnsDiscoverOptions | undefined) => Promise<MdnsDiscoverResult>
发现特定类型的服务,并按实例名称选择过滤.
| 参数 | 类型 | 说明 |
|---|---|---|
options | MdnsDiscoverOptions | - 链接 Mdns 发现选项{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢 |
回返情况: Promise<MdnsDiscoverResult>
监视服务(...)
watchServices(options: MdnsWatchOptions) => Promise<MdnsWatchResult>
持续观察好几种服务类型. 一个有效的呼叫取代了以前的手表.
开始前登记听众 。 每个已解析的服务发送 serviceFound 一次;
失踪发射 serviceLost 与它的最后一个快照。 未造成损失
未解决的服务。 观察和一发的发现可以一起运行.
感谢伊德里米贡献了最初的连续发现特征(PR #7).
| 参数 | 类型 |
|---|---|
options | MdnsWatchOptions |
回返情况: Promise<MdnsWatchResult>
停止监视( C)
stopWatching() => Promise<MdnsWatchStopResult>
停止所有观察者。 这件事情解决后,手表上没有发生任何事件.
回返情况: Promise<MdnsWatchStopResult>
添加倾听器( “ serviceFound ” QQ “ service Lost” ,...)
addListener(eventName: 'serviceFound' | 'serviceLost', handler: (event: MdnsServiceEvent) => void) => Promise<PluginListenerHandle>
| 参数 | 类型 |
|---|---|
eventName | 'serviceFound' | 'serviceLost' |
handler | (event: MdnsServiceEvent) => void |
回返情况: Promise<PluginListenerHandle>
添加倾听器( “ watch Error, ” )..
addListener(eventName: 'watchError', handler: (event: MdnsWatchErrorEvent) => void) => Promise<PluginListenerHandle>
| 参数 | 类型 |
|---|---|
eventName | 'watchError' |
handler | (event: MdnsWatchErrorEvent) => void |
回返情况: Promise<PluginListenerHandle>
删除所有收听器( )
removeAllListeners() => Promise<void>
接口
MdnsPluginPlatform 结果
获取PluginPlatform () 的结果 。 用于验证已路由的电话 穿过预期的站台桥.
| Prop | 类型 | 说明 |
|---|---|---|
platform | MdnsPluginPlatform | 产生这一结果的平台实施. |
MdnsB 广播结果
开播结果 Broadcast (. 说明广告是否活跃
和最终服务名称。 如果失败, error 是真的,还有 errorMessage
描述这个问题.
| Prop | 类型 | 说明 |
|---|---|---|
error | boolean | 如果操作失败, 则属实 . |
errorMessage | string | null | 错误描述或成功无效 . |
name | string | 最终(可能统一)服务实例名称. 失败时空出. |
publishing | boolean | 广告商是否活跃,或者在清理失败后可能仍然活跃. |
MdnsB 广播选项
启动Bonjour/mDNS广告的选项.
| Prop | 类型 | 说明 |
|---|---|---|
type | string | 服务类型(包括后继点). |
name | string | 服务实例名称( 最大63 UTF-8 字节) 。 默认为 DevIOArtsMDNS。 。 。 . |
port | number | TCP端口发布广告. |
txt | MdnsTxt | 可选的 TXT 键 - 值对 (UTF-8 字符串). |
Mdns stopResult 存档副本
停播的结果(. 显示广告主是否活跃 调用后( 通常为错误) 并包含错误信息 .
| Prop | 类型 | 说明 |
|---|---|---|
error | boolean | 如果停止时发生错误, 则为真 . |
errorMessage | string | null | 错误描述或成功无效 . |
publishing | boolean | 经确认停止后是虚假的;当停止失败时是真实的,广告商可能仍然活跃. |
Mdns 发现结果
发现结果( ). 包含正常服务和错误信息.
| Prop | 类型 | 说明 |
|---|---|---|
error | boolean | 如果发现错误, 则属实( 部分结果可能仍然存在 ). |
errorMessage | string | null | 当没有发生错误时错误描述或无效 . |
servicesFound | number | 方便与服务相等 长度. |
services | MdnsService[] | 以数字地址解析服务 。 错误时空出; 部分结果被丢弃 . |
服务
已发现的Bonjour/mDNS服务的正常描述. 从QQlink mDNSPlugin.discover}返回.
| Prop | 类型 | 说明 |
|---|---|---|
name | string | 服务的实例名称(可能由OS独有,例如"我的App (2)"). |
type | string | 完整的服务类型,包括后缀点,例如:. "_http._tcp."。 。 。 . |
domain | string | 服务域; 典型 "local."。 。 。 . |
port | number | 接通服务广告. |
hosts | string[] | 已解析出数字IP地址,先为IPv4,再为任何可用范围后缀的IPv6. |
hostname | string | 由平台提供主机名,例如. "my-device.local."。 。 。 . |
txt | MdnsTxt | TXT字典 (键 = 值). |
Mdns 发现选项
Bonjour/mDNS发现的选项.
| Prop | 类型 | 说明 |
|---|---|---|
type | string | 服务类型(包括后继点). |
name | string | 可选实例名称过滤器( 前缀安全) . |
timeout | number | 发现超时数以毫秒计. 只限数量;分数被截断后被夹到0-2147483647. |
useNW | boolean | 只使用 iOS 提示 NWBrowser 改为 NetServiceBrowser。 。 。 . |
监视结果
已请求本地浏览器; 稍后的失败报告通过 watchError。 。 。 .
| Prop | 类型 |
|---|---|
error | boolean |
errorMessage | string | null |
watchersStarted | number |
Mdns 监视选项
在iOS,Android和Electron上持续发现的选项.
| Prop | 类型 | 说明 |
|---|---|---|
types | string[] | 非空性服务类型列表. 轨迹点是可选的;重复被合并. |
Mdns 监视停止
停止独立观看任何活动广播.
| Prop | 类型 |
|---|---|
error | boolean |
errorMessage | string | null |
watching | boolean |
插件听筒
| Prop | 类型 |
|---|---|
remove | () => Promise<void> |
服务事件
发现和丢失的事件都包含完整的服务快照,包括 hosts。 。 。 .
| Prop | 类型 |
|---|---|
service | MdnsService |
监视错误事件
浏览器故障停止了手表;已耗尽的服务分辨率重试使其运行.
| Prop | 类型 |
|---|---|
type | string |
errorMessage | string |
watching | boolean |
类型异名
MdnsPlugin 窗体
处理插件呼叫的运行时间执行 .
'ios' | 'android' | 'electron' | 'web'
MdnsTxt 数据
一个 Bonjour/ mDNS 服务的 TXT 记录的密钥 - 值图 . 值为UTF-8字符串;二进制有效载荷不由这个API支持.
Record<string, string>
记录
构造 T 类型 K 的一组属性类型
{
[P in K]: T;
}