このプロジェクトには、さまざまなモデルやさまざまなブランドで知られる GPS トラッカーを搭載した子供用スマートウォッチ デバイスと通信するように設計されたサーバー側と Web アプリケーションの両方が含まれています。たとえば、Q50、Q60、Q80、Q90、Q100、Q360、Q523、Q730、Q750、Q8、GW100、GW100S、GW200、GW200S、GW300、GW300S、GW400S、GW400X、GW500S、 GW600S、GW700、GW800、GW900、GW900S、GW1000、GW1000S、EW100、EW100S、EW200、K911、W8、W9、W10、Y3、G36セーフキーパー、DS18、T58、T100、I8、G10、G100、 D99、D100、D100S、その他多数。大まかに言えば、SeTracker、FindMyKids などのアプリケーションと同じことを行います。主な違いは、連絡先、位置、通信履歴などのすべての個人データは、ユーザーが制御するハードウェアに保存されるため、完全にプライベートになることです。
対処されたもう 1 つの問題は、子供用スマートウォッチの通信および追跡アプリケーションのセキュリティ モデルです。デフォルトでは、デバイス識別子がわかっていれば、誰でもデバイスの所有者であることを確認することなくデバイスを制御できます。デバイスの携帯電話番号がわかっている場合は、デバイスにテキスト メッセージを送信することで識別子を簡単に取得できます。もちろんパスワードはありますが、すべてのデバイスには工場出荷時のパスワードがまったく同じであり、変更を求める煩わしい通知もないため、誰もパスワードを変更しません。
このアプリケーションでは、次のセキュリティ シナリオが実装されています。
そして最後に、重要なことですが、料金も広告も無料です :)。
プロジェクトの構築は次のように簡単です
docker compose -f docker-builder.yml run --rm builder
ビルド中に、 https
接続に必要な SSL 証明書が作成されます。環境変数DOMAIN
およびIP
使用して、ドメインおよび/または IP アドレスを指定できます。
docker compose -f docker-builder.yml run --rm -e DOMAIN=example.com -e IP=123.45.67.89 builder
アプリケーションは、必要に応じて、さまざまなデータベースによってバックアップできます。最も軽量なシナリオは、組み込み H2 データベースを使用することです。この場合、アプリケーションはコマンドで起動できます
docker compose --profile h2 up -d
PostreSQL をコンテナ化またはスタンドアロンで使用することもできます。前者の場合、コマンドでアプリケーションを起動できます
docker compose --profile pg up -d
後者の場合、ファイルdb.env
にデータベース URL と資格情報を入力してから、コマンドを実行する必要があります。
docker compose --profile pg_ext up -d
お使いの作成バージョンがプロファイルをサポートしていない場合は、シナリオごとに専用の作成ファイルを使用できます。
docker compose -f h2.yml up -d
docker compose -f pg.yml up -d
docker compose -f pg_ext.yml up -d
最後のケースでも、データベース URL と資格情報を含むdb.env
ファイルを完成させる必要があります。
退屈な構築フェーズをスキップして、リリースに添付されたバイナリを実行することもできます (Java 8 以降がインストールされている必要があります)
java -jar kidtracker.jar
バイナリは、組み込み H2 データベースを使用するように構成されています。最初の起動時に作業ディレクトリに 3 つのフォルダーが作成されます。
data
はデバイスの位置、電話番号などのデータベース記録が含まれていますが、この日付は機密情報であるため、安全に保管してください。logs
十分に自己記述的であり、アプリケーション自体と、デバイスのデバッグがアクティブな場合のデバイスの両方のログが含まれます。media
このフォルダーは、受信オーディオを amr 形式で mp3 に変換するために使用されますWeb UI はhttps://<hostname>:8003
で利用できます。ログインするには、デフォルトの認証情報admin
/ password
を使用します。
アプリケーションに登録されているユーザーにデバイスを割り当てるには、アプリケーションがパブリック ネットワークから利用できる必要があります。つまり、アプリケーションにはパブリック IP アドレスが必要で、おそらく関連するドメイン名も必要です。デフォルトでは、アプリケーションはポート8001
でデバイスをリッスンします。これは、まったく同じポートがパブリック ネットワークにマッピングされていると仮定します。次に、次のテキスト メッセージがデバイスに送信され、アプリケーションへの接続が開始されます。
pw,123456,ip,<public IP address or domain>,8001#
ここで、 123456
デフォルトのパスワードであり、おそらくデバイスに設定されています。その他の既知のデフォルトのパスワードは、 523681
、 54321
、および654321
です。ただし、パスワードが変更された場合は、デフォルトのパスワードの代わりに新しいパスワードを使用する必要があります。
デフォルトのパスワードを変更することを強くお勧めします。
次に、ナビゲーション バーの右側にある ボタンをクリックし、フッターにある ボタンをクリックします。デバイスを割り当てるにはデバイス識別子が必要です。デバイスがアプリケーションに接続されると、4 桁の確認トークンがデバイスに送信されます。ユーザーがデバイスを所有していることを確認するには、トークンの有効期限が切れた後、次の 5 分間にこのトークンをポップアップ フォームに入力する必要があります。
アプリケーションに登録されているユーザーは、通常のユーザーまたは管理者のいずれかになります。管理者は他のユーザーを登録できますが、一般ユーザーは登録できないという点が唯一の違いです。管理者は、通常のユーザーと他の管理者の両方を作成できます。既存のユーザーの場合、管理者権限を付与することも取り消すこともできません。管理者権限を変更する唯一の方法は、ユーザー アカウントを削除して、新しく作成し直すことです。
セキュリティ上の理由から、ユーザーの携帯電話番号も変更できません。繰り返しますが、これを変更するには、ユーザー アカウントを削除して再作成する必要があります。ユーザー アカウントを削除するには、すべてのデバイスの割り当てを解除する必要があります。
初めて実行するときは、ログインadmin
およびパスワードpassword
を持つ管理者特権を持つデフォルトのユーザー アカウントが存在します。他のユーザー アカウントを作成するときにこのアカウントを削除するか、デフォルトのパスワードを変更することをお勧めします。管理者権限を持つアカウントが 1 つしかない場合、そのアカウントは削除できません。デフォルトの管理者アカウントには有効な携帯電話番号がないため、デバイスを割り当てることができません。
デバイスはメッセージを介してアプリケーションと通信します。メッセージにはいくつかの種類があり、デバイスの位置やアラートに関する情報を提供するもの、実際のバッテリー充電量や歩数計の値を含むものもあります。
一部のメッセージは、アプリケーションからデバイスに送信して、デバイスにいくつかのアクションを実行させたり、設定を変更させたりすることもできます。デバイスがメッセージを受信したことを確認するために、アプリケーションに確認メッセージを送り返します。確認メッセージを待っている間、UI はブロックされたままになります。 10 秒以内に確認が受信されない場合 (設定可能)、最初のメッセージは確認されなかったとみなされます。
割り当てられたすべてのデバイスの位置マーカーは、ユーザーの位置マーカーとともに同じマップを共有します。デバイス マーカーには、最後に確認された位置の時刻、バッテリー充電量、歩数計の値、さらに最終的にはデバイス離陸アラート、バッテリー低下アラート、接続切断アラート、および古い位置アラートに関する情報が含まれます。デバイスからの最後のメッセージが 15 分以上前に受信された場合、デバイスは失われたとみなされます。
デバイスは、直接 GPS データが利用可能な場合は、直接 GPS データに基づいて実際の位置を提供できます。また、直接 GPS 観測が利用できない場合、主に建物内または電磁ノイズの存在下では、最後に検出された位置を提供できます。このような場合、GPS データは
は時代遅れとみなされます。受信した位置データが古い場合、古いデータのアラートが表示されます。
バッテリ低下警告 と実際の充電値は、さまざまな種類のメッセージで表示されることに注意してください。実際の料金を含むメッセージは、何時間も送信できない位置情報やアラートを含むメッセージよりも頻繁に (5 分ごとに) 送信されます。したがって、マーカーがバッテリー残量 100% を示し、バッテリー低下の警告を表示することも珍しくありません。この場合、バッテリー充電量の数値が優先され、バッテリー低下警告は無視できます。
SOS ボタンが押されると、デバイスはアラーム メッセージを送信します。この場合、デバイスのマーカーが赤くなり、マーカーがクリックされるまでサイレン音が再生されます。マーカーをクリックすると、マーカーが一番上に移動し、子供の選択が切り替わります。キッドセレクトを切り替えると、選択されているデバイスマーカーが一番上になります。
デバイスはオーディオ メッセージと (カメラが装備されている場合) スナップショットをアプリケーションに送信できます。この種の新しいメッセージが到着すると、デバイスのマーカーが青になり、マーカーがクリックされるまでビンテージの電話の呼び出し音が再生されます。アラームの場合と同様に、マーカーをクリックするとマーカーが上に移動し、子供の選択が切り替わります。
UI のタイムスタンプはどこでもクリック可能で、クリックするだけで日時の絶対値と現在からの時間間隔を切り替えることができます。
塗りつぶしと配線の 2 つの状態を持つ 2 つのアイコンがあります。最初の 1 つは、マップ ビューが選択したデバイス マーカーをたどると塗りつぶされます。クリックすると状態を切り替えることができます。マップ ビューがユーザーの位置マーカーをたどると、別の 1 つが塗りつぶされます。クリックして状態を切り替えることもできます。 1 つのアイコンが塗りつぶされると、別のアイコンが配線され、その逆も同様です。マップをドラッグすると、両方のアイコンがワイヤードになります。
コマンドをクリックすると GPS が起動し、現在位置がデバイスに送信されます。デバイス マーカーに従ってマップ ビューが開始され、デバイスに従ってアイコンが塗りつぶされます。
デバイスとのチャットは非対称です。ボタン を使用してテキスト チャット メッセージをデバイスに送信できます。一方、デバイスは短い音声メッセージを送信したり、デバイスにカメラが装備されている場合はスナップショットを送信したりできます。デバイスは、 ボタンでスナップショットを作成したり、 ボタンで 15 秒間の音声録音を強制したりすることもできます。
履歴ダイアログでは、日付モード (午前 0 時から次の午前 0 時まで) と、ユーザーが間隔の開始と終了の両方を選択できる一般モードの 2 つのモードで時間間隔を選択できます。モードを切り替えるには、日付と時刻のピッカー ラベルをクリックします。
時間間隔を選択すると、チャット履歴や歩数計、バッテリー充電量のグラフを表示できます。選択した時間間隔のデバイス トラックをマップ上に配置することもできます。スライダーが右上隅に表示され、トラックに沿ってデバイス マーカーを移動するために使用されます。履歴トラックを検査すると、履歴ダイアログのアイコンが に変わります。トラックを削除してオンライン マーカーの位置に戻るには、トラックをクリックします。
[連絡先] ダイアログでは、プライマリおよびセカンダリのデバイス管理者、SOS 番号、デバイスの連絡先、デバイスへの通話を許可される番号、およびデバイスのボタンに割り当てられたクイック コール番号を編集できます。すべての連絡先カテゴリには、埋めることができる固定数のスロットがあります。デフォルトでは、空のスロットは非表示になっていますが、ダイアログ フッターにある ボタンをクリックすると表示できます。
キッズ ダイアログを使用すると、ユーザーは子供用デバイスの割り当てと割り当て解除、サムの変更、デバイスとその実際のステータスに関する一般的な情報の取得を行うことができます。左側の列にはクリック可能なサムが配置されており、それをクリックすると、子供の編集ダイアログが表示されます。中央の列にはデバイス識別子があります。デバイスがオンラインの場合、その識別子は緑色で表示され、それ以外の場合は赤色で表示されます。デバイス識別子の下には、デバイスから最後にメッセージを受信した時間が表示されます。デバイスにアクセスできるすべてのユーザーが携帯電話とともに右端の列にリストされます。