1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【MAUI × Supabase × Render】Android端末の位置情報を定期送信する常駐アプリを作ってみた

1
Posted at

【MAUI × Supabase × Render】Android端末の位置情報を定期送信する常駐アプリを作ってみた
image.png

はじめに

個人用途で Android端末の位置情報を定期的に取得し、サーバーへ送信する常駐アプリ を作っています。
子供の見守りに毎月課金するよりスマホもたせるほうがいいかなとー

*技術スタックは以下です。

クライアント:.NET MAUI(Androidのみ)

APIサーバー:Node.js(Render)

DB:Supabase(PostgreSQL)

この記事では、

なぜこの構成にしたか

全体アーキテクチャ

MAUI側の実装方針

サーバー/DB設計の考え方

ハマりどころ

をまとめます。

作ったものの概要

やりたいこと

Android端末で

位置情報(緯度・経度)を 1分~数分おきに取得

アプリが前面/背面でも 自動送信

サーバー側で

端末ごとに 送信間隔を制御

DBに履歴として保存

全体構成
[ Android端末 (MAUI) ]
├ 位置情報取得
├ 送信タイマー制御
└ HTTP POST
↓
[ Node.js API (Render) ]
├ 認証(UUID)
├ 送信可否判定
└ DB登録
↓
[ Supabase PostgreSQL ]
├ positions(位置履歴)
└ device_instructions(端末制御)

この構成にした理由
要素 理由
MAUI C#でAndroid常駐アプリを書きたかった
Render 無料枠でAPIを立てられる
Supabase PostgreSQL+管理UIが楽

最初Renderに保存もしてたんですけどある日DBが消えてた(無料枠の仕様)

MAUI(Android)側の設計
基本方針

タイマー常駐型

端末側は「指示に従うだけ」

送信間隔はサーバー主導

位置送信ループ(イメージ)
async Task StartScheduledLoopAsync()
{
while (true)
{
await Task.Delay(TimeSpan.FromSeconds(10));
if (DateTime.Now >= NextRequestTime)
{
await SendLocationAsync();
UpdateNextRequestTime();
}
}
}

実装上のポイント

Task.Run で拡張可能な設計

サーバー(Node.js / Render)
APIの役割

UUIDで端末を識別

DBに保存

次回送信時刻を返す

POST /api/location
{
uuid: "...",
lat: 35.xxxx,
lon: 139.xxxx
}

レスポンス例:

{
"interval_seconds": 60,
"next_request_time": "2026-01-08T15:30:00"
}

Supabase(PostgreSQL)設計
positions(位置履歴)
カラム 型
id UUID
device_uuid UUID
latitude numeric
longitude numeric
created_at timestamp
device_instructions(端末制御)
カラム 説明
device_uuid 端末識別
interval_seconds 送信間隔
next_request_time 次回送信
location_request_time 位置取得指示

👉 「いつ送るか」はサーバーが決めるのがポイント

ハマりどころ・注意点

Androidの制約

バックグラウンド制限が厳しい

バッテリー最適化の除外が必要

セキュリティ

野良配布前提だが

UUID認証

APIキー直書き回避
は最低限必要

通信コスト

Render / Supabase 無料枠でも
1分間隔なら実用範囲

今後やりたいこと

逆ジオコーディング(住所変換)

Supabase Realtime 連携

管理画面(Web)追加

Android Foreground Service 対応

おわりに

MAUIは「業務アプリ向け」のイメージが強いですが、
個人用途のAndroid常駐アプリにも十分使えます。

同じようなことをやりたい人の参考になればうれしいです 🙌

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?