Skip to content

Latest commit

 

History

History
111 lines (85 loc) · 3.68 KB

File metadata and controls

111 lines (85 loc) · 3.68 KB

moon-firebase-auth-kmp 統合ガイド

このガイドでは、KMP + Compose Multiplatform アプリで moon-firebase-auth-kmp を使う手順を説明します。本モジュールは moon-auth-kmp が提供する L1 AuthProvider SPI の Firebase 実装であり、機能コードは SPI のみに依存して テストでは Fake に置き換えられます。

1. 前提条件

  • Kotlin 2.0.20、Compose Multiplatform 1.7.x、AGP 8.6.x、Gradle 8.10、Java 21。
  • メール/パスワードサインインを有効化した Firebase プロジェクト。
  • 有効な MoonDeveloper ライセンスキー (moonLicenseKey Gradle プロパティ)。
  • アプリで Koin 4.1.0 を設定済み。

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

settings.gradle.kts:

dependencyResolutionManagement {
    repositories {
        google()
        mavenCentral()
        maven {
            url = uri("https://moon-server-production.up.railway.app/maven/releases")
            credentials {
                username = "license"
                password = providers.gradleProperty("moonLicenseKey").getOrElse("")
            }
            content { includeGroup("io.moondeveloper") }
        }
    }
}

composeApp/build.gradle.kts (commonMain):

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

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

Android

  • google-services.jsoncomposeApp/src/androidMain/ または Android アプリモジュールに配置します。
  • Firebase ドキュメントに従い Google Services プラグインを適用します。
  • INTERNET パーミッションが付与されていることを確認します (デフォルトで付与)。

iOS

  • Xcode ターゲットに GoogleService-Info.plist を追加します。
  • AppDelegate で、KoinKt.doInitKoin() の前に FirebaseApp.configure() を呼びます。

4. Koin を初期化

import io.moondev.auth.AuthProvider
import io.moondev.firebase.auth.FirebaseAuthProvider
import io.moondev.firebase.auth.firebaseAuthModule
import org.koin.dsl.bind
import org.koin.dsl.module

val appModule = module {
    single<AuthProvider> { get<FirebaseAuthProvider>() } bind AuthProvider::class
}

startKoin {
    modules(firebaseAuthModule, appModule)
}

5. ViewModel / Store (MVI) で利用

class AuthStore(private val auth: AuthProvider) {
    val state: StateFlow<AuthUser?> = auth.currentUser

    suspend fun signIn(email: String, pw: String) {
        auth.signInWithEmailPassword(email, pw)
    }

    suspend fun signOut() {
        auth.signOut()
    }
}

Store は AuthProvider にのみ依存するため、テストでは Firebase を読み込まずに Fake と差し替えられます。

6. Compose UI へのバインド

@Composable
fun AuthScreen(store: AuthStore = koinInject()) {
    val user by store.state.collectAsState()
    // ... サインインフォームを描画し、`user` を購読します。
}

7. よくある問題

  • 依存関係解決時の 401 / 認証失敗moonLicenseKey が未設定または期限切れです。 https://moondeveloper.com/trial で再発行してください。
  • Firebase "default app not initialized" — iOS では Koin 起動前に必ず FirebaseApp.configure() を呼んでください。
  • Koin "No definition found for AuthProvider" — 手順 4 の bind 宣言が抜けています。

8. 次のステップ