Skip to content

Latest commit

 

History

History
79 lines (58 loc) · 2.69 KB

File metadata and controls

79 lines (58 loc) · 2.69 KB

moon-server-kmp 統合ガイド

MoonServerClient は、リトライ・指数バックオフ・MoonServerException による 型付きエラーを内蔵した、方針を持った Ktor HTTP クライアントラッパーです。

1. 前提条件

  • Kotlin 2.0.20、Compose Multiplatform 1.7.x、AGP 8.6.x、Gradle 8.10、Java 21。
  • 到達可能なバックエンド (MoonDeveloper のバックエンドまたは独自のもの)。
  • 有効な moonLicenseKey
  • Koin 4.1.0。

2. リポジトリと依存関係を追加

(リポジトリブロックは auth/ja.md §2 と同一です。)

implementation("io.moondeveloper:moon-server-kmp:1.0.0")

3. プラットフォーム設定

Android

  • INTERNET パーミッション (サンプルマニフェストに含まれています)。

iOS

  • 特別な capability は不要です。モジュールが Ktor Darwin エンジンを同梱します。

4. Koin を初期化

import io.moondev.server.moonServerModule

startKoin {
    modules(moonServerModule /*, ... */)
}

任意の Koin スコープから MoonServerClient を取得できます。

5. ViewModel / Store (MVI) で利用

class HealthStore(private val client: MoonServerClient) {
    suspend fun ping(): String =
        try {
            client.get("/health")
        } catch (e: MoonServerException) {
            "down: ${e.code} ${e.message}"
        }
}

6. Compose UI へのバインド

@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)
}

7. よくある問題

  • すべてのリクエストで MoonServerException(code=401) — 認証トークン インターセプタを確認してください (両モジュールが組み合わさっている場合、 AuthProvider からトークンを取得します)。
  • 低速ネットワークでのタイムアウト — クライアントの設定フックで リクエスト単位のタイムアウトを延ばしてください (デフォルトは保守的です)。
  • iOS の "URLSessionTask suspended" ログ — 多くはバックグラウンドモードの 競合です。Apple のアプリライフサイクル + URLSession ドキュメントを参照してください。

8. 次のステップ

  • 機能固有のリポジトリでラップして生のパス文字列を隠蔽します。
  • サンプル参照: ServerCallScreen.kt