geofencing_api 套件讓開發者能在 Android、iOS 與 Web 平台上實作圓形與多邊形的地理圍欄。它提供統一介面,用於監控地理邊界,並在使用者進入或離開定義區域時觸發事件。適用於位置感知應用程式,支援即時地理位置追蹤與區域監控,設定簡單。此外,該套件可無縫整合至 Flutter 應用,並利用原生地理圍欄功能以達成最佳效能與電池效率。
適用情境
基於位置的通知
資產追蹤
接近警示
地理圍欄簽到
即時位置監控
主要特色
圓形和多邊形地理圍欄
跨平台支援(Android、iOS、Web)
原生效能整合
事件驅動的區域監控
區域管理的簡單 API
適合對象
具有定位服務的行動應用程式
現場作業追蹤
智慧城市場應用
零售近距離行銷
物流和配送系統
使用建議
需要位置權限
啟用監控後,電池使用量可能會增加
Web 支持僅限於現代瀏覽器
多邊形精度取決於設備的準確性
某些平台上的背景執行限制
原始 README
以下為關聯原始碼儲存庫的 README 原文快照,最新內容請造訪原始碼儲存庫。
This plugin is used to implement circular and polygon geofencing service.
[!CAUTION]
It does not use the geofencing api implemented in the platform.
Therefore, battery efficiency cannot be guaranteed.
Instead, this plugin can provide more accurate and real-time geofencing by navigating your location while your app is alive.
Features
Can create a circular type geofence.
Can create a polygon type geofence.
Can listen to geofence status changes in real-time.
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Used to collect location data in the background.</string><key>NSLocationAlwaysUsageDescription</key><string>Used to collect location data in the background.</string><key>UIBackgroundModes</key><array><string>fetch</string><string>location</string></array>
Request location permission. To start the geofencing service, the permission result must be always or whileInUse.
Future<bool> requestLocationPermission({bool background = false}) async {
if (!awaitGeofencing.instance.isLocationServicesEnabled) {
// Location services is disabled.returnfalse;
}
LocationPermission permission =
awaitGeofencing.instance.getLocationPermission();
if (permission == LocationPermission.denied) {
// Android: ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION// iOS 12-: NSLocationWhenInUseUsageDescription or NSLocationAlwaysAndWhenInUseUsageDescription// iOS 13+: NSLocationWhenInUseUsageDescription
permission = awaitGeofencing.instance.requestLocationPermission();
}
if (permission == LocationPermission.denied ||
permission == LocationPermission.deniedForever) {
// Location permission has been ${permission.name}.returnfalse;
}
// Web: Only allow whileInUse permission.if (kIsWeb || kIsWasm) {
returntrue;
}
// Android: You must request location permission one more time to access background location.// iOS 12-: You can request always permission through the above request.// iOS 13+: You can only request whileInUse permission through the above request.// When the app enters the background, a prompt will appear asking for always permission.if (Platform.isAndroid &&
background &&
permission == LocationPermission.whileInUse) {
// You need a clear explanation of why your app's feature needs access to background location.// https://developer.android.com/develop/sensors-and-location/location/permissions#request-background-location// Android: ACCESS_BACKGROUND_LOCATION
permission = awaitGeofencing.instance.requestLocationPermission();
if (permission != LocationPermission.always) {
// Location permission must always be granted to collect location in the background.returnfalse;
}
}
returntrue;
}
Set up the geofencing service.
interval: The millisecond interval at which to update the geofence status. This value may be delayed by device platform limitations. The default is 5000.
accuracy: The accuracy of the geofencing service in meters. The default is 100.
statusChangeDelay: The status change delay in milliseconds. GeofenceStatus.enter and GeofenceStatus.exit events may be called frequently when the location is near the boundary of the geofence. If the option value is too large, real-time geofencing is not possible, so use it carefully. The default is 10000.
allowsMockLocation: Whether to allow mock location. The default is false.
printsDebugLog: Whether to print debug logs in plugin. The default is true.