Se stai cercando un ambiente di geolocalizzazione di background Transistorsoft per Capacitor, l'opzione gratuita più vicina è @capgo/background-geolocation. È licenziato con licenza MIT, invia per Capacitor 8, traccia la posizione in background su iOS e Android, supporta il geofencing nativo e può inviare le posizioni al tuo server da code. Non copia ogni caratteristica di Transistorsoft, quindi questa guida copre cosa guadagni, cosa perdi e come migrare.
Perché le squadre cercano un'alternativa a Transistorsoft
Il Transistorsoft SDK è un prodotto maturo che ha alimentato applicazioni di flotta, consegna e fitness per anni. Le persone raramente lo lasciano perché è rotto. Lasciano per queste ragioni:
Release builds now need a key on both platforms
Secondo il changelog del Transistorsoft, la versione 9.0.0 è passata a una licenza chiave basata su JWT e ha iniziato a richiedere una chiave anche su iOS. Prima della v9, solo le versioni di rilascio Android erano bloccate. Le chiavi da v8 e precedenti non funzionano con v9, quindi l'aggiornamento del plugin significa anche generare nuove chiavi dal loro dashboard.
La loro azienda vende licenze perpetue per identificatore di app, da una chiave a 100 chiavi, con un anno di aggiornamenti inclusi. Aggiunti come la geofencing a poligono sono ora codificati nella stessa chiave. Per un'applicazione singola è un prezzo ragionevole. Per un'agenzia con 20 applicazioni bianche etichette, o per una società che invia bundle ID di staging e produzione separati, la licenza diventa un elemento di spesa che qualcuno deve gestire ogni anno.
L'engine di base è un binario
Il wrapper Capacitor è aperto, ma l'engine di posizione viene inviato come framework iOS precompilato e una libreria Android da Maven. Quando succede qualcosa di strano su un OEM Android specifico, non si può leggere o modificare il code che decide quando registrare un fix. Alcune squadre accettano questo. Le squadre con requisiti di audit rigorosi, o che semplicemente vogliono passare attraverso il code in Xcode, spesso non lo fanno.
Superficie di configurazione
Il plugin espone un oggetto di configurazione molto ampio: rilevamento del movimento, programmazione, odometro, persistenza SQLite, modelli di sincronizzazione HTTP, compiti senza testa e molto altro. Se ne hai bisogno tutto, va bene. Se ne hai bisogno per “invia la mia posizione ogni 30 secondi mentre il conducente è in servizio”, è troppo.
Cosa fa @capgo/background-geolocation
The Capgo plugin started from the long history of the Cordova background geolocation forks and the lightweight community Capacitor plugin. The goal is accurate fixes, reliable background operation and native geofencing, without a license.
Caratteristiche correnti nella linea 8.x:
- Aggiornamenti di posizione in primo piano e in background attraverso un'unica
start()chiamata con un callback. distanceFiltereminIntervalMsControllare la frequenza con cui arrivano i punti.- Invio HTTP nativo di ogni posizione a un
urlche configuri, con token personalizzatiheaderseupdateHeaders()per la rotazione del token. - Cerchi geografici circolari nativi con eventi di ingresso e uscita, e un webhook nativo per le transizioni.
checkPermissions()erequestPermissions()che distinguono iOS When In Use da Always.openSettings()per gli utenti che hanno negato il permesso.setPlannedRoute()per riprodurre un suono quando l'utente lascia un percorso pianificato.- Facoltativo Android
networkFallbackche completa le lacune GPS con posizioni di rete. - Una implementazione web per lo sviluppo e il testing nel browser.
Confronto delle funzionalità
| Capacità | Transistorsoft (v9) | @capgo/geolocalizzazione di background |
|---|---|---|
| License | Chiave di licenza per rilasci, per ID app | MIT, gratuito |
| Fonte | Wrapper aperto, binario motore | Interamente open source |
| Capacitor 8 | Sì | Sì |
| Tracciamento di background | Sì | Sì |
| Stato della macchina di rilevamento del movimento | Sì | No |
| Carica nativo HTTP | Sì, con coda SQLite e batch. | Sì, tentativo POST con coda non persistente |
| Geofencing | Sì, poligono come estensione | Sì, come add-on in forma di poligono |
| Cerchi geofencing su iOS e Android | Eventi geofence inviati al tuo server | Sì, via sincronizzazione HTTP |
| Rilevamento dopo che l'app è stata spinta via (Android) | Sì | Sì, con url impostare |
| Rilevamento dopo il riavvio | Sì (startOnBoot) |
No |
| Pianificazione, odometro | Sì | No |
La somma onesta: Transistorsoft è la scelta migliore quando l'app deve decidere da sola quando rilevare, sopravvivere ai riavvii e memorizzare settimane di punti offline. Il plugin Capgo è la scelta migliore quando l'utente o la tua app inizia esplicitamente il rilevamento, e desideri ottenere posizioni precise senza licenza e con code leggibili.
Installare e configurare
bun add @capgo/background-geolocation
bunx cap sync
iOS
Aggiungi le stringhe di utilizzo e il modulo di background location a 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>
Ricorda che gli upload su App Store richiedono Xcode 26 a partire da aprile 2026. Se il tuo immagine CI è più vecchia, l'upload verrà rifiutato anche se il build ha successo. Capgo Costruzione funziona con le immagini Xcode correnti se non desideri mantenere Mac.
Android
Il plugin utilizza un servizio in primo piano con una notifica persistente mentre traccia in background. Su Android 13 e successive, richiede POST_NOTIFICATIONS dopo aver ottenuto la localizzazione, in modo che possa essere visualizzato il notifico.
Imposta useLegacyBridge in capacitor.config.ts. Senza di esso, le callback di localizzazione al WebView possono fermarsi dopo circa cinque minuti in background:
import type { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = {
appId: 'com.example.tracker',
appName: 'Tracker',
webDir: 'dist',
android: {
useLegacyBridge: true,
},
};
export default config;
Puoi personalizzare il nome del canale di notifica, l'icona e il colore attraverso strings.xml chiavi documentate nel plugin docs.
Inizia a tracciare
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();
}
Due opzioni sono più importanti di quanto sembri:
backgroundMessageè ciò che attiva gli aggiornamenti in background, su entrambe le piattaforme. Senza di esso, gli aggiornamenti sono garantiti solo in primo piano. Su Android è anche il testo della notifica del servizio in primo piano.urlinvia ogni punto dal nativo code con un"source": "native"campo nel corpo. Quel percorso non dipende dal WebView, che è ciò che mantiene i dati in movimento quando Android rallenta il WebView o iOS sospende JavaScript. Su Android, impostareurlanche rende il servizio adesivo, quindi i punti continuano a raggiungere il tuo server dopo che l'app è stata spazzata via. Hai bisogno di entrambe le opzioni per un tracciamento in background affidabile.
Quando l'accesso al token scade, ruotalo senza riavviare la sessione:
await BackgroundGeolocation.updateHeaders({
headers: { Authorization: `Bearer ${newToken}` },
});
Geofencing
Gli utenti di Transistorsoft dipendono spesso dal geofencing. Il plugin Capgo copre le aree circolari con API native su entrambe le piattaforme:
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 richiede l'autorizzazione Always. Su Android 10 e successivi, il geofencing in background richiede ACCESS_BACKGROUND_LOCATIONche il plugin non aggiunge per te. Aggiungilo solo se il tuo app ha l'approvazione di Google Play per la localizzazione in background. Se i tuoi geofences si comportano in modo strano su iOS, leggi la nostra guida su perché i geofences non attivano su iOS.
Migrare da Transistorsoft
I servizi di posizionamento sono diversi, quindi pianifica una piccola riscrittura del tuo servizio di localizzazione piuttosto che una ricerca e sostituisci.
| il concetto di Transistorsoft | equivalente di Capgo |
|---|---|
ready(config) + start() |
start(options, callback) |
onLocation listener |
Il start() callback |
stop() |
stop() |
distanceFilter |
distanceFilter |
url, headers HTTP sync |
url, headers, updateHeaders() |
addGeofence / onGeofence |
addGeofence / geofenceTransition |
removeGeofence(s) |
removeGeofence / removeAllGeofences |
getGeofences |
getMonitoredGeofences |
| Aiuto per le autorizzazioni | checkPermissions / requestPermissions |
| Detezione di movimento, orario, odometro | Esegui la logica dell'app o sul server |
Passaggi che funzionano bene nella pratica:
- Avvolgi l'accesso alla posizione dietro a un piccolo servizio nell'app (
startTracking,stopTracking,onPointLa maggior parte delle app ne ha già una. - Esegui il servizio con il plugin Capgo dietro a un flag di feature o una costruzione separata.
- Fai accettare al tuo backend il JSON di posizione del plugin. Il corpo corrisponde al
Locationtype (latitude,longitude,accuracy,speed,bearing,timee così via) piùsource. - Testa su dispositivi reali con lo schermo bloccato per almeno 30 minuti, su un Pixel, un Samsung e un iPhone almeno.
- Testa sulle reali dispositivi con lo schermo bloccato per almeno 30 minuti, su un Pixel, un Samsung e un iPhone almeno.
I plugin native cambia richiede una nuova costruzione del store. Una volta che questa costruzione è live, puoi continuare a inviare correzioni JavaScript alla tua UI di tracking con Avvolgi l'accesso alla posizione dietro a un piccolo servizio nell'app (Capgo) La maggior parte delle app già ne ha uno. Esegui il servizio con il plugin Capgo dietro a un flag di feature o una costruzione separata. Fai in modo che il backend accetti il JSON delle posizioni del plugin. Il corpo corrisponde al tipo (e così via) più Elimina il plugin Transistorsoft, le chiavi di licenza, le variabili Gradle aggiuntive e i modi di background che non servono più. Testa su dispositivi reali con lo schermo bloccato per almeno 30 minuti, su un Pixel, un Samsung e un iPhone almeno. I cambiamenti dei plugin nativi richiedono una nuova costruzione del negozio. Una volta che quella costruzione è live, puoi continuare a inviare aggiornamenti JavaScript per la tua UI di tracciamento con Capgo live updates senza un altro ciclo di revisione.
Dove il plugin Capgo non è sufficiente
Sii chiaro su queste cose prima di passare:
- Nessuna coda persistente. I POST nativi sono a bassa probabilità di successo. Se il dispositivo è offline, i punti falliti vengono registrati e persi. Se non puoi perdere un punto, conserva anche i punti localmente nella callback (ad esempio con SQLite) e sincronizzali dall'applicazione, o mantieni Transistorsoft.
- Nessun riavvio dopo il riavvio. La tracciatura riprende la prossima volta che l'utente apre l'applicazione.
- Nessuna detezione di moto automatica. L'applicazione decide quando iniziare e fermare.
- Terminazione di iOS. If the user force quits on iOS, standard location updates stop. That is an OS rule, not a plugin limitation.
Per ulteriori informazioni su cosa Capacitor può eseguire mentre l'applicazione è in background, vedi how background tasks work in Capacitor.
Troubleshooting
Aggiornamenti che si interrompono dopo pochi minuti su Android. Controlla useLegacyBridge: trueConferma la notifica del servizio in primo piano sia visibile, e disabilita l'ottimizzazione della batteria per l'app durante il testing su OEM aggressivi. url opzione in modo che la consegna non dipenda dal WebView.
Aggiornamenti in background non disponibili su iOS. Conferma UIBackgroundModes contiene location, che hai superato backgroundMessage, e che hai chiamato start() mentre l'app era in primo piano. La nostra guida su why iOS stops background location updates Passa in rassegna tutte le cause.
NOT_AUTHORIZED errore. L'utente ha negato la localizzazione. Chiamare openSettings() dopo aver spiegato perché l'app ne ha bisogno.
Jumpy indica all'interno degli edifici. Aumenta distanceFilter, ignora i punti con grandi accuracy valori, e su Android considera networkFallback: true sempre che le correzioni coarse siano accettabili.
Mock locations in un'app di consegna. Ogni Location ha un simulated segno. Per controlli più rigorosi, aggiungi @capgo/capacitor-mock-location-detector.
Scegliere
Seleziona Transistorsoft se hai bisogno di avvio automatico basato sulla movimentazione, persistenza del riavvio, una coda offline e geofence a forma di poligono, e il costo della licenza si adatta. Seleziona @capgo/background-geolocation Scegli se il tuo tracciamento è basato sulla sessione, vuoi code leggibili e non hai licenze per applicazione, e sei d'accordo a gestire la coda nel tuo app. Se stai sostituendo più SDK nativi a pagamento contemporaneamente, la Alternative plugin enterprise Ionic pagina elenca le altre sostituzioni Capgo.