background_location_tracker
안드로이드 및 iOS용 백그라운드 위치 추적을 허용하는 플러터 플러그인
Flutter 백그라운드 위치 추적기 플러그인. (Android / iOS)
{"sdk":"flutter"}{"sdk":"flutter"}아래는 영문 원문 스냅샷입니다. 최신 내용은 GitHub에서 확인하세요.
A new Flutter plugin that allows you to track the background location for Android & iOS
Build Status Coverage Status pub package
Compile sdk should be at 29 at least.
android {
...
compileSdkVersion 29
...
defaultConfig {
...
targetSdkVersion 29
...
}
...
}
Add the correct permission descriptions
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Your description why you should use NSLocationAlwaysAndWhenInUseUsageDescription</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>Your description why you should use NSLocationAlwaysAndWhenInUseUsageDescription</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Your description why you should use NSLocationAlwaysAndWhenInUseUsageDescription</string>
Add the background location updates in xcode
Or add the info to the Info.plist
<key>UIBackgroundModes</key>
<array>
<string>location</string>
</array>
import UIKit
import Flutter
import background_location_tracker
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(_ application: UIApplication,didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
GeneratedPluginRegistrant.register(with: self)
// Register plugins for background execution - this method is deprecated
// but kept for backward compatibility
BackgroundLocationTrackerPlugin.setPluginRegistrantCallback { registry in
GeneratedPluginRegistrant.register(with: registry)
}
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
Make sure you set the @pragma('vm:entry-point') to make sure you can find the callback in release.
@pragma('vm:entry-point')
void backgroundCallback() {
BackgroundLocationTrackerManager.handleBackgroundUpdated(
(data) async => Repo().update(data),
);
}
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await BackgroundLocationTrackerManager.initialize(
backgroundCallback,
config: const BackgroundLocationTrackerConfig(
loggingEnabled: true,
androidConfig: AndroidConfig(
notificationIcon: 'explore',
trackingInterval: Duration(seconds: 4),
distanceFilterMeters: null,
),
iOSConfig: IOSConfig(
activityType: ActivityType.FITNESS,
distanceFilterMeters: null,
restartAfterKill: true,
),
),
);
runApp(MyApp());
}
Future startLocationTracking() async {
await BackgroundLocationTrackerManager.startTracking();
}
Future stopLocationTracking() async {
await BackgroundLocationTrackerManager.stopTracking();
}
This is mostly caused by a misconfiguration of the plugin:
- Android: This plugin now uses Flutter's Plugin V2 embedding pattern (FlutterPluginBinding) so you don't need to set a manual plugin registrant callback.
- iOS: For compatibility with older Flutter versions, the setPluginRegistrantCallback is still available but will be removed in a future version.
If you're using Flutter 1.12 or later, the plugin should work out of the box with the V2 embedding.
This plugin has been updated to use the modern Flutter Plugin V2 embedding pattern with FlutterPluginBinding. If you're using Flutter 1.12 or later, you don't need to make any changes to your app's code.
For backward compatibility, the older methods are still available but marked as deprecated:
BackgroundLocationTrackerPlugin.setPluginRegistrantCallback on AndroidBackgroundLocationTrackerPlugin.setPluginRegistrantCallback on iOSThese methods will be removed in a future version of the plugin.