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

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

Bridgefy Flutter SDK

Bridgefy SDK 是一个先进的、即插即用的包,可以让用户在没有互联网连接的情况下使用您的移动应用程序,通过蓝牙mesh网络。

操作模式

所有连接都由SDK无缝处理,以创建一个网格网络。这个网络的大小取决于连接设备的数量和环境中的变量因素,允许您加入同一网络中的节点或不同网络中的节点。

平台权限

要在Flutter应用中使用此SDK,您需要首先为每个平台(iOS和Android)配置权限。您可以阅读以下每个平台的要求:

安装

要安装此SDK,请将以下内容添加到pubspec.yaml文件中:

dependencies:
  bridgefy: ^1.1.7

或者运行以下flutter命令:

flutter pub add bridgefy

使用

初始化

初始化方法init会根据给定的API密钥和详细日志来初始化Bridgefy SDK。delegate参数是必需的,并且应该是一个符合BridgefyDelegate混入的对象。

import 'package:bridgefy/bridgefy.dart';

class _MyAppState extends State<MyApp> implements BridgefyDelegate {
  final _bridgefy = Bridgefy();

  @override
  void initState() {
    super.initState();
    try {
      await _bridgefy.initialize(
        apiKey: "&lt;API_KEY&gt;",
        delegate: this,
        verboseLogging: true,
      );
    } catch (e) {
      _log("Unable to initialize: $e");
    }
  }
}
启动Bridgefy

启动SDK时可以指定传播配置文件和自定义用户ID。

_bridgefy.start(
  userId: "Custom UUID",
  propagationProfile: BridgefyPropagationProfile.standard
);
停止Bridgefy

停止Bridgefy操作。

_bridgefy.stop();
发送数据

使用传输模式发送数据的方法。此方法返回一个UUID来标识发送的消息。

void _send() async {
  final lastMessageId = await _bridgefy.send(
    data: _data, // Uint8List 数据要发送
    transmissionMode: BridgefyTransmissionMode(
      type: BridgefyTransmissionModeType.broadcast,
      uuid: await _bridgefy.currentUserID,
    ),
  );
}
响应SDK事件

SDK将通过BridgefyDelegate对象报告事件给您应用。以下是成功发送消息时发出的一个示例事件。

@override
void bridgefyDidSendMessage({required String messageID}) {
  // `messageID` 是成功发送的消息ID。
}

// 这个函数在消息无法发送时被调用。
@override
void bridgefyDidFailSendingMessage({required String messageID, BridgefyError? error}) {
  // `messageID`: 尝试发送的消息ID。
  // `error`: 错误原因。
}
接收数据

当通过Bridgefy接收到数据时,SDK会通过BridgefyDelegate对象报告事件。

@override
void bridgefyDidReceiveData({
  required Uint8List data,
  required String messageId,
  required BridgefyTransmissionMode transmissionMode,
}) {
  // `data` 包含消息字节。
}
传输模式

BridgefyTransmissionModeType定义不同的传输模式:

  • p2p: 只向特定接收者传递消息,如果存在活跃连接。
  • mesh: 使用附近的设备传播消息到特定接收者。
  • broadcast: 传播可读取的消息给所有接收到它的设备。
传播配置文件

BridgefyPropagationProfile定义了BridgefySDK内的不同传播配置文件。

  • standard: 表示标准传播配置文件。
  • highDensityNetwork: 表示适合高密度网络的传播配置文件。
  • sparseNetwork: 表示适合稀疏网络的传播配置文件。
  • longReach: 表示优化长距离传播的配置文件。
  • shortReach: 表示设计用于短距离通信的配置文件。
邻近节点检测

当节点建立连接时,调用以下方法:

@override
void bridgefyDidConnect({required String userID}) {
  // `userID` 是连接的节点ID。
}

当节点断开连接(超出范围)时,调用以下方法:

@override
void bridgefyDidDisconnect({required String userID}) {
  // `userID` 是断开连接的节点ID。
}

要查看完整的事件列表,请查看BridgefyDelegate混入。

其他工具
  • 获取当前用户ID:
    String currentUserID = await _bridgefy.currentUserID;
    
  • 获取已连接的节点列表:
    List&lt;String&gt; connectedPeers = await _bridgefy.connectedPeers;
    
  • 检查SDK是否初始化或启动:
    bool isInitialized = await _bridgefy.isInitialized;
    bool isStarted = await _bridgefy.isStarted;
    
  • 获取许可证到期日期:
    DateTime? expirationDate = await _bridgefy.licenseExpirationDate;
    
许可证更新

更新许可证:

await _bridgefy.updateLicense();

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用Bridgefy插件进行近距离通信的示例代码。Bridgefy 是一个用于实现设备间近距离通信的库,非常适合在没有互联网连接的情况下进行设备间的数据交换。

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

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

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

接下来,我们编写Flutter代码来初始化Bridgefy并进行近距离通信。以下是一个基本的示例:

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

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

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

class _MyAppState extends State<MyApp> {
  late BridgefyClient _bridgefyClient;
  late BridgefyChat _chat;
  bool _isConnected = false;

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

  void initBridgefy() async {
    // 初始化Bridgefy客户端
    _bridgefyClient = BridgefyClient(
      apiKey: '你的API_KEY',  // 替换为你的Bridgefy API Key
      listener: BridgefyListener(
        onClientReady: () {
          print('Bridgefy client is ready');
          connectToChat();
        },
        onClientError: (error) {
          print('Bridgefy client error: $error');
        },
        onMessageReceived: (message) {
          print('Received message: ${message.data}');
        },
      ),
    );

    // 启动Bridgefy客户端
    await _bridgefyClient.start();
  }

  void connectToChat() async {
    try {
      // 连接到聊天室(这里假设是单聊,可以使用groupId进行群聊)
      _chat = await _bridgefyClient.createChat(groupId: null);
      setState(() {
        _isConnected = true;
      });
    } catch (e) {
      print('Error connecting to chat: $e');
    }
  }

  void sendMessage() async {
    if (_isConnected) {
      String messageText = 'Hello, this is a nearby message!';
      await _chat.sendMessage(messageText.codeUnits);
      print('Message sent: $messageText');
    } else {
      print('Not connected to chat');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Bridgefy Flutter Demo'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(
                _isConnected ? 'Connected to chat' : 'Connecting to chat...',
                style: TextStyle(fontSize: 20),
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: sendMessage,
                child: Text('Send Message'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  @override
  void dispose() {
    // 停止Bridgefy客户端
    _bridgefyClient.stop();
    super.dispose();
  }
}

注意事项:

  1. API Key:在初始化BridgefyClient时,需要替换'你的API_KEY'为你的实际Bridgefy API Key。
  2. 权限:确保你的Android和iOS项目已经配置了必要的权限,比如位置权限(因为近距离通信通常依赖于设备的地理位置)。
  3. 错误处理:在实际应用中,需要添加更多的错误处理和状态管理,以确保应用的健壮性。
  4. UI设计:这个示例中的UI非常简单,你可以根据自己的需求进行定制。

这个示例展示了如何使用Bridgefy插件在Flutter应用中进行近距离通信的基本流程。你可以根据实际需求进一步扩展和优化这个示例。

回到顶部