Wenn du eine Alternative zu Transistorsoft Background Geolocation für Capacitor suchst, ist die nächstliegende kostenlose Option @capgo/background-geolocation. Es ist MIT-lizenziert, verfügbar für Capacitor 8, verfolgt den Standort im Hintergrund auf iOS und Android, unterstützt natives Geofencing und kann Standorte per POST an deinen Server senden – direkt aus nativem code. Es kopiert nicht jede Funktion von Transistorsoft, daher erklärt dieser Guide, was du gewinnst, was du aufgibst und wie du migrierst.
Warum Teams nach einer Transistorsoft-Alternative suchen
Das Transistorsoft-SDK ist ein ausgereiftes Produkt, das seit Jahren Flotten-, Liefer- und Fitness-Apps antreibt. Nur wenige verlassen es, weil es defekt ist. Sie wechseln aus diesen Gründen:
Release-Builds benötigen jetzt einen Key auf beiden Plattformen
Laut Transistorsoft-Changelog ist Version 9.0.0 auf JWT-basierte Lizenzschlüssel umgestiegen und verlangt nun auch auf iOS einen Key. Vor v9 waren nur Android-Release-Builds gesperrt. Schlüssel aus v8 und älteren Versionen funktionieren nicht mit v9, daher bedeutet ein Plugin-Upgrade auch, neue Schlüssel über deren Dashboard zu generieren.
Ihr Shop verkauft dauerhafte Lizenzen pro App-Identifier, von einem bis zu 100 Schlüsseln, inklusive eines Jahres Updates. Add-ons wie Polygon-Geofencing sind nun in denselben Schlüssel codiert. Für eine App ist das ein fairer Preis. Für eine Agentur mit 20 White-Label-Apps oder ein Unternehmen, das separate Staging- und Production-Bundle-IDs ausliefert, wird die Lizenz zu einem Posten, den jemand jedes Jahr verwalten muss.
Die Core-Engine ist ein Binary
Der Capacitor-Wrapper ist offen, aber die Location-Engine wird als vorgebautes iOS-Framework und eine Android-Bibliothek von Maven ausgeliefert. Wenn auf einem bestimmten Android-OEM etwas Seltsames passiert, kannst du den code nicht lesen oder patchen, der entscheidet, wann ein Fix aufgezeichnet wird. Manche Teams akzeptieren das. Teams mit strengen Audit-Anforderungen oder die einfach nur den code in Xcode durchgehen wollen, tun das oft nicht.
Konfigurationsoberfläche
Das Plugin bietet ein sehr großes Konfigurationsobjekt: Motion Detection, Scheduling, Odometer, SQLite-Persistenz, HTTP-Sync-Templates, Headless Tasks und mehr. Wenn du alles davon brauchst, ist das großartig. Wenn du nur „meine Position alle 30 Sekunden senden, während der Fahrer im Dienst ist“ brauchst, sind es viele Einstellungen, die man verstehen muss.
Was @capgo/background-geolocation leistet
Das Capgo-Plugin entstand aus der langen Geschichte der Cordova-Background-Geolocation-Forks und dem leichtgewichtigen Community-Capacitor-Plugin. Ziel sind präzise Positionsbestimmungen, zuverlässiger Hintergrundbetrieb und natives Geofencing – ganz ohne Lizenz.
Aktuelle Funktionen in der 8.x-Linie:
- Standort-Updates im Vordergrund und Hintergrund über einen einzigen
start()Aufruf mit Callback. distanceFilterundminIntervalMsum zu steuern, wie häufig Punkte eintreffen.- Natives HTTP-POST für jeden Standort an eine
urldie du konfigurierst, mit benutzerdefiniertenheadersundupdateHeaders()für die Token-Rotation. - Native kreisförmige Geofences mit Enter- und Exit-Events sowie ein natives Webhook für Übergänge.
checkPermissions()undrequestPermissions()die iOS „When In Use“ von „Always“ unterscheiden.openSettings()für Nutzer, die die Berechtigung verweigert haben.setPlannedRoute()um einen Ton abzuspielen, wenn der Nutzer eine geplante Route verlässt.- Optionales Android
networkFallbackdas GPS-Lücken mit Netzwerkpositionen füllt. - Eine Web-Implementierung für Entwicklung und Browser-Tests.
Feature-Vergleich
| Funktion | Transistorsoft (v9) | @capgo/background-geolocation |
|---|---|---|
| Lizenz | Kostenpflichtiger Key für Release-Builds, pro App-ID | MIT, kostenlos |
| Quelle | Wrapper open, Engine als Binary | Vollständig Open Source |
| Capacitor 8 | Ja | Ja |
| Background-Tracking | Ja | Ja |
| State Machine für Bewegungserkennung | Ja | Nein |
| Nativer HTTP-Upload | Ja, mit SQLite-Queue und Batching | Ja, Best-Effort-POST, keine On-Disk-Queue |
| Geofencing | Ja, Polygon als Add-on | Zirkuläre Geofences auf iOS und Android |
| Geofence-Events an deinen Server | Ja, via HTTP-Sync | Ja, nativer Webhook |
| Tracking nach dem Wegwischen der App (Android) | Ja | Ja, mit url Setzen |
| Tracking nach Neustart | Ja (startOnBoot) |
Nein |
| Scheduling, Odometer | Ja | Nein |
Die ehrliche Zusammenfassung: Transistorsoft ist die bessere Wahl, wenn die App selbst entscheiden muss, wann sie trackt, Neustarts übersteht und wochenlang Punkte offline puffert. Das Capgo-Plugin ist die bessere Wahl, wenn der Nutzer oder deine App das Tracking explizit startet und du präzise Fixes ohne Lizenz und lesbare code willst.
Installieren und konfigurieren
bun add @capgo/background-geolocation
bunx cap sync
iOS
Füge die Nutzungszwecke und den Hintergrundmodus für Standortdaten hinzu zu ios/App/App/Info.plist:
<key>NSLocationWhenInUseUsageDescription</key>
<string>We use your location to show your route.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>We use your location in the background to record your route while the phone is locked.</string>
<key>UIBackgroundModes</key>
<array>
<string>location</string>
</array>
Denke daran, dass App-Store-Uploads seit April 2026 Xcode 26 erfordern. Wenn dein CI-Image älter ist, wird der Upload abgelehnt, selbst wenn der Build erfolgreich ist. Capgo Build läuft auf aktuellen Xcode-Images, falls du keine Macs pflegen möchtest.
Android
Das Plugin verwendet einen Vordergrund-Dienst mit einer persistenten Benachrichtigung, während im Hintergrund getrackt wird. Auf Android 13 und neuer wird POST_NOTIFICATIONS nach der Standortfreigabe angefordert, damit die Benachrichtigung angezeigt werden kann.
Setzen Sie useLegacyBridge in einem capacitor.config.ts. Ohne sie können Standort-Callbacks an die WebView nach etwa fünf Minuten im Hintergrund aufhören:
import type { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = {
appId: 'com.example.tracker',
appName: 'Tracker',
webDir: 'dist',
android: {
useLegacyBridge: true,
},
};
export default config;
Du kannst den Namen, das Icon und die Farbe des Benachrichtigungskanals über strings.xml Schlüssel anpassen, die in der Plugin-Docs.
Tracking starten
import { BackgroundGeolocation } from '@capgo/background-geolocation';
export async function startShift(token: string) {
await BackgroundGeolocation.start(
{
backgroundTitle: 'Shift in progress',
backgroundMessage: 'Your location is shared with dispatch until you end the shift.',
requestPermissions: true,
stale: false,
distanceFilter: 25,
url: 'https://api.example.com/v1/locations',
headers: { Authorization: `Bearer ${token}` },
minIntervalMs: 30_000,
},
(location, error) => {
if (error) {
if (error.code === 'NOT_AUTHORIZED') {
BackgroundGeolocation.openSettings();
}
console.error(error);
return;
}
if (location) {
// Update the UI while the WebView is alive
console.log(location.latitude, location.longitude, location.accuracy);
}
},
);
}
export async function endShift() {
await BackgroundGeolocation.stop();
}
Zwei Optionen sind wichtiger, als sie aussehen:
backgroundMessageschaltet Hintergrund-Updates auf beiden Plattformen ein. Ohne sie sind Updates nur im Vordergrund garantiert. Auf Android ist es auch der Text der Foreground-Service-Benachrichtigung.urlsendet jeden Punkt von nativem code mit einem"source": "native"Feld im Body. Dieser Pfad hängt nicht von der WebView ab, was den Datenfluss sicherstellt, wenn Android die WebView drosselt oder iOS JavaScript suspendiert. Auf Android machturlden Service zusätzlich sticky, sodass Punkte auch nach dem Wegwischen der App beim Server ankommen. Für zuverlässiges Hintergrund-Tracking werden beide Optionen benötigt.
Wenn der Access Token abläuft, rotiere ihn, ohne die Sitzung neu zu starten:
await BackgroundGeolocation.updateHeaders({
headers: { Authorization: `Bearer ${newToken}` },
});
Geofencing
Transistorsoft-Nutzer verlassen sich oft auf dessen Geofencing. Das Capgo-Plugin deckt kreisförmige Regionen mit nativen APIs auf beiden Plattformen ab:
import { BackgroundGeolocation } from '@capgo/background-geolocation';
await BackgroundGeolocation.setupGeofencing({
url: 'https://api.example.com/v1/geofence-events',
headers: { Authorization: 'Bearer <token>' },
notifyOnEntry: true,
notifyOnExit: true,
payload: { driverId: 'd-381' },
backgroundLocation: true, // Android only, needs ACCESS_BACKGROUND_LOCATION in your manifest
});
await BackgroundGeolocation.addGeofence({
identifier: 'depot-north',
latitude: 48.8584,
longitude: 2.2945,
radius: 200,
payload: { depotId: 'north' },
});
await BackgroundGeolocation.addListener('geofenceTransition', (event) => {
console.log(event.identifier, event.transition, event.payload);
});
iOS-Geofencing benötigt die Berechtigung „Immer“. Auf Android 10 und neuer benötigt Hintergrund-Geofencing ACCESS_BACKGROUND_LOCATION, was das Plugin nicht automatisch hinzufügt. Füge es nur hinzu, wenn deine App die Google-Play-Genehmigung für Hintergrund-Ortung hat. Wenn deine Geofences auf iOS seltsam funktionieren, lies unseren Leitfaden zu Warum Geofences auf iOS nicht ausgelöst werden.
Migration von Transistorsoft
Die APIs unterscheiden sich, daher solltest du einen kleinen Rewrite deines Location-Services planen, statt nur Suchen und Ersetzen zu verwenden.
| Transistorsoft-Konzept | Capgo-Äquivalent |
|---|---|
ready(config) + start() |
start(options, callback) |
onLocation Listener |
Der start() Callback |
stop() |
stop() |
distanceFilter |
distanceFilter |
url, headers HTTP-Sync |
url, headers, updateHeaders() |
addGeofence / onGeofence |
addGeofence / geofenceTransition |
removeGeofence(s) |
removeGeofence / removeAllGeofences |
getGeofences |
getMonitoredGeofences |
| Permission-Helfer | checkPermissions / requestPermissions |
| Bewegungserkennung, Zeitplan, Odometer | In deiner App-Logik oder auf dem Server implementieren |
Schritte, die in der Praxis gut funktionieren:
- Kapseln Sie den Standortzugriff hinter einem kleinen Service in Ihrer App ein (
startTracking,stopTracking,onPoint). Die meisten Apps haben bereits einen. - Implementieren Sie den Service mit dem Capgo-Plugin hinter einem Feature Flag oder einem separaten Build.
- Stellen Sie sicher, dass Ihr Backend das Standort-JSON des Plugins akzeptiert. Der Body entspricht dem
Location-Typ (latitude,longitude,accuracy,speed,bearing,timeund so weiter) plussource. - Entfernen Sie das Transistorsoft-Plugin, seine Lizenzschlüssel, zusätzliche Gradle-Variablen und die Hintergrundmodi, die Sie nicht mehr benötigen.
- Testen Sie auf echten Geräten mit gesperrtem Bildschirm für mindestens 30 Minuten, auf mindestens einem Pixel, einem Samsung und einem iPhone.
Änderungen an nativen Plugins erfordern einen neuen Store-Build. Sobald dieser Build live ist, können Sie JavaScript-Fixes für Ihre Tracking-UI weiterhin mit Capgo Live Updates ohne einen weiteren Review-Zyklus.
Wo das Capgo Plugin nicht ausreicht
Das solltest du vor dem Wechsel wissen:
- Keine persistente Queue. Native POSTs sind Best Effort. Wenn das Gerät offline ist, werden fehlgeschlagene Punkte geloggt und verworfen. Wenn du keinen Punkt verlieren darfst, speichere die Punkte zusätzlich lokal im Callback (z. B. mit SQLite) und synchronisiere sie aus der App, oder bleib bei Transistorsoft.
- Kein Neustart nach Reboot. Das Tracking wird beim nächsten Öffnen der App fortgesetzt.
- Keine automatische Bewegungserkennung. Die App entscheidet selbst über Start und Stopp.
- Beendigung unter iOS. Wenn der User die App unter iOS zwangsweise beendet, stoppen die normalen Location-Updates. Das ist eine OS-Regel, keine Einschränkung des Plugins.
Mehr dazu, was Capacitor im Hintergrund ausführen kann, findest du hier: wie Background Tasks in Capacitor funktionieren,.
Fehlerbehebung
Auf Android stoppen Updates nach wenigen Minuten. Prüfen useLegacyBridge: true, stelle sicher, dass die Foreground-Service-Benachrichtigung sichtbar ist, und deaktiviere die Akkuoptimierung für die App beim Testen auf aggressiven OEMs. Nutze die url Option, damit die Zustellung nicht vom WebView abhängt.
Keine Updates im Hintergrund auf iOS. Bestätigen UIBackgroundModes enthält location, den du übergeben hast backgroundMessage, und dass du aufgerufen hast start() , während die App im Vordergrund war. Unser Guide zu Warum iOS Hintergrund-Positionsaktualisierungen stoppt erklärt jede Ursache im Detail.
NOT_AUTHORIZED Fehler aus. Der Nutzer hat den Standort verweigert. Rufe openSettings() auf, nachdem du erklärt hast, warum die App ihn benötigt.
Unruhige Punkte in Innenräumen. Erhöhen distanceFilter, ignoriere Punkte mit großen accuracy -Werten und erwäge auf Android networkFallback: true nur, wenn grobe Genauigkeit ausreicht.
Simulierte Standorte in einer Liefer-App. Jedes Location hat ein simulated flag. Für strengere Checks, füge hinzu @capgo/capacitor-mock-location-detector.
Auswahl
Wähle Transistorsoft, wenn du Motion-basiertes Auto-Start, Reboot-Persistenz, Offline-Queue und Polygon-Geofences brauchst und die Lizenzkosten passen. Wähle @capgo/background-geolocation wenn dein Tracking session-basiert ist, du lesbaren code und keine pro-App-Lizenz möchtest und es dir recht ist, das Queueing in deiner App zu verwalten. Wenn du mehrere kostenpflichtige native SDKs auf einmal ersetzt, ist die Ionic Enterprise Plugin Alternativen Seite listet die anderen Capgo-Ersatzlösungen auf.