Flutter蓝牙设备管理插件beaconsmind_sdk的使用

Flutter蓝牙设备管理插件beaconsmind_sdk的使用

概述

beaconsmind_sdk 是一个用于 Flutter 应用的蓝牙设备管理插件。它可以帮助开发者轻松集成蓝牙设备(如信标)的管理功能,包括初始化、认证、通知处理以及信标设备的监听等。


前置条件

作为 Beaconsmind 客户端,会获得一个由 Beaconsmind 提供的服务环境,该环境包含 Beaconsmind 提供的所有服务。要正确访问 Beaconsmind API 和使用 SDK,需要提供环境的主机名。

示例:

https://adidas.bms.beaconsmind.com

请与 Beaconsmind 支持团队联系以获取有效环境和主机名的相关信息。


1. 安装

在项目的 pubspec.yaml 文件中添加 beaconsmind_sdk 依赖项:

dependencies:
  beaconsmind_sdk: ^x.x.x

然后运行以下命令安装:

flutter pub get

2. 平台设置

iOS

请遵循 此指南 进行 iOS 平台的配置。

Android

请遵循 此指南 进行 Android 平台的配置。


3. 初始化 SDK

调用 initialize() 方法来初始化 SDK,并尝试检索已登录用户。

import 'package:beaconsmind_sdk/beaconsmind_sdk.dart';

void initializeSDK() async {
  await Beaconsmind.instance.initialize(
    hostname: 'https://test-develop-suite.azurewebsites.net/', // 替换为实际的主机名
    appVersion: '1.0.0',
    androidNotificationBadgeName: 'ic_beacons',
    androidNotificationChannelName: 'beaconsmind',
    androidNotificationTitle: 'Beaconsmind sdk demo',
    androidNotificationText: 'Listening to beacons',
  );
}

4. 权限管理

beaconsmind_sdk 需要蓝牙和位置权限(whenInUsealways)来检测附近的信标设备,还需要通知权限来发送优惠信息。

使用 permission_handler 请求权限

可以考虑使用 permission_handler 包来请求必要的权限。

示例代码
import 'package:permission_handler/permission_handler.dart';

Future<void> requestPermissions() async {
  await Permission.bluetooth.request();
  await Permission.location.request();
  await Permission.notification.request();
}
测试模式

为了简化测试,可以使用 Beaconsmind.initializeDevelop() 方法一次性请求所有必需的权限。


5. 用户认证

使用 Beaconsmind 认证机制

如果客户数据存储在 Beaconsmind 后端,可以使用 UserManager.login() 方法进行用户认证。

登录现有用户
try {
  final user = await Beaconsmind.instance.login(
    username: _usernameController.text,
    password: _passController.text,
  );
  print('登录成功: $user');
} catch (e) {
  final snackBar = SnackBar(
    content: Text(e.toString()),
  );
  ScaffoldMessenger.of(context).showSnackBar(snackBar);
}
注册新用户
try {
  final user = await Beaconsmind.instance.signup(
    username: _emailController.text,
    firstName: _firstNameController.text,
    lastName: _lastNameController.text,
    password: _passController.text,
    confirmPassword: _passConfirmController.text,
  );
  print('注册成功: $user');
  Navigator.of(context).pop();
} catch (e) {
  final snackBar = SnackBar(
    content: Text(e.toString()),
  );
  ScaffoldMessenger.of(context).showSnackBar(snackBar);
}

使用自定义认证机制

如果客户数据存储在客户端后端,则需要在使用 Beaconsmind API 前完成认证。每次用户认证完成后,调用 Beaconsmind.instance.importAccount() 方法将基本客户数据发送到 Beaconsmind。


6. 监听 SDK 状态变化

SDK 提供了一个 Stream 来监听用户登录/登出状态的变化。

Beaconsmind.instance.contextEvents().listen((BeaconsmindSdkContext? event) {
  if (event == null) {
    print('用户未登录');
  } else {
    print('用户已登录: ${event.username}');
  }
});

7. 通知处理

SDK 使用 APNS(Apple Push Notification Service)处理 iOS 通知,使用 Firebase 处理 Android 通知。

设置设备令牌

根据 Beaconsmind 支持团队的要求选择合适的推送通知提供商。

如果 FCM 用于 Android 和 iOS
String? fcmToken = await FirebaseMessaging.instance.getToken();
await Beaconsmind.registerDeviceToken(
  token: fcmToken,
  platformType: PlatformType.fcm,
);
如果 FCM 用于 Android,APNS 用于 iOS
if (Platform.isAndroid) {
  final fcmToken = await FirebaseMessaging.instance.getToken();
  if (fcmToken != null) {
    await Beaconsmind.instance.registerDeviceToken(
      deviceToken: fcmToken,
      platformType: PlatformType.fcm,
    );
  }
}

if (Platform.isIOS) {
  final apnsToken = await getApnsToken();
  if (apnsToken != null) {
    await Beaconsmind.instance.registerDeviceToken(
      deviceToken: apnsToken,
      platformType: PlatformType.apns,
    );
  }
}

处理多个推送通知提供商

如果同时使用多个推送通知包(例如 moengage_flutterfirebase_messaging),需要通过代理服务转发通知。

实现步骤
  1. 添加 FirebaseMessagingServiceProxy.kt 文件到 Android 项目。
  2. FirebaseMessagingServiceProxy 文件中更新 messagingServices 列表。
  3. AndroidManifest.xml 中注册代理服务。

8. 优惠处理

获取优惠信息

// 获取单个优惠
final offer = await Beaconsmind.instance.loadOffer(id: 123);

// 获取当前活跃的优惠列表
final offers = await Beaconsmind.instance.loadOffers();

与优惠交互

// 标记优惠为已接收
await Beaconsmind.instance.markOfferAsReceived(offerId: 123);

// 标记优惠为已阅读
await Beaconsmind.instance.markOfferAsRead(offerId: 123);

// 标记优惠为已兑换
await Beaconsmind.instance.markOfferAsRedeemed(offerId: 123);

9. 信标设备操作

信标设备交互

// 开始监听信标设备
await Beaconsmind.instance.startListeningBeacons();

// 停止监听信标设备
await Beaconsmind.instance.stopListeningBeacons();

// 获取信标设备摘要信息
final summary = await Beaconsmind.instance.getBeaconsSummary();

更多信标设备相关信息


10. 资源释放

在应用退出时,调用 dispose() 方法清理资源并防止内存泄漏。

Beaconsmind.instance.dispose();

平台特定注意事项

Android

如果使用 ProGuard 且 SDK 版本低于 1.7.0,请在 proguard-rules.pro 文件中添加以下规则:

-keep class com.beaconsmind.api.models** { *; }

更多关于Flutter蓝牙设备管理插件beaconsmind_sdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter蓝牙设备管理插件beaconsmind_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


beaconsmind_sdk 是一个用于在 Flutter 应用中管理蓝牙信标(Beacon)设备的插件。它可以帮助你扫描、连接、以及管理附近的蓝牙信标设备。以下是使用 beaconsmind_sdk 插件的基本步骤:

1. 添加依赖

首先,在你的 pubspec.yaml 文件中添加 beaconsmind_sdk 插件的依赖:

dependencies:
  beaconsmind_sdk: ^1.0.0  # 请使用最新版本

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

2. 初始化 SDK

在使用 beaconsmind_sdk 之前,你需要在你的应用中初始化 SDK。通常,你可以在 main.dart 文件中进行初始化。

import 'package:beaconsmind_sdk/beaconsmind_sdk.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 Beaconsmind SDK
  await BeaconsmindSdk.initialize(
    apiKey: 'YOUR_API_KEY',  // 你的 API Key
    appId: 'YOUR_APP_ID',    // 你的 App ID
  );

  runApp(MyApp());
}

3. 扫描蓝牙信标

你可以使用 BeaconsmindSdk 提供的 API 来扫描附近的蓝牙信标设备。

import 'package:beaconsmind_sdk/beaconsmind_sdk.dart';

class BeaconScanner extends StatefulWidget {
  @override
  _BeaconScannerState createState() => _BeaconScannerState();
}

class _BeaconScannerState extends State<BeaconScanner> {
  List<Beacon> beacons = [];

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

  void startScanning() async {
    BeaconsmindSdk.startScanning(
      onBeaconDiscovered: (beacon) {
        setState(() {
          beacons.add(beacon);
        });
      },
      onScanError: (error) {
        print('Scan error: $error');
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Beacon Scanner'),
      ),
      body: ListView.builder(
        itemCount: beacons.length,
        itemBuilder: (context, index) {
          return ListTile(
            title: Text(beacons[index].name),
            subtitle: Text(beacons[index].uuid),
          );
        },
      ),
    );
  }
}

4. 停止扫描

当你不再需要扫描信标时,可以调用 stopScanning 方法。

BeaconsmindSdk.stopScanning();

5. 处理信标事件

你可以监听信标的状态变化,例如信标进入或离开范围。

BeaconsmindSdk.setBeaconEventListener(
  onBeaconEnter: (beacon) {
    print('Beacon entered: ${beacon.name}');
  },
  onBeaconExit: (beacon) {
    print('Beacon exited: ${beacon.name}');
  },
);

6. 处理权限

在使用蓝牙功能时,确保你已经在 AndroidManifest.xmlInfo.plist 中添加了必要的权限。

Android:

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

iOS:

<key>NSBluetoothAlwaysUsageDescription</key>
<string>We need access to Bluetooth to scan for beacons.</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>We need access to location to scan for beacons.</string>

7. 处理错误

在使用过程中,可能会遇到各种错误,例如权限被拒绝、蓝牙未开启等。你可以通过监听错误来处理这些情况。

BeaconsmindSdk.setErrorListener(
  onError: (error) {
    print('Error: $error');
  },
);

8. 释放资源

在应用退出或不再需要蓝牙功能时,释放 SDK 占用的资源。

BeaconsmindSdk.dispose();
回到顶部