Native background location for iOS & Android with drop-in bindings for React Native and Flutter. Enter, exit, and dwell events are delivered from a fully terminated app β no server-side tracking, no always-on battery drain.
.package(url: "β¦/geofence-ios")implementation("io.geofence:sdk:1.0")npm i @geofence/sdkflutter pub add geofence_sdkMost "geofencing" breaks the moment the app is backgrounded or killed. We don't keep a thread running β we hand the fences to the operating system, and let the OS wake your code up. That's the only way it survives a swipe-away or a reboot.
Fences register as native CLCircularRegion monitors held by locationd. Crossing a boundary relaunches your app in the background and fires the delegate β even after force-quit or reboot.
Transitions are delivered by Play Services to a BroadcastReceiver via a PendingIntent. When your app is dead, Android cold-starts a process just to run it β the SDK notifies from persisted content and queues the event, no Activity required.
Enter / exit / dwell delivered whether the app is foreground, backgrounded, force-quit, or post-reboot.
Register thousands of branches. The device watches only the nearest ~18, re-syncing as it moves β no iOS cap headaches.
Draw exact neighbourhoods, malls, or campuses. Bounding-circle monitoring refined with point-in-polygon accuracy.
Events captured while offline are stored and uploaded later with idempotent de-duplication β nothing lost, nothing doubled.
Duplicate-delivery debounce, boundary-flap suppression, dwell delays, and cooldowns so users aren't spammed.
Manage zones and campaigns, view visit analytics, and issue per-customer API keys with app-binding & usage caps.
Add the package for your platform and configure it with the API key from your trial signup. One import, three lines.
Draw circle or polygon zones and attach notification campaigns. Changes sync to every device automatically.
Your users get notified at the right place and time, even with your app closed. Watch the visits roll into analytics.
import GeofenceSDK
let sdk = GeofenceSDK.shared
sdk.configure(baseUrl: "https://api.geofence.io",
apiKey: "gf_live_β¦")
let status = await sdk.requestPermissions()
let fences = try await sdk.start()
// enter / exit / dwell now fire β even after force-quit.val sdk = GeofenceSdk.getInstance(context)
sdk.configure(GeofenceConfig(
baseUrl = "https://api.geofence.io",
apiKey = "gf_live_β¦",
))
val status = sdk.permissionStatus()
val fences = sdk.start() // suspend; returns watched fencesimport { GeofenceSDK } from '@geofence/sdk'
await GeofenceSDK.init({
baseUrl: 'https://api.geofence.io',
apiKey: 'gf_live_β¦',
})
await GeofenceSDK.requestPermissions()
const fences = await GeofenceSDK.start()Every plan includes all four platforms, background firing, polygon zones, and the dashboard. You're only gated by scale.
Indicative pricing for the mockup β final tiers & limits are yours to set. Production keys are activated with a single email while you're pre-billing.
Questions about integration, pricing, or production access? Send us a note and we'll get back within one business day.
β support@geofencekit.comGrab a free key, add the SDK, draw a zone. You'll see your first enter event β from a closed app β before your coffee's cold.