Flutter近距离通信插件nearby_cross的使用

Flutter近距离通信插件nearby_cross的使用

插件简介

nearby_cross 是一个使用 Google Nearby Connections 技术在多个操作系统之间进行设备连接的 Flutter 插件。它允许开发者创建和管理设备之间的连接,支持多种策略(如星形、集群和点对点)。

安装依赖

首先,你需要在 pubspec.yaml 文件中添加以下依赖项:

dependencies:
  nearby_cross: ^0.1.0

然后运行以下命令来安装依赖:

flutter pub get nearby_cross

iOS 开始步骤

接下来,按照以下步骤在 iOS 上启用附近连接功能:

  1. 请求访问权限:访问以下链接以请求访问受保护资源的权限。

    https://developers.google.com/nearby/connections/swift/get-started#request_access_to_protected_resources

    
    
  2. 安装 Pod:在 ios 目录下运行 pod install 命令。

  3. Xcode 设置:打开 Xcode,通过 Swift Package Manager 添加所有附近的包到附近的交叉插件项目中。

  4. 完成:设置完成后,你就可以开始使用附近的交叉插件了。

使用示例代码

下面是一个完整的示例代码,展示了如何使用 nearby_cross 插件实现设备间的连接和消息传递。

import 'package:flutter/material.dart';
import 'package:nearby_cross/models/connections_manager_model.dart';
import 'package:nearby_cross/modules/authentication/experimental/experimental_auth_manager.dart';
import 'package:nearby_cross_example/screens/main_screen.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Nearby Cross Example',
      home: MainScreen(),
    );
  }
}

class MainScreen extends StatefulWidget {
  @override
  _MainScreenState createState() => _MainScreenState();
}

class _MainScreenState extends State<MainScreen> {
  final Advertiser _advertiser = Advertiser();

  void startAdvertising(String serviceId, bool manualAcceptConnections) async {
    await _advertiser.startAdvertising(serviceId, manualAcceptConnections);
  }

  void stopAdvertising() async {
    await _advertiser.stopAdvertising();
  }

  void onDeviceFound(Device device) {
    print('Device found: $device');
  }

  void onDeviceLost(Device device) {
    print('Device lost: $device');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Nearby Cross Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () {
                startAdvertising('com.example.nearbyCrossExample', false);
              },
              child: Text('Start Advertising'),
            ),
            ElevatedButton(
              onPressed: () {
                stopAdvertising();
              },
              child: Text('Stop Advertising'),
            ),
            ElevatedButton(
              onPressed: () {
                // 这里可以添加更多逻辑,例如发送或接收消息
              },
              child: Text('Send or Receive Messages'),
            ),
          ],
        ),
      ),
    );
  }
}

示例说明

  • Advertiser:负责发起网络连接并广播服务标识符。你可以选择不同的策略(星形、集群、点对点)。
  • Discoverer:负责发现广告商,并处理设备发现和丢失事件。
  • ConnectionManager:包含回调函数,用于处理设备断开连接、数据接收等中间动作。

认证连接

nearby_cross 插件还支持使用 ECDSA 加密算法生成数字签名来建立安全连接。如果你希望在应用中包含此功能,请在首次创建 ConnectionsManager 实例时提供一个 AuthenticationManager 实例。

var experimentalAuthManager = ExperimentalAuthManager();
experimentalAuthManager.setIdentifier('test_experimental');
ConnectionsManager(authenticationManager: experimentalAuthManager);

更多关于Flutter近距离通信插件nearby_cross的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter近距离通信插件nearby_cross的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于Flutter中的近距离通信插件nearby_cross的使用,以下是一个基本的代码示例,展示了如何使用该插件进行设备的发现与连接。nearby_cross是一个封装了Google Nearby Connections API的Flutter插件,用于实现设备间的近距离通信。

首先,确保你的Flutter项目中已经添加了nearby_cross依赖。在你的pubspec.yaml文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  nearby_cross: ^最新版本号  # 替换为实际的最新版本号

然后运行flutter pub get来安装依赖。

以下是一个简单的Flutter应用示例,展示了如何使用nearby_cross进行设备的发现与连接:

import 'package:flutter/material.dart';
import 'package:nearby_cross/nearby_cross.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  NearbyCross? _nearby;
  String _status = 'Status: Not started';
  List<String?> _discoveredDevices = [];

  @override
  void initState() {
    super.initState();
    initNearby();
  }

  Future<void> initNearby() async {
    _nearby = NearbyCross();

    // 设置策略
    var strategy = NearbyConnectionsStrategy(
      serviceId: 'com.example.nearby',
      supportedTypes: [NearbyConnectionsMedium.BLUETOOTH, NearbyConnectionsMedium.WIFI_HOTSPOT],
    );

    // 开始广告
    _nearby!.startAdvertising(
      strategy,
      (String endpointId, String remoteEndpointId, Map<String, dynamic> payload) {
        print('Connection requested from $remoteEndpointId with payload: $payload');
        _nearby!.acceptConnection(remoteEndpointId);
      },
      (String endpointId, String reason) {
        print('Advertising stopped with reason: $reason');
      },
    );

    // 开始发现
    _nearby!.startDiscovery(
      strategy,
      (String endpointId, String remoteEndpointId, Map<String, dynamic> payload) {
        setState(() {
          _discoveredDevices.add(remoteEndpointId);
          _status = 'Status: Discovered ${_discoveredDevices.length} device(s)';
        });
        _nearby!.requestConnection(remoteEndpointId, {'message': 'Hello!'});
      },
      (String endpointId, String remoteEndpointId, String reason) {
        setState(() {
          _discoveredDevices.remove(remoteEndpointId);
          _status = 'Status: Discovered ${_discoveredDevices.length} device(s)';
        });
      },
      (String endpointId, String reason) {
        print('Discovery stopped with reason: $reason');
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Nearby Cross Example'),
        ),
        body: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(_status),
            SizedBox(height: 20),
            if (_discoveredDevices.isNotEmpty)
              ListView.builder(
                shrinkWrap: true,
                itemCount: _discoveredDevices.length,
                itemBuilder: (context, index) {
                  return ListTile(
                    title: Text('Discovered Device: ${_discoveredDevices[index]}'),
                  );
                },
              ),
          ],
        ),
      ),
    );
  }

  @override
  void dispose() {
    _nearby?.stopAllEndpoints();
    super.dispose();
  }
}

代码说明:

  1. 依赖添加:确保在pubspec.yaml中添加了nearby_cross依赖。

  2. 初始化NearbyCross:在initState方法中初始化NearbyCross实例。

  3. 设置策略:创建一个NearbyConnectionsStrategy对象,指定服务ID和支持的通信介质(如蓝牙和WiFi热点)。

  4. 开始广告:调用startAdvertising方法开始广告设备,当有设备请求连接时,接受连接。

  5. 开始发现:调用startDiscovery方法开始发现其他设备,当发现设备时,更新UI并请求连接。

  6. UI更新:使用Flutter的UI组件(如TextListView)显示当前状态和发现的设备列表。

  7. 资源释放:在dispose方法中停止所有端点,释放资源。

请注意,这只是一个基本示例,实际应用中可能需要根据具体需求进行更多的配置和处理,例如处理连接状态变化、数据收发等。此外,由于nearby_cross是基于Google Nearby Connections API的封装,因此在使用时需要注意相关API的限制和要求。

回到顶部