### 影片簡介 - 本影片介紹如何在 Jetpack Compose 專案中整合 Google 登入,並遵循 Clean Architecture。 - 透過簡單的按鈕登入,選擇 Google 帳戶後進入個人檔案畫面,顯示用戶資訊並提供登出功能。 - 確保登入狀態持續存在,重新啟動 App 仍可自動導向個人檔案畫面。 ### 前置準備 - 下載影片描述中的初始專案,以獲取必要的 Gradle 設定與依賴項目。 - 主要使用 Firebase、Jetpack Compose Lifecycle、Compose Navigation(管理登入與個人檔案畫面)、Coil(載入遠端圖片)。 - Kotlin 版本為 1.8.10,Compose 版本為 1.4.0。 ### Google 登入的實現方式 - 可自行架設驗證伺服器處理 Google 登入請求與 Token 驗證(本專案不採用)。 - 使用 Firebase 作為後端服務,簡化 Google 登入整合流程(本專案採用)。 ### 連接 Firebase - 在 Android Studio 開啟 `Tools` → `Firebase`,打開 Firebase 助理面板。 - 在 Firebase 控制台新增專案(範例名稱:Google Sign In YouTube)。 - 取消 Google Analytics 以簡化設置,然後建立專案。 - 在 Firebase 助理選擇 `Authentication` → `Sign in with Google`,點擊 `Connect to Firebase`。 - 確保 `google-services.json` 文件出現在 `project view` 中(避免上傳至 GitHub)。 ### 設定 SHA1 指紋 - 在 Android Studio `Gradle` 面板,進入 `Tasks` → `Android` → `Signing Report`。 - 執行 `Signing Report` 以獲取 SHA1 值。 - 進入 Firebase 控制台,前往 `Project settings` → `SHA certificate fingerprints`。 - 貼上 SHA1 指紋,點擊 `Save`。 ### 啟用 Google 登入驗證 - 在 Firebase 控制台,進入 `Build` → `Authentication`,點擊 `Get Started`。 - 在 `Sign-in method` 中選擇 `Google`,啟用該選項。 - 設定 `支援信箱`(選擇 Firebase 帳戶的電子郵件)。 - Firebase 會自動生成 `Web client ID`,稍後需在 Android 專案中使用。 - 點擊 `Save` 以完成設定。 ### Firebase 設定完成 - 現在 Firebase 端的設定已完成,接下來可以開始撰寫程式碼來實作 Google 登入功能。 ### **專案結構規劃** - 採用 Clean Architecture,將 Google Sign-In 放入 Presentation 層,因為 Firebase SDK 既包含資料處理,也涉及 UI 互動。 - 創建 `presentation` 資料夾,內部建立 `signin` 子資料夾,放置 `GoogleAuthUiClient` 負責登入、登出、取得使用者資訊。 ### **GoogleAuthUiClient 類別** - 需要 `Context` 和 `SignInClient`(Firebase 提供的 One Tap 客戶端)。 - 內部保存 FirebaseAuth 物件,負責處理登入狀態。 ### **建立登入請求** - 建立 `private fun buildSignInRequest()` 回傳 `BeginSignInRequest` 物件。 - 設定 `setGoogleIdTokenRequestOptions(true)` 讓 Google ID 登入可用。 - 設定 `setFilterByAuthorizedAccounts(false)` 顯示所有 Google 帳戶。 - 設定 `setServerClientId(context.getString(R.string.web_client_id))` 使用 Firebase 取得的 Web Client ID。 - 設定 `setAutoSelectEnabled(true)` 若只有一個帳戶則自動選取。 ### **執行登入** - `suspend fun signIn()` 透過 `oneTapClient.beginSignIn(request).await()` 啟動登入流程。 - 成功時回傳 IntentSender,讓 Activity 啟動 Google 登入畫面。 - 使用 `try-catch` 捕捉異常,避免協程取消時影響流程。 ### **處理登入結果** - `suspend fun signInWithIntent(intent: Intent)` 透過 `oneTapClient.getSignInCredentialFromIntent(intent)` 取得憑證。 - 建立 Google 認證資訊,然後透過 `auth.signInWithCredential(credentials).await()` 讓 Firebase 完成登入。 - 取得 FirebaseUser 並轉換為 `UserData`,包含 `userId`、`username` 和 `profilePictureUrl`。 - 回傳 `SignInResult(data, errorMessage)`。 ### **UserData 與 SignInResult** - `UserData` 包含 `userId` (Firebase UID)、`username` (可為 null)、`profilePictureUrl` (可為 null)。 - `SignInResult` 包含 `data` (成功時為 `UserData`,否則為 null)、`errorMessage` (錯誤時的訊息)。 ### **登出功能** - `suspend fun signOut()` 執行 `oneTapClient.signOut().await()` 和 `auth.signOut()`,讓使用者必須重新登入。 ### **取得目前登入使用者** - `fun getSignedInUser(): UserData?` 讀取 `auth.currentUser`,轉換為 `UserData`,若無登入則回傳 null。 ### **登入狀態管理** - `SignInState` 包含 `isSignInSuccessful` (是否成功登入,預設 `false`)、`signInErrorMessage` (錯誤訊息,可為 null)。 - 透過 `SignInState` 監聽登入狀態,決定 UI 變更。 ### **ViewModel 設計** - `SignInViewModel` 使用 `StateFlow` 來管理登入狀態。 - `state` 為可變的 `MutableStateFlow`,對外提供不可變版本。 - `onSignInResult` 函數會在登入後更新狀態。 - 根據登入結果,若有 `UserData` 則設 `isSignInSuccessful` 為 `true`,並更新錯誤訊息。 - 提供 `resetState` 函數來重置狀態,將 `isSignInSuccessful` 設為 `false`,清除錯誤訊息。 ### **SignInScreen 設計** - 使用 `Box` 和 `Button` 布局,按鈕顯示「Sign In」。 - 透過 `onSignInClick` Lambda 來處理按鈕點擊事件。 - 顯示錯誤訊息時,透過 `Toast` 提示用戶。 - 使用 `LocalContext.current` 來獲取 `context`,並在錯誤狀態變化時顯示 `Toast`。 ### **UI 更新與錯誤處理** - 當登入錯誤時,使用 `LaunchedEffect` 監控 `state.signInError`,並顯示錯誤提示。 - 設計簡單的 UI,包含填滿螢幕的 `Box` 和居中的登入按鈕。 ### **MainActivity 設計與導航** - 使用 `NavController` 設定頁面導航,起始頁面為登入頁面。 - 使用 `rememberLauncherForActivityResult` 來處理 `IntentSender`,並接收登入結果。 - 根據登入結果更新 `SignInViewModel` 的狀態。 ### **IntentSender 處理** - 在 `onSignInClick` 中觸發 `signInIntentSender`,並將 `IntentSender` 交給 `launcher` 執行。 - 如果登入成功,呼叫 `onSignInResult` 更新登入結果。 - 使用 `ActivityResultContracts.StartIntentSenderForResult` 來處理結果。 ### **錯誤與崩潰處理** - 初始 Firebase 設定錯誤,未初始化 Firebase 預設應用。 - 需要在 `build.gradle` 中添加 Firebase 插件配置,解決崩潰問題。 ### **ProfileScreen 設計** - 不需要 ViewModel,因為只顯示靜態用戶資料。 - 顯示用戶的個人資料,包含頭像、用戶名和登出按鈕。 - 使用 `AsyncImage` 顯示用戶頭像,並進行圓形裁剪。 - 顯示用戶名,設置居中對齊和加粗字型。 - 當點擊登出按鈕時,執行登出操作。 ### **MainActivity 設計** - 在 `MainActivity` 中註冊 Profile 頁面,並將用戶資料傳遞給 ProfileScreen。 - 通過 `GoogleAuthUIClient` 獲取已登入用戶資料,並傳遞給 ProfileScreen。 - 註冊登出操作,點擊登出後會調用 `GoogleAuthUIClient.signOut`,並顯示登出提示。 - 使用 `NavController` 進行頁面導航,登出後返回登入頁面。 ### **ProfileScreen 參數處理** - 讓 `userData` 參數可為 nullable,並在 ProfileScreen 中加入 null 檢查。 - 傳遞 `userData` 物件,確保即使用戶資料為 null 也能正常處理。 ### **自動導航至 ProfileScreen** - 當應用啟動並且用戶已登入時,直接導航至 ProfileScreen。 - 使用 `LaunchedEffect` 檢查是否已登入,若已登入則直接導航至 ProfileScreen。 ### **Sign In 及登出邏輯** - 登入成功後顯示 toast 並導航至 ProfileScreen。 - 登出後重置狀態,並返回登入頁面。 - 若再次啟動應用,檢查用戶是否已登入,若已登入則自動導航至 ProfileScreen。 # Terminology - **Jetpack Compose**:Android 的現代 UI 工具,使用聲明式方式構建 UI - **Google Sign-In**:允許用戶使用 Google 帳戶進行身份驗證的登入方式 - **Clean Architecture**:一種軟體設計模式,將程式碼分層以提高可維護性與測試性 - **Firebase**:Google 提供的後端服務平台,支援身份驗證、數據存儲等功能 - **Authentication**:身份驗證,確保用戶身份的真實性 - **Firebase Console**:Firebase 的網頁管理平台,可用於配置專案 - **Gradle**:Android 專案的構建工具,用於管理依賴與編譯配置 - **dependencies**:依賴項,專案所需的外部庫或模組 - **SHA-1 Fingerprint**:應用的數位簽章,用於識別應用程式 - **Google Services JSON**:Google 服務配置文件,包含 Firebase 專案資訊 - **Android Studio**:Google 官方的 Android 應用開發環境 - **Dagger Hilt**:Google 推出的依賴注入框架,簡化依賴管理 - **Navigation Component**:Jetpack 提供的導航管理工具,可處理多頁面應用的導航 - **Coil**:Kotlin 版的圖片加載庫,優化圖片處理與顯示 - **ViewModel**:Android 架構元件之一,用於管理 UI 相關的數據 - **LiveData**:可觀察數據容器,確保 UI 在數據變更時自動更新 - **MutableState**:Jetpack Compose 中的可變狀態變數 - **Sign-In Button**:提供 Google 登入的按鈕,觸發身份驗證流程 - **Profile Screen**:登入成功後顯示用戶資訊的畫面 - **Sign-Out Button**:登出按鈕,允許用戶退出帳戶 - **Reauthentication**:重新驗證,確保用戶仍具備訪問權限 - **Token**:身份驗證的憑證,用於驗證請求合法性 - **OAuth 2.0**:身份驗證協議,支援第三方應用登入 - **Client ID**:應用的唯一識別碼,用於驗證 Google Sign-In 請求 - **Web SDK Configuration**:用於 Web 端的 Firebase 設定 - **Firebase Authentication API**:Firebase 提供的身份驗證 API - **Google Play Services**:Google 提供的服務框架,支援多種應用功能 - **Intent**:Android 中用於啟動活動(Activity)的機制 - **Activity Result API**:用於處理活動結果的新式 API - **Coroutine**:Kotlin 提供的協程,用於處理非同步操作 - **suspend function**:Kotlin 中的掛起函式,用於協程內部執行 - **State Management**:狀態管理,確保 UI 與數據同步更新 - **Compose Lifecycle**:Jetpack Compose 中的生命週期管理工具 - **Firebase Assistant**:Android Studio 內建的 Firebase 配置工具 - **User Account Selection**:用戶選擇 Google 帳戶進行登入的介面 - **Persistent Login**:保持登入狀態,即使應用重啟也無需重新登入 - **GoogleSignInClient**:Google 登入的 API 客戶端,用於處理登入流程 - **GSON**:JSON 處理庫,用於解析與轉換數據 - **SharedPreferences**:Android 提供的輕量級本地存儲工具 - **EncryptedSharedPreferences**:加密版 SharedPreferences,提升安全性 - **FirebaseUser**:Firebase 中的用戶對象,包含用戶資訊 - **onActivityResult**:處理活動結果的回調函式(舊版 API) - **LauncherForActivityResult**:新的 API,處理活動結果更簡潔 - **GoogleApiAvailability**:檢查 Google 服務可用性的工具類 - **Authentication Token Refresh**:身份驗證令牌的更新機制 - **Security Rules**:Firebase 提供的安全規則,用於保護數據 - **Firebase Database**:Firebase 的雲端數據庫,可存儲應用數據 - **Error Handling**:錯誤處理,確保應用在異常情況下穩定運行 - **Logging**:記錄應用執行過程中的資訊,方便調試與監控 - **Network Connectivity Check**:檢測網絡連接狀態,避免登錄失敗 - **UI Testing**:用於測試應用的界面交互,確保功能正常運行 - **Unit Testing**:測試單一功能模組,確保其邏輯正確 - **Gradle**:一種用於構建Android應用的自動化工具,負責管理依賴項與構建流程。 - **Android View**:Android Studio 中的視圖模式,用於顯示應用的文件結構。 - **Clean Architecture**:一種軟體架構模式,將應用劃分為不同層級,以保持高內聚、低耦合。 - **Firebase SDK**:Google 提供的開發工具包,支援身份驗證、數據存儲等功能。 - **Intent Sender**:Android 中用於觸發特定操作(如啟動 Activity)的機制。 - **Activity for Result**:允許從一個 Activity 啟動另一個 Activity 並獲取返回結果的機制。 - **Presentation Layer**:應用的 UI 相關層,負責處理使用者介面邏輯。 - **GoogleAuthUIClient**:負責處理 Google 身份驗證的類別。 - **Context**:Android 應用的環境資訊,可用於獲取資源、啟動 Activity 等。 - **OneTapClient**:Firebase 提供的 API,用於管理 One Tap Google 登入。 - **FirebaseAuth**:Firebase 身份驗證服務的核心類別,負責用戶管理。 - **Coroutine**:Kotlin 的協程機制,用於處理非同步任務。 - **Suspend Function**:Kotlin 中的掛起函式,可在協程內部執行並暫停執行。 - **BeginSignInRequest**:One Tap 登入請求的配置類別,負責設置登入參數。 - **Builder Pattern**:一種設計模式,允許通過鏈式調用構建複雜對象。 - **GoogleIdTokenRequestOptions**:Google ID 令牌的請求選項。 - **Set Filter by Authorized Accounts**:設定是否只顯示已登入過的帳戶。 - **Server Client ID**:用於驗證 Google 登入請求的唯一標識符。 - **Strings.xml**:Android 應用的資源文件,用於存儲文字字串。 - **PendingIntent**:Android 的延遲意圖,允許其他應用在未來執行特定動作。 - **Task API**:Firebase SDK 的非同步操作機制,允許監聽操作結果。 - **OnSuccessListener**:當 Firebase 操作成功時的回調函式。 - **OnFailureListener**:當 Firebase 操作失敗時的回調函式。 - **Await()**:將 Firebase 的 Task 轉換為 Kotlin 協程的可掛起函式。 - **CancellationException**:協程取消時拋出的異常,用於確保正確取消流程。 - **SignInResult**:封裝 Google 登入結果的數據類別。 - **UserData**:封裝使用者基本資訊(如 UID、名稱、頭像)的類別。 - **FirebaseUser**:Firebase 身份驗證返回的用戶對象。 - **SignInCredential**:代表 Google 登入憑據的物件。 - **GoogleAuthProvider**:Firebase 提供的 Google 驗證機制。 - **SignInWithCredential**:Firebase 方法,使用登入憑據執行身份驗證。 - **DisplayName**:Google 帳戶的顯示名稱。 - **PhotoUrl**:Google 帳戶的個人頭像網址。 - **SignOut()**:登出目前登入的 Firebase 使用者。 - **GetCurrentUser()**:取得目前登入的使用者資訊。 - **Run{}**:Kotlin 擴展函式,用於簡化對象操作。 - **Try-Catch Block**:用於處理例外(Exception)的程式碼結構。 - **PrintStackTrace()**:列印錯誤堆疊資訊,幫助除錯。 - **Nullable**:Kotlin 的可空性概念,允許變數存儲 null 值。 - **ErrorMessage**:錯誤訊息變數,用於存儲失敗原因。 - **SignInState**:封裝登入狀態的類別,包含成功與錯誤資訊。 - **Boolean Flag**:用於標示特定狀態的布林變數。 - **Navigate to Next Screen**:當登入成功後導航到新的畫面。 - **LiveData**:Android 架構元件之一,用於監聽資料變化。 - **MutableState**:Jetpack Compose 提供的可變狀態,允許 UI 重新繪製。 - **ViewModel**:Android 架構元件,負責 UI 資料的管理與存活。 - **Compose Button**:Jetpack Compose 的按鈕元件,支援 UI 組合。 - **LaunchedEffect**:Jetpack Compose 提供的副作用機制,適用於啟動協程。 - **Scaffold**:Compose 提供的基本佈局結構,用於構建 UI。 - **Modifier**:Compose 提供的修飾符,用於改變 UI 元件的屬性。 - **Column**:Compose 內的佈局元件,讓子組件垂直排列。 - **Padding**:設定 UI 元件的內邊距,以增加間距與可讀性。 - **Click Listener**:當按鈕被點擊時執行的動作。 - **State Hoisting**:Jetpack Compose 的狀態提升模式,確保 UI 可組合性。 - **GoogleSignInButton**:Google 官方提供的登入按鈕組件。 - **SignInResponse**:封裝登入操作結果的物件,用於回應 UI。 - **ViewModel**:在MVVM架構中,負責處理與UI無關的業務邏輯和數據管理,並與UI層進行交互。 - **MutableStateFlow**:Kotlin中的可變狀態流,允許在應用中維護並觀察可變狀態。 - **StateFlow**:一種Kotlin的流,專門用來表示不可變的UI狀態,與MutableStateFlow一起使用。 - **Composables**:Compose中構建UI的基本單位,代表可重用的UI組件。 - **Lambda**:Kotlin中的匿名函數,可以作為參數傳遞,並在需要時執行特定操作。 - **ActivityResultLauncher**:用來啟動並處理活動結果的接口,與`startActivityForResult`方法相似。 - **IntentSender**:一個可以啟動Intent的對象,通常用於啟動外部應用或Activity並等待結果。 - **OneTapClient**:Firebase提供的一個用戶身份驗證API,用來簡化Google登入的流程。 - **Firebase Auth**:Firebase提供的身份驗證服務,用於處理用戶登錄和認證。 - **Suspending Function**:Kotlin中的掛起函數,允許在協程中進行非同步操作並阻塞當前執行線程。 - **Coroutine**:Kotlin的協程,用於處理異步操作,能夠保持輕量並且高效。 - **NavController**:Compose Navigation中的控制器,負責在多個屏幕之間導航。 - **NavHost**:在Compose中負責管理和顯示多個導航目的地的容器。 - **ActivityResultContracts**:提供不同類型的活動結果契約,用來啟動不同的活動並處理結果。 - **LifecycleScope**:用於協程啟動和取消的範圍,與Activity或Fragment的生命周期相關聯。 - **SignInResult**:登錄結果的數據類,包含用戶數據和錯誤訊息。 - **Task**:代表一個異步操作的結果,Firebase SDK中常用來表示操作的狀態。 - **Intent**:用於啟動Activity或傳遞數據的消息對象,在Android中非常常見。 - **ViewModelProvider**:用於創建並提供ViewModel實例的工具,通常與Activity或Fragment的生命周期相關聯。 - **FirebaseUser**:Firebase中用來表示經過身份驗證的用戶對象,包含用戶的基本信息。 - **CoroutineScope**:協程的範圍,用來管理協程的生命週期。 - **GoogleAuthProvider**:用來處理Google登錄的Firebase身份驗證提供者。 - **GoogleIdToken**:在使用Google登錄時,Google返回的一個身份驗證令牌。 - **UI State**:應用的用戶界面狀態,用來驅動UI的更新。 - **MutableLiveData**:LiveData的一種,允許在ViewModel中修改並通知觀察者。 - **LiveData**:一種可觀察的數據持有者,用於UI和數據層的解耦。 - **Context**:Android中的上下文對象,提供應用環境的訪問,如資源、系統服務等。 - **getResult**:用來獲取異步操作結果的函數。 - **Error Handling**:處理錯誤和異常的技術,確保程序能夠優雅地應對問題。 - **Toast**:在Android中顯示簡短訊息的UI元素。 - **OnClickListener**:用於處理UI元件(如按鈕)的點擊事件。 - **String Resources**:在Android應用中定義和管理字符串的資源文件。 - **Autofill**:自動填充表單信息的功能,通常與登錄表單一起使用。 - **ServerClientId**:用於Google登錄的Web端客戶端ID,從Firebase控制台中獲得。 - **GoogleCredential**:包含Google認證信息的對象,通常用來進行身份驗證。 - **BeginSignInRequest**:Firebase身份驗證流程中的請求對象,用來初始化登錄請求。 - **SignInRequestBuilder**:用於構建登錄請求的構建器模式。 - **UserData**:表示登錄用戶數據的對象,包含用戶ID、名稱和頭像URL等信息。 - **GoogleAccount**:在Android設備上註冊的Google帳戶,用於登錄。 - **SignOut**:用戶登出操作,從系統中登出當前用戶。 - **AuthResult**:表示身份驗證結果的對象,通常包含登錄後的用戶資料。 - **LoginFlow**:用戶登錄流程,包含從選擇登錄方式到最終完成登錄的過程。 - **PendingIntent**:可以在未來某個時間點執行的Intent,通常用於延遲處理某些操作。 - **WebClientId**:Firebase用來識別Web應用的客戶端ID,用於身份驗證。 - **SignedInUser**:成功登錄的用戶,通常包含詳細的用戶信息。 - **State Management**:在應用中管理UI狀態的技術,常見於MVVM架構中。 - **Authorization Flow**:身份驗證過程,涉及用戶授權和安全驗證的步驟。 - **Profile Screen**:顯示用戶個人資料的界面,通常在登錄後展示。 - **MutableLiveData**:LiveData的一種,能夠在內部修改其值並通知觀察者。 - **GoogleSignInClient**:Firebase SDK中的一個客戶端,用來處理Google登錄操作。 - **ActivityResult**:用來表示從活動返回的結果的數據對象。 - **ResultCode**:代表活動返回結果的狀態碼,常見的有`RESULT_OK`、`RESULT_CANCELED`等。 - **OnActivityResult**:舊版API中的方法,用於處理活動結果。 - **SignInWithIntent**:從已啟動的意圖中獲取登錄結果並進行處理的功能。 - **AuthCredential**:用來執行身份驗證操作的證書對象,通常由外部服務(如Google)提供。 - **CredentialProvider**:用來提供身份驗證所需憑證的接口。 - **CoroutineCancellationException**:協程取消時拋出的異常,表示協程被中止。 - **SignInRequest**:用來初始化Google登錄流程的請求對象。 - **Profile Screen**:顯示用戶個人資料的介面,通常包括用戶名、頭像等基本資訊。 - **Composables**:Compose中的可重用UI組件。 - **Column**:Compose中的佈局組件,用來垂直排列子項。 - **Modifier**:Compose中用來修飾或改變組件屬性(如大小、對齊、間距等)的對象。 - **Center**:用來將UI元素置中顯示的屬性。 - **AsyncImage**:使用Coil加載並顯示圖片的Compose組件,支持異步加載圖片。 - **Coil**:一個Android的圖片加載庫,用來高效處理圖像下載與顯示。 - **ContentScale**:定義圖片顯示方式的屬性,如裁剪、填充等。 - **ClipToShape**:將UI元素裁剪成特定形狀的屬性,例如圓形或矩形。 - **Spacer**:在Compose中插入空白間距的組件。 - **Text**:用來顯示文本的組件。 - **TextAlign**:設定文本對齊方式的屬性。 - **FontSize**:文本字體大小的屬性。 - **FontWeight**:文本字體重量(粗細)的屬性。 - **Sign Out**:登出操作,讓用戶退出當前賬戶。 - **Toast**:顯示短時間內的提示訊息的UI組件。 - **Lambda**:Kotlin中的匿名函數,可以作為參數傳遞。 - **Navigation**:在多個螢幕之間進行導航的技術。 - **NavController**:Compose中的導航控制器,用來管理屏幕之間的跳轉。 - **NavHost**:Compose中的導航容器,負責顯示不同的目標頁面。 - **LifecycleScope**:與生命周期關聯的協程範圍,用來啟動協程並在生命周期結束時取消。 - **User Data**:表示用戶資料的對象,通常包括用戶名稱、電子郵件和頭像等信息。 - **Profile Picture**:用戶的頭像圖片。 - **Google Auth UI Client**:Firebase用於處理Google登入的API客戶端。 - **SignInResult**:用戶登錄結果對象,包含登錄是否成功和相關的用戶數據。 - **getSignedInUser**:Firebase用來獲取當前已登錄用戶的方法。 - **GoogleSignInAccount**:Google登錄後的用戶帳戶對象,包含用戶的詳細信息。 - **ProfileScreen**:顯示用戶詳細資料的界面,通常包含用戶的名字、照片和其他基本資訊。 - **Reset State**:重置界面狀態,通常在登出時使用,確保用戶登錄狀態被清除。 - **SignOut Lambda**:在點擊登出按鈕時執行的Lambda函數,用來處理登出操作。 - **NavController.popBackStack()**:用來返回到前一個屏幕的導航方法。 - **Nullable Type**:允許變數為空(null)的類型,通常用於處理可選的數據。 - **Null Check**:檢查變數是否為null的操作,防止程式錯誤。 - **LaunchEffect**:Compose中用來在特定狀態變化時執行副作用的組件。 - **Activity Result**:從Activity返回的結果,通常用來處理活動之間的數據交互。 - **Intent**:Android中的一種用於啟動Activity或Service的對象。 - **IntentSender**:一個可以啟動Intent的對象,通常用於發送外部活動或登錄請求。 - **Google Sign-In**:Google提供的身份驗證API,讓用戶通過Google帳戶登錄。 - **FirebaseAuth**:Firebase的身份驗證服務,用來管理用戶登錄和登出。 - **AuthResult**:身份驗證結果的數據對象,通常包含用戶資料和認證狀態。 - **FirebaseUser**:Firebase的用戶對象,表示成功登入的用戶。 - **SignInWithIntent**:使用意圖進行登錄的功能,通常用於Google登錄。 - **ActivityResultContracts.StartIntentSenderForResult**:用來啟動Intent並獲取結果的契約。 - **ViewModel**:在MVVM架構中,負責處理UI邏輯和數據的對象。 - **Composable Function**:Compose中用來構建UI的函數,返回組件或元素。 - **NavGraph**:導航圖,用來定義不同的導航路徑和目的地。 - **GoogleIdToken**:Google登錄成功後返回的身份驗證令牌。 - **LiveData**:可以被觀察的數據類型,當數據變更時通知觀察者。 - **FirebaseCredential**:身份驗證過程中使用的憑證類型。 - **AuthCredential**:用來表示用戶身份驗證憑證的對象。 - **ActivityResultContracts.StartActivityForResult**:舊版Android中啟動活動並返回結果的契約。 - **LifecycleObserver**:生命週期觀察者,用來監聽和處理生命周期狀態變化。 - **GoogleSignInOptions**:設置Google登錄選項的對象,配置登錄流程的選項。 - **GoogleSignInClient**:Google登錄API的客戶端,用來處理登錄操作。 - **Profile Screen Navigation**:在導航過程中轉到用戶資料頁面的操作。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up