メインコンテンツへスキップ

Transistorsoft Background Geolocation の代替手段

Capacitor 8 向けの、Transistorsoft バックグラウンドジオロケーションに代わる無料のオープンソース代替ツール: 機能、ライセンス、セットアップ、ジオフェンシング、移行ガイド。

Capacitor バックグラウンド位置情報プラグイン比較のためのマップピンと位置追跡のイラスト

Capacitor 向けの Transistorsoft バックグラウンド位置情報の代替手段をお探しなら、最も近い無料オプションは @capgo/background-geolocationです。MIT ライセンスで Capacitor 8 に対応し、iOS と Android でバックグラウンド位置追跡、ネイティブジオフェンシングをサポートし、ネイティブ code からサーバーへ位置情報を POST できます。Transistorsoft の全機能を再現するわけではありませんが、本ガイドでは得られる利点、失われる機能、移行方法について解説します。

チームが Transistorsoft の代替手段を探す理由

Transistorsoft の SDK は、長年にわたりフリート、デリバリー、フィットネスアプリを支えてきた成熟したプロダクトです。機能不全を理由に乗り換えることは稀です。主な理由は以下の通りです:

リリースビルドには両プラットフォームでキーが必要に

Transistorsoft の変更履歴によると、バージョン 9.0.0 から JWT ベースのライセンスキーに移行し、iOS でもキーの必須化が始まりました。v9 以前は Android のリリースビルドのみがロックされていました。v8 以前のキーは v9 で動作しないため、プラグインのアップグレードに伴い、ダッシュボードから新しいキーを生成する必要があります。

彼らのショップでは、アプリ識別子ごとに永久ライセンスを販売しており、1キーから100キーまで、1年間のアップデートが含まれています。ポリゴンジオフェンシングなどのアドオンも、現在は同じキーに統合されています。1つのアプリであれば、この価格は妥当です。しかし、20個のホワイトラベルアプリを持つエージェンシーや、ステージングと本番環境で異なるバンドルIDを配布する企業にとっては、ライセンスが毎年管理しなければならないコスト項目になってしまいます。

コアエンジンはバイナリです

Capacitor ラッパーはオープンですが、ロケーションエンジンは事前ビルド済みの iOS フレームワークと Maven からの Android ライブラリとして提供されます。特定の Android OEM で奇妙な現象が発生した場合、位置情報の記録タイミングを決定する code を読み取ったりパッチを当てたりすることはできません。これを許容するチームもあれば、厳格な監査要件があるチームや、Xcode で code をステップ実行したいだけのチームは、そうではないことが多いです。

設定項目

このプラグインは非常に大きな設定オブジェクトを公開しています:モーション検出、スケジューリング、オドメーター、SQLite 永続化、HTTP 同期テンプレート、ヘッドレスタスクなどです。すべて必要であれば素晴らしいですが、「ドライバーがシフト中に30秒ごとに位置情報を送信する」だけであれば、理解すべき設定が多すぎます。

@capgo/background-geolocation が提供するもの

Capgo プラグインは、Cordova バックグラウンドジオロケーションフォークの長い歴史と、軽量なコミュニティ Capacitor プラグインから始まりました。目標は、ライセンスなしで、正確な位置情報、信頼性の高いバックグラウンド動作、ネイティブジオフェンシングを実現することです。

8.x シリーズの現在の機能:

  • 単一のコールバック付き呼び出しで、フォアグラウンドとバックグラウンドの位置情報更新を start() 行います。
  • distanceFilter と minIntervalMs ポイントの到着頻度を制御するために。
  • すべての位置情報をネイティブ HTTP POST で設定した url に送信し、カスタム headers と updateHeaders() によるトークンローテーションに対応。
  • 進入・退出イベントに対応したネイティブ円形ジオフェンスと、遷移用のネイティブWebhook。
  • checkPermissions() と requestPermissions() iOSの「使用中」と「常に許可」を区別する
  • openSettings() 権限を拒否したユーザー向け。
  • setPlannedRoute() ユーザーが予定ルートを外れたときに音を鳴らす
  • Android向けオプション networkFallback ネットワーク位置情報でGPSの欠落を補完する
  • 開発とブラウザテスト向けのWeb実装。

機能比較

機能 Transistorsoft (v9) @capgo/background-geolocation
ライセンス リリースビルドにはアプリIDごとに有料キーが必要 MIT、無料
出典 ラッパーはオープン、エンジンバイナリ 完全オープンソース
Capacitor 8 LTS はい はい
バックグラウンドトラッキング はい はい
モーション検出ステートマシン はい いいえ
ネイティブHTTPアップロード はい、SQLite キューとバッチ処理で はい、ベストエフォート POST、ディスク上キューなし
ジオフェンシング はい、ポリゴンはアドオンで iOS と Android での円形ジオフェンス
ジオフェンスイベントをサーバーに送信 はい、HTTP 同期で はい、ネイティブ webhook で
アプリをスワイプで閉じた後のトラッキング(Android) はい はい、 url 設定
再起動後のトラッキング はい (startOnBoot) いいえ
スケジューリング、オドメーター はい いいえ

正直なまとめ: アプリがトラッキング開始のタイミングを自律的に判断し、再起動後も動作を維持し、数週間にわたるポイントをオフラインでバッファリングする必要がある場合は、Transistorsoft がより適しています。ユーザーやアプリが明示的にトラッキングを開始し、ライセンス不要で正確な位置情報と読みやすい code を求める場合は、Capgo プラグインがより適しています。

インストールと設定

bun add @capgo/background-geolocation
bunx cap sync

iOSと

利用文字列と位置情報バックグラウンドモードを以下に追加します 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>

2026年4月以降、App Store へのアップロードには Xcode 26 が必要です。CI イメージが古い場合、ビルドが成功していてもアップロードは拒否されます。 Capgo のビルド Mac の管理を避けたい場合、現在の Xcode イメージで動作します。

Androidでは

このプラグインは、バックグラウンドで追跡している間、永続的な通知付きのフォアグラウンドサービスを使用します。Android 13 以降では、 POST_NOTIFICATIONS が位置情報の許可後に要求され、通知が表示されるようになります。

設定 useLegacyBridge における capacitor.config.ts。これがないと、バックグラウンドで約 5 分後に WebView への位置情報コールバックが停止する可能性があります。

import type { CapacitorConfig } from '@capacitor/cli';

const config: CapacitorConfig = {
  appId: 'com.example.tracker',
  appName: 'Tracker',
  webDir: 'dist',
  android: {
    useLegacyBridge: true,
  },
};

export default config;

通知チャネルの名前、アイコン、色は以下でカスタマイズできます。 strings.xml ドキュメントに記載されているキー プラグインのドキュメント.

トラッキングを開始

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();
}

見た目以上に重要な2つのオプション:

  • backgroundMessage これは両プラットフォームでバックグラウンド更新を有効にする設定です。これがないと、更新はフォアグラウンドでのみ保証されます。Androidでは、フォアグラウンドサービスの通知テキストとしても使用されます。
  • url ネイティブの code から各ポイントを、ボディ内の "source": "native" フィールドで送信します。このパスはWebViewに依存しないため、AndroidがWebViewを制限したりiOSがJavaScriptを停止したりしても、データの流れが維持されます。Androidでは、 url を設定するとサービスがスティッキーになり、アプリをスワイプして閉じた後もポイントがサーバーに届き続けます。信頼性の高いバックグラウンドトラッキングには、両方のオプションが必要です。

アクセストークンの有効期限が切れたら、セッションを再起動せずにローテーションします:

await BackgroundGeolocation.updateHeaders({
  headers: { Authorization: `Bearer ${newToken}` },
});

ジオフェンシング

Transistorsoftのユーザーは、そのジオフェンシングに頼っていることがよくあります。Capgo プラグインは、両プラットフォームのネイティブAPIで円形のリージョンをカバーします:

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のジオフェンシングには「常に許可」の権限が必要です。Android 10以降では、バックグラウンドのジオフェンシングに ACCESS_BACKGROUND_LOCATION、プラグインはこれを自動追加しません。アプリがバックグラウンド位置情報にGoogle Playの承認を得ている場合のみ追加してください。iOSでジオフェンスが異常に動作する場合は、当社のガイドを参照してください。 iOSでジオフェンスがトリガーされない理由.

Transistorsoftからの移行

APIが異なるため、検索置換ではなく、位置情報サービスの小規模な書き換えを計画してください。

Transistorsoft のコンセプト Capgo 相当
ready(config) + start() start(options, callback)
onLocation リスナー この start() コールバック
stop() stop()
distanceFilter distanceFilter
url, headers HTTP 同期 url, headers, updateHeaders()
addGeofence / onGeofence addGeofence / geofenceTransition
removeGeofence(s) removeGeofence / removeAllGeofences
getGeofences getMonitoredGeofences
パーミッションヘルパー checkPermissions / requestPermissions
モーション検出、スケジュール、オドメーター アプリロジックまたはサーバー側で実装

実務でうまくいく手順:

  1. アプリ内で小さなサービスとして位置情報アクセスをラップします(startTracking, stopTracking, onPoint)。ほとんどのアプリにはすでにあります。
  2. Capgo プラグインでサービスを実装し、フィーチャーフラグまたは別ビルドの背後に配置します。
  3. バックエンドがプラグインの位置情報 JSON を受け取れるようにします。ボディは Location 型 (latitude, longitude, accuracy, speed, bearing, time など) に加えて source.
  4. Transistorsoft プラグイン、ライセンスキー、追加の Gradle 変数、および不要になったバックグラウンドモードを削除します。
  5. 画面をロックした状態で、最低 30 分間実機テストします。最低でも Pixel、Samsung、iPhone を各 1 台使ってください。

ネイティブプラグインの変更には新しいストアビルドが必要です。そのビルドが公開されたら、トラッキング UI への JavaScript 修正を Capgo Live Updates で、別のレビューサイクルなしに配信し続けられます。

Capgo プラグインだけでは不十分な場合

切り替える前に、次の点を明確にしておきましょう:

  • 永続キューなし。 ネイティブPOSTはベストエフォートです。デバイスがオフラインの場合、失敗したポイントはログに記録され、破棄されます。ポイントの欠落が許容されない場合は、コールバック内でローカルに保存(例: SQLite)し、アプリから同期するか、Transistorsoftを維持してください。
  • 再起動後に再起動は不要です。 ユーザーが次にアプリを開いたときにトラッキングが再開されます。
  • 自動的なモーション検出はありません。 開始と停止のタイミングはアプリが決定します。
  • iOSでの強制終了。 iOSでユーザーが強制終了した場合、標準の位置情報更新は停止します。これはOSの仕様であり、プラグインの制限ではありません。

アプリがバックグラウンドにある間にCapacitorで実行できることについて詳しくは、 Capacitorにおけるバックグラウンドタスクの仕組み.

トラブルシューティング

Androidでは数分後に更新が停止します。 確認 useLegacyBridge: true、フォアグラウンドサービスの通知が表示されていることを確認し、テスト中は過激なOEM環境でアプリのバッテリー最適化を無効にしてください。 url オプションを使用し、WebViewに依存しないように配信を設定します。

iOSではバックグラウンドで更新されません。 確認 UIBackgroundModes を含む location、 backgroundMessage、 start() をアプリがフォアグラウンドにある間に呼び出したことを確認してください。 iOSがバックグラウンドの位置情報更新を停止する理由 すべての原因を順に解説します。

NOT_AUTHORIZED エラー。 ユーザーが位置情報を拒否しました。呼び出しは openSettings() アプリに必要な理由を説明した後で。

屋内では位置情報が飛ぶ。 引き上げ、 distanceFilter大きな誤差があるポイントは無視し、 accuracy Androidでは、粗い精度でも許容できる場合にのみ networkFallback: true 検討してください。

配送アプリでのモック位置情報。 各 Location には simulated フラグがあります。より厳格なチェックを行うには、次を追加してください: @capgo/capacitor-mock-location-detector.

選び方

モーション検知による自動起動、再起動後の永続性、オフラインキュー、ポリゴンジオフェンスが必要で、ライセンス費用が予算に合うなら Transistorsoft を選んでください。一方、 @capgo/background-geolocation トラッキングがセッションベースで、読みやすい code を求め、アプリごとのライセンスを避けたい、かつアプリ側でのキュー管理が可能であれば、code が適しています。複数の有料 Native Build SDK を一括で置き換える場合は、 Ionic Enterpriseプラグインの代替案 ページでは、他の Capgo 代替手段を一覧できます。

Capacitor アプリ向けの Live Updates

Web レイヤーのバグが本番で発生したら、App Store の審査を何日も待たずに Capgo で修正を配信しましょう。ネイティブの変更は通常の審査フローに残したまま、ユーザーはバックグラウンドでアップデートを受け取れます。

最新のブログ記事

Capgoは、真にプロフェッショナルなモバイルアプリを作るために必要な最高のインサイトを提供します。