MoonServerClient は、リトライ・指数バックオフ・MoonServerException による
型付きエラーを内蔵した、方針を持った Ktor HTTP クライアントラッパーです。
- Kotlin 2.0.20、Compose Multiplatform 1.7.x、AGP 8.6.x、Gradle 8.10、Java 21。
- 到達可能なバックエンド (MoonDeveloper のバックエンドまたは独自のもの)。
- 有効な
moonLicenseKey。 - Koin 4.1.0。
(リポジトリブロックは auth/ja.md §2 と同一です。)
implementation("io.moondeveloper:moon-server-kmp:1.0.0")INTERNETパーミッション (サンプルマニフェストに含まれています)。
- 特別な capability は不要です。モジュールが Ktor Darwin エンジンを同梱します。
import io.moondev.server.moonServerModule
startKoin {
modules(moonServerModule /*, ... */)
}任意の Koin スコープから MoonServerClient を取得できます。
class HealthStore(private val client: MoonServerClient) {
suspend fun ping(): String =
try {
client.get("/health")
} catch (e: MoonServerException) {
"down: ${e.code} ${e.message}"
}
}@Composable
fun ServerScreen(store: HealthStore = koinInject()) {
val scope = rememberCoroutineScope()
var result by remember { mutableStateOf("") }
Button(onClick = { scope.launch { result = store.ping() } }) { Text("Ping") }
Text(result)
}- すべてのリクエストで
MoonServerException(code=401)— 認証トークン インターセプタを確認してください (両モジュールが組み合わさっている場合、AuthProviderからトークンを取得します)。 - 低速ネットワークでのタイムアウト — クライアントの設定フックで リクエスト単位のタイムアウトを延ばしてください (デフォルトは保守的です)。
- iOS の "URLSessionTask suspended" ログ — 多くはバックグラウンドモードの 競合です。Apple のアプリライフサイクル + URLSession ドキュメントを参照してください。
- 機能固有のリポジトリでラップして生のパス文字列を隠蔽します。
- サンプル参照:
ServerCallScreen.kt。