搜索插件、代码仓与 APP 分类

插件详情v0.5.1

flutter_beacon

用于在 Android 和 iOS 上扫描并作为信标(iBeacon)传输的 Flutter 插件。

AndroidiOS
近 30 天下载
282
喜欢数
88
Pub 分数
140

安装插件

flutter pub add flutter_beacon

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

Flutter Beacon 是一个跨平台插件,可在 Android 和 iOS 设备上实现蓝牙低能耗(BLE)信标扫描和传输。它支持 iBeacon 功能,使开发者能够检测附近的信标或广播信标信号。该插件可无缝集成到 Flutter 应用中,为发现和广告模式提供简单易用的 API。适用于基于距离的应用程序,如室内导航、资产追踪和位置感知服务。与两个平台上的原生 BLE 功能兼容。

适合场景

  • 室内导航系统
  • 资产和设备追踪
  • 近场营销
  • 基于位置的触发
  • 智能零售体验

主要特点

  • iBeacon 扫描和传输
  • 跨平台支持(Android 和 iOS)
  • 简单的 Flutter API
  • 实时信标检测
  • 低功耗

适合对象

  • 开发接近性应用的开发者
  • 需要室内定位的应用
  • 零售和酒店解决方案
  • 物联网设备集成
  • 基于事件的移动应用

使用建议

  • 两个平台都需要蓝牙权限
  • 后台操作可能受到操作系统限制
  • 在连续扫描期间应监控电池使用情况
  • 准确性取决于环境因素
  • iOS 后台模式需要额外配置

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

Flutter Beacon

Pub GitHub Build Coverage Status FOSSA Status codecov

Flutter plugin to work with iBeacons.

An hybrid iBeacon scanner and transmitter SDK for Flutter plugin. Supports Android API 18+ and iOS 8+.

Features:

  • Automatic permission management
  • Ranging iBeacons
  • Monitoring iBeacons
  • Transmit as iBeacon

Installation

Add to pubspec.yaml:

dependencies:
  flutter_beacon: latest
Setup specific for Android

For target SDK version 29+ (Android 10, 11) is necessary to add manually ACCESS_FINE_LOCATION

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

and if you want also background scanning:

<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
Setup specific for iOS

In order to use beacons related features, apps are required to ask the location permission. It's a two step process:

  1. Declare the permission the app requires in configuration files
  2. Request the permission to the user when app is running (the plugin can handle this automatically)

The needed permissions in iOS is when in use.

For more details about what you can do with each permission, see:
https://developer.apple.com/documentation/corelocation/choosing_the_authorization_level_for_location_services

Permission must be declared in ios/Runner/Info.plist:

<dict>
  <!-- When in use -->
  <key>NSLocationWhenInUseUsageDescription</key>
  <string>Reason why app needs location</string>
  <!-- Always -->
  <!-- for iOS 11 + -->
  <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
  <string>Reason why app needs location</string>
  <!-- for iOS 9/10 -->
  <key>NSLocationAlwaysUsageDescription</key>
  <string>Reason why app needs location</string>
  <!-- Bluetooth Privacy -->
  <!-- for iOS 13 + -->
  <key>NSBluetoothAlwaysUsageDescription</key>
  <string>Reason why app needs bluetooth</string>
</dict>

iOS Troubleshooting

  • Example code works properly only on physical device (bluetooth on simulator is disabled)
  • How to deploy flutter app on iOS device Instruction
  • If example code don't works on device (beacons not appear), please make sure that you have enabled
    Location and Bluetooth (Settings -> Flutter Beacon)

How-to

Ranging APIs are designed as reactive streams.

  • The first subscription to the stream will start the ranging
Initializing Library
try {
  // if you want to manage manual checking about the required permissions
  await flutterBeacon.initializeScanning;
  
  // or if you want to include automatic checking permission
  await flutterBeacon.initializeAndCheckScanning;
} on PlatformException catch(e) {
  // library failed to initialize, check code and message
}
Ranging beacons
final regions = <Region>[];

if (Platform.isIOS) {
  // iOS platform, at least set identifier and proximityUUID for region scanning
  regions.add(Region(
      identifier: 'Apple Airlocate',
      proximityUUID: 'E2C56DB5-DFFB-48D2-B060-D0F5A71096E0'));
} else {
  // android platform, it can ranging out of beacon that filter all of Proximity UUID
  regions.add(Region(identifier: 'com.beacon'));
}

// to start ranging beacons
_streamRanging = flutterBeacon.ranging(regions).listen((RangingResult result) {
  // result contains a region and list of beacons found
  // list can be empty if no matching beacons were found in range
});

// to stop ranging beacons
_streamRanging.cancel();
Monitoring beacons
final regions = <Region>[];

if (Platform.isIOS) {
  // iOS platform, at least set identifier and proximityUUID for region scanning
  regions.add(Region(
      identifier: 'Apple Airlocate',
      proximityUUID: 'E2C56DB5-DFFB-48D2-B060-D0F5A71096E0'));
} else {
  // Android platform, it can ranging out of beacon that filter all of Proximity UUID
  regions.add(Region(identifier: 'com.beacon'));
}

// to start monitoring beacons
_streamMonitoring = flutterBeacon.monitoring(regions).listen((MonitoringResult result) {
  // result contains a region, event type and event state
});

// to stop monitoring beacons
_streamMonitoring.cancel();

Under the hood

Author

Flutter Beacon plugin is developed by Eyro Labs. You can contact me at <maulana@cubeacon.com>.

所属分类

源码仓库

使用此插件的项目

暂无相关数据。