nativescript-dna-netservices
NativeScript 插件,用于 Bonjour/ZeroConf 和网络监控。为 Android 和 iOS 提供基于 RxJS 的 API。
npm i --save nativescript-dna-netservices

NativeScript DNA NetServices

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:提供一种方便的方式来在由domainnameport指定的套接字位置发布类型为type的网络服务。在成功的情况下,观察者的next处理器将接收到类型为ZeroConf的数据。此外,在失败的情况下,error处理器将接收到一个类似以下的错误对象:{ errorCode: zeroConfError, zeroConf: ZeroConf }ZeroConfzeroConfError都可以通过上述方式之一从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错误代码。

结合ZeroConfServiceZeroConfServiceBrowser

有时可以组合这些服务的一些功能来创建新的用途。一个用例是获取每个浏览服务的套接字信息。为了实现这一点,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文件)