diff --git a/build.gradle.kts b/build.gradle.kts index e9becdcef..66dc327d6 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -29,6 +29,7 @@ allprojects { repositories { google() mavenCentral() + mavenLocal() } } diff --git a/sample/chat-demo-mpp/common/build.gradle.kts b/sample/chat-demo-mpp/common/build.gradle.kts index 8685dddf4..d3aa96fb7 100644 --- a/sample/chat-demo-mpp/common/build.gradle.kts +++ b/sample/chat-demo-mpp/common/build.gradle.kts @@ -14,7 +14,7 @@ plugins { group = "io.github.jan.supabase" version = "1.0-SNAPSHOT" -val pluginVersion = "3.2.0" +val pluginVersion = "3.2.47-local" kotlin { @OptIn(ExperimentalKotlinGradlePluginApi::class) diff --git a/sample/chat-demo-mpp/common/src/commonMain/kotlin/io/github/jan/supabase/common/ChatViewModel.kt b/sample/chat-demo-mpp/common/src/commonMain/kotlin/io/github/jan/supabase/common/ChatViewModel.kt index 0fb064e5e..4d1d8d4a0 100644 --- a/sample/chat-demo-mpp/common/src/commonMain/kotlin/io/github/jan/supabase/common/ChatViewModel.kt +++ b/sample/chat-demo-mpp/common/src/commonMain/kotlin/io/github/jan/supabase/common/ChatViewModel.kt @@ -77,6 +77,10 @@ class ChatViewModel( } } + fun handleSignInWithGoogleResult() { + alert.value = "Successfully signed in with Google!" + } + fun resetPassword(email: String) { coroutineScope.launch { kotlin.runCatching { diff --git a/sample/chat-demo-mpp/common/src/commonMain/kotlin/io/github/jan/supabase/common/di/supabaseModule.kt b/sample/chat-demo-mpp/common/src/commonMain/kotlin/io/github/jan/supabase/common/di/supabaseModule.kt index 42060f8e8..a8d8a4014 100644 --- a/sample/chat-demo-mpp/common/src/commonMain/kotlin/io/github/jan/supabase/common/di/supabaseModule.kt +++ b/sample/chat-demo-mpp/common/src/commonMain/kotlin/io/github/jan/supabase/common/di/supabaseModule.kt @@ -3,6 +3,9 @@ package io.github.jan.supabase.common.di import io.github.jan.supabase.auth.Auth import io.github.jan.supabase.auth.AuthConfig import io.github.jan.supabase.auth.FlowType +import io.github.jan.supabase.compose.auth.ComposeAuth +import io.github.jan.supabase.compose.auth.appleNativeLogin +import io.github.jan.supabase.compose.auth.googleNativeLogin import io.github.jan.supabase.createSupabaseClient import io.github.jan.supabase.logging.LogLevel import io.github.jan.supabase.postgrest.Postgrest @@ -24,6 +27,10 @@ val supabaseModule = module { flowType = FlowType.PKCE } install(Realtime) + install(ComposeAuth) { + googleNativeLogin(serverClientId = "YOUR_WEB_CLIENT_ID") + appleNativeLogin() + } } } } \ No newline at end of file diff --git a/sample/chat-demo-mpp/common/src/commonMain/kotlin/io/github/jan/supabase/common/ui/screen/LoginScreen.kt b/sample/chat-demo-mpp/common/src/commonMain/kotlin/io/github/jan/supabase/common/ui/screen/LoginScreen.kt index 7ec089f16..94db353b5 100644 --- a/sample/chat-demo-mpp/common/src/commonMain/kotlin/io/github/jan/supabase/common/ui/screen/LoginScreen.kt +++ b/sample/chat-demo-mpp/common/src/commonMain/kotlin/io/github/jan/supabase/common/ui/screen/LoginScreen.kt @@ -11,7 +11,6 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Mail import androidx.compose.material3.AlertDialog import androidx.compose.material3.Button -import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.OutlinedButton import androidx.compose.material3.OutlinedTextField @@ -30,17 +29,21 @@ import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp -import io.github.jan.supabase.annotations.SupabaseExperimental +import co.touchlab.kermit.Logger import io.github.jan.supabase.auth.providers.Google import io.github.jan.supabase.common.ChatViewModel import io.github.jan.supabase.common.ui.components.OTPDialog import io.github.jan.supabase.common.ui.components.OTPDialogState import io.github.jan.supabase.common.ui.components.PasswordField import io.github.jan.supabase.common.ui.components.PasswordRecoveryDialog +import io.github.jan.supabase.compose.auth.composable.NativeSignInResult +import io.github.jan.supabase.compose.auth.composable.rememberSignInWithGoogle import io.github.jan.supabase.compose.auth.ui.ProviderButtonContent import io.github.jan.supabase.compose.auth.ui.annotations.AuthUiExperimental +import io.github.jan.supabase.compose.auth.composeAuth +import io.github.jan.supabase.compose.auth.ui.ProviderIcon -@OptIn(ExperimentalMaterial3Api::class, SupabaseExperimental::class, AuthUiExperimental::class) +@OptIn(AuthUiExperimental::class) @Composable fun LoginScreen(viewModel: ChatViewModel) { var signUp by remember { mutableStateOf(false) } @@ -49,6 +52,29 @@ fun LoginScreen(viewModel: ChatViewModel) { var otpDialogState by remember { mutableStateOf(OTPDialogState.Invisible) } var showPasswordRecoveryDialog by remember { mutableStateOf(false) } + val action = viewModel.supabaseClient.composeAuth.rememberSignInWithGoogle( + onResult = { result -> + when (result) { + is NativeSignInResult.Success -> { + viewModel.handleSignInWithGoogleResult() + Logger.d("LoginScreen - Success") + } + + is NativeSignInResult.ClosedByUser -> { + Logger.d("LoginScreen - ClosedByUser") + } + + is NativeSignInResult.Error -> { + Logger.d("LoginScreen - Error") + } + + is NativeSignInResult.NetworkError -> { + Logger.d("LoginScreen - Network Error") + } + } + }, + ) + Column( modifier = Modifier.fillMaxSize(), verticalArrangement = Arrangement.Center, @@ -94,6 +120,14 @@ fun LoginScreen(viewModel: ChatViewModel) { ) { ProviderButtonContent(Google, text = if (signUp) "Sign Up with Google" else "Login with Google") } + Button( + onClick = { + action.startFlow() + }, + ) { + ProviderIcon(Google, contentDescription = null) + Text("Native Sign In with Google") + } TextButton( onClick = { otpDialogState = OTPDialogState.Visible(email) } diff --git a/sample/chat-demo-mpp/ios/chatdemoios.xcodeproj/project.pbxproj b/sample/chat-demo-mpp/ios/chatdemoios.xcodeproj/project.pbxproj index eec1e064e..da2516446 100644 --- a/sample/chat-demo-mpp/ios/chatdemoios.xcodeproj/project.pbxproj +++ b/sample/chat-demo-mpp/ios/chatdemoios.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 56; + objectVersion = 60; objects = { /* Begin PBXBuildFile section */ @@ -23,21 +23,19 @@ 65E1CD792E79AA2500DACC1A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; /* End PBXFileReference section */ -/* Begin PBXFrameworksBuildPhase section */ - 6581F14B2B36C0CF00BA34A9 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( +/* Begin PBXGroup section */ + 657152FA2EAFC4B20046C115 /* Frameworks */ = { + isa = PBXGroup; + children = ( ); - runOnlyForDeploymentPostprocessing = 0; + name = Frameworks; + sourceTree = ""; }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ 6581F1452B36C0CF00BA34A9 = { isa = PBXGroup; children = ( 6581F1502B36C0CF00BA34A9 /* chatdemoios */, + 657152FA2EAFC4B20046C115 /* Frameworks */, 6581F14F2B36C0CF00BA34A9 /* Products */, ); sourceTree = ""; @@ -80,7 +78,6 @@ buildPhases = ( 656500D42B3962F0005F97B4 /* ShellScript */, 6581F14A2B36C0CF00BA34A9 /* Sources */, - 6581F14B2B36C0CF00BA34A9 /* Frameworks */, 6581F14C2B36C0CF00BA34A9 /* Resources */, ); buildRules = ( @@ -320,7 +317,7 @@ MACOSX_DEPLOYMENT_TARGET = 14.1; MARKETING_VERSION = 1.0; OTHER_LDFLAGS = "\"$(inherited) -framework common\""; - "OTHER_LDFLAGS[arch=*]" = ""; + "OTHER_LDFLAGS[arch=*]" = "\"-ObjC -fObjC\""; PRODUCT_BUNDLE_IDENTIFIER = com.chatdemo.chatdemoios; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = auto; diff --git a/sample/chat-demo-mpp/ios/chatdemoios.xcodeproj/xcuserdata/hieuvu.xcuserdatad/xcschemes/xcschememanagement.plist b/sample/chat-demo-mpp/ios/chatdemoios.xcodeproj/xcuserdata/hieuvu.xcuserdatad/xcschemes/xcschememanagement.plist index 9145cc551..ca4cc98f9 100644 --- a/sample/chat-demo-mpp/ios/chatdemoios.xcodeproj/xcuserdata/hieuvu.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/sample/chat-demo-mpp/ios/chatdemoios.xcodeproj/xcuserdata/hieuvu.xcuserdatad/xcschemes/xcschememanagement.plist @@ -4,10 +4,15 @@ SchemeUserState + Promises (Playground).xcscheme + + orderHint + 1 + chatdemoios.xcscheme_^#shared#^_ orderHint - 2 + 0 SuppressBuildableAutocreation diff --git a/sample/chat-demo-mpp/ios/chatdemoios/Info.plist b/sample/chat-demo-mpp/ios/chatdemoios/Info.plist index 11845e1da..02e8a9298 100644 --- a/sample/chat-demo-mpp/ios/chatdemoios/Info.plist +++ b/sample/chat-demo-mpp/ios/chatdemoios/Info.plist @@ -2,7 +2,22 @@ + CFBundleIdentifier + io.github.jan.supabase.ios + GIDClientID + YOUR_CLIENT_ID CADisableMinimumFrameDurationOnPhone + CFBundleURLTypes + + + CFBundleTypeRole + Editor + CFBundleURLSchemes + + YOUR_REVERSED_CLIENT_ID + + +