- 版本:2.0.1
- GitHub: https://github.com/DeepakArora76/nativescript-dna-netservices
- NPM: https://npmjs.net.cn/package/nativescript-dna-netservices
- 下载
- 昨天:0
- 上周:0
- 上个月:0
NativeScript DNA NetServices
基于 NativeScript 8.0 的插件,用于 Bonjour/ZeroConf 和网络监控。提供基于 RxJS 的 API 用于服务发现、浏览和发布,以及网络监控。
此插件提供跨平台实用 API 以检索或查询 Bonjour/ZeroConf 相关信息。API 可用于 iOS 和 Android 平台。
请访问 typescript 示例 存储库以获取实际实现指南和建议。示例已在 iOS 和 Android 设备上测试。
更改日志选择位于文档末尾。
欢迎发送包含建议和反馈的感谢邮件。这将鼓励我提供新的 API 和支持。我的电子邮件地址是 Deepak Arora。祝您享受,并期待您的宝贵反馈。
特性
- Android 和 iOS 的跨平台 API
- 服务发现、解析、浏览和发布
- 监控网络可用性
- WiFi 和蜂窝 IP 地址检索
有关 Bonjour/ZerConf 的更多信息,请参阅:Apple 的 Bonjour 实现 和 Android mDNSResponder
安装
从命令提示符进入您的应用程序根目录并执行
tns plugin add nativescript-dna-netservices
此命令将自动安装必要的文件,并将 nativescript-dna-netservices 存储为您的项目 package.json 文件中的依赖项。
-
针对 iOS 用户的说明:
请参阅 NSBonjourServices 以了解对您的 Info.plist 文件所需的更改。
Info.plist 示例
<dict>
<!--Describe the permissions, features or other configurations required by your plugin for iOS.-->
<key>NSLocalNetworkUsageDescription</key>
<string>Privacy - Local Network Usage Description</string>
<key>NSBonjourServices</key>
<array>
<string>_http._tcp</string>
<string>_ipp._tcp</string>
<string>_yourservice._tcp</string>
</array>
</dict>
API
NativeScript DNA NetServices API 被分为以下服务
- NetworkMonitorService:提供监控网络可用性和访问设备 IP 地址的 API
- ZeroConfService:处理 Bonjour/ZeroConf 的服务解析和发布部分
- ZeroConfServiceBrowser:涉及 Bonjour/ZeroConf 的服务浏览部分
下面将介绍每个服务的 API。
- NetworkMonitorService
根据框架类型,可以使用以下方式之一导入 NetworkMonitorService
TypeScript
import { NetworkMonitorService } from "nativescript-dna-netservices";
JavaScript
const nativescript_dna_netservices = require("nativescript-dna-netservices");
const NetworkMonitorService = nativescript_dna_netservices.NetworkMonitorService;
以下是 NetworkMonitorService 中可用的 API
getWiFiIpAddress:检索设备在 WiFi 网络中分配的 IPv4 地址。
NetworkMonitorService.getWiFiIpAddress().subscribe(
ipAddr => console.info(ipAddr),
err => console.error(err),
() => console.log("completed")
);
getCellularIpAddress:获取用于在移动/蜂窝网络中通信的设备的 IPv4 地址。这不是公共 IP 地址。
NetworkMonitorService.getCellularIpAddress().subscribe(
ipAddr => console.info(ipAddr),
err => console.error(err),
() => console.log("completed")
);
dumpIpAddress:获取连接到接口卡设备的各种地址(IPv4和IPv6)。如果成功检索到地址,观察者的next处理器将接收到类型为IAddress的数组。
NetworkMonitorService.dumpIpAddress().subscribe(
addrs => console.info(addrs),
err => console.error(err),
() => console.log("completed")
);
getNetworkStatus:根据设备连接的网络类型,获取网络状态,包括连接类型(wifi、蜂窝或无)和IPv4地址。如果由于某种原因设备不在网络上,则状态将是一个空地址,连接类型为无。
NetworkMonitorService.getNetworkStatus().subscribe(
networkStatus => console.info(networkStatus.connType, networkStatus.ipAddress),
err => console.error(err),
() => console.log("completed")
);
monitorNetwork:跟踪并通知设备看到网络条件的变化。如果由于某种原因设备不在网络上,则状态将是一个空地址,连接类型为无。
const networkStatusSubscription = NetworkMonitorService.monitorNetwork()
.subscribe(ns => {
let connType = "";
switch (ns.connType) {
case networkType.wifi:
connType = "WiFi";
break;
case networkType.cellular:
connType = "Cellular";
break;
default:
connType = "Unavailable";
}
console.info(connType, ns.ipAddress);
});
- ZeroConfService
ZeroConfService类表示一个网络服务,无论是您的应用程序发布的服务还是客户端服务。此类使用多播DNS将有关网络服务的信息传递到您的应用程序。
根据框架类型,ZeroConfService可以通过以下方式之一导入:
TypeScript
import { ZeroConfService } from "nativescript-dna-netservices";
JavaScript
const nativescript_dna_netservices = require("nativescript-dna-netservices");
const ZeroConfService = nativescript_dna_netservices.ZeroConfService;
以下是ZeroConfService提供的API:
publish:提供一种方便的方式来在由domain、name和port指定的套接字位置发布类型为type的网络服务。在成功的情况下,观察者的next处理器将接收到类型为ZeroConf的数据。此外,在失败的情况下,error处理器将接收到一个类似以下的错误对象:{ errorCode: zeroConfError, zeroConf: ZeroConf }。ZeroConf和zeroConfError都可以通过上述方式之一从nativescript-dna-netservices导入。
const zeroConfService = new ZeroConfService();
const registrationSubscription = zeroConfService
.publish({
domain: "local.",
type: "_my_special_radio_service._tcp.",
name: "Radio Service",
port: 61234
})
.subscribe(data => console.info(data), error => console.error(error));
- 注意:如果指定的端口号为0,API将使用系统中的一个可用空闲端口号。
resolve:在指定域中对给定类型和名称的服务进行解析。如果该服务可用,观察者的next处理器将接收包含套接字信息以连接到服务的ZeroConf数据。在失败的情况下,error处理器将接收到一个类似以下的错误对象:{ errorCode: zeroConfError, zeroConf: ZeroConf }。
const zeroConfService = new ZeroConfService();
const registrationSubscription = zeroConfService
.resolve({
domain: "local.",
type: "_my_special_radio_service._tcp.",
name: "Radio Service"
})
.subscribe(data => console.info(data), error => console.error(error));
- ZeroConfServiceBrowser
ZeroConfServiceBrowser类提供了一种在给定域内浏览特定类型服务的方法。
根据框架类型,ZeroConfServiceBrowser可以通过以下方式之一导入:
TypeScript
import { ZeroConfServiceBrowser } from "nativescript-dna-netservices";
JavaScript
const nativescript_dna_netservices = require("nativescript-dna-netservices");
const ZeroConfServiceBrowser = nativescript_dna_netservices.ZeroConfServiceBrowser;
以下是ZeroConfServiceBrowser提供的API:
searchForServicesOfTypeInDomain:在特定域内启动特定类型服务的搜索。
const zeroConfServiceBrowser = new ZeroConfServiceBrowser();
const subscription = zeroConfServiceBrowser
.searchForServicesOfTypeInDomain("_my_special_radio_service._tcp", "local.")
.subscribe(data => console.info(data), error => console.error(error));
如果服务可用,观察者的next处理器将被多次调用,每次调用都带有可以用于resolve到套接字信息以建立网络连接的ZeroConf数据。如果发生错误,error处理器将接收到一个zeroConfError错误代码。
结合ZeroConfService和ZeroConfServiceBrowser
有时可以组合这些服务的一些功能来创建新的用途。一个用例是获取每个浏览服务的套接字信息。为了实现这一点,RxJS可连接操作符很有帮助。下面是展示相同功能的示例代码片段。
const patternToSearch = /^radio_channel/i;
const serviceFinderTimeout = timer(3000);
const serviceFinder = zeroConfServiceBrowser
.searchForServicesOfTypeInDomain("_my_special_radio_service._tcp", "local.")
.pipe(
filter(service => service.name && service.name.match(patternToSearch).length > 0),
distinct(),
concatMap(service =>
zeroConfService.resolve(service).pipe(
filter(service => service.status === zeroConfStatus.success),
take(1),
observeOn(asyncScheduler)
)
),
takeUntil(serviceFinderTimeout)
);
serviceFinder.subscribe(
service => console.info(service),
error => console.error(error),
() => console.info("Completed Here...")
);
变更日志
- 2.0.1:更新文档。
- 2.0.0:升级到NativeScript 8.0版本。提高了各个包的版本。在Android和iOS设备上进行测试。
- 1.1.0:更新文档。
- 1.0.0:首次发布。
许可证
MIT许可证(见LICENSE文件)