- Tạo Supabase dev project và chạy setup SQL để tạo sẵn các table
- Điền Supabase và Google OAuth values vào local.properties thay vì hardcode secrets
- Register Android app trong Firebase và giữ google-services.json ngoài Git
Setup Supabase SQL, Secrets Và Firebase
Chuẩn bị backend tables, auth configuration và Firebase Android project cần thiết trước lần chạy app nghiêm túc đầu tiên.
Video bài học sắp lên sóng
Trong lúc chờ, bạn hãy đọc bản text của bài học bên dưới: đầy đủ lý thuyết, code mẫu và checklist thực hành.
Mục Tiêu Bài Học
Bạn sẽ chuẩn bị phần backend setup tối thiểu mà app cần trước lần build nghiêm túc đầu tiên: Supabase, Google OAuth values, file local.properties và Firebase Android project.
Bài này chưa build feature. Mục tiêu là dọn các lỗi setup mơ hồ trước khi bạn đọc kiến trúc.
Phần 1: Tạo Supabase Dev Project
Mở Supabase dashboard và tạo dev project:
kotlin-accelerator-dev
| Value | Android có cần không? | Ghi chú |
|---|---|---|
| Project URL | Có | Client gọi Supabase qua URL này |
Publishable key (sb_publishable_...) | Có | Client-safe, nhưng định danh project |
| Service role hoặc secret key | Không | Backend-only; không paste vào Android |
| Database password | Không | Chỉ dùng cho admin/server |
Phần 2: Chạy Supabase SQL Tối Thiểu
Cách 1: Chạy manual
Mở Supabase SQL Editor, rồi mở file scripts/sql/setup.sql trong repo kotlin-accelerator-ai và copy nội dung. Repo cũng có scripts/sql/setup.vi.sql, cùng nội dung SQL nhưng chú thích bằng tiếng Việt. Chỉ chạy một trong hai file.
Paste vào SQL Editor và chạy. Sau đó mở tab Database, bạn sẽ thấy các table đã được tạo.
Cách 2: Thông qua Supabase MCP
Vào Supabase Project của bạn, chọn Connect > MCP > chọn AI Client > không tick Read-only > Copy Prompt > paste vào AI Client > Run. AI Client sẽ tự cài MCP server.
Sau đó restart AI Client, gọi @scripts/sql/mcp-bootstrap-prompt.md để MCP tự chạy cài đặt, rồi gọi @scripts/sql/mcp-seed-prompt.md để seed dữ liệu mẫu.
Phần 3: Cấu Hình Auth Secrets
Repo không kèm key nào. Bạn dùng Supabase project của chính mình, project đã tạo ở Phần 1.
Mở Terminal, cd vào root của repo kotlin-accelerator-ai và tạo local.properties từ file mẫu:
cp local.properties.example local.properties
Trên Command Prompt của Windows, dùng copy local.properties.example local.properties.
local.properties đã nằm trong .gitignore. File mẫu local.properties.example được commit vào repo. Ngoài các dòng comment, file có các key sau, value nào cũng là giá trị giữ chỗ:
supabase.url=https://YOUR-PROJECT.supabase.co
supabase.publishable.key=sb_publishable_YOUR_KEY
google.server.clientId=YOUR_WEB_CLIENT_ID.apps.googleusercontent.com
revenuecat.api.key=goog_YOUR_KEY
premium.gate.enabled=false
daily.challenge.enabled=false
Trên Supabase dashboard, bấm Connect của project để lấy Project URL và publishable key. Publishable key cũng có trong Project Settings > API Keys, là chuỗi ngắn bắt đầu bằng sb_publishable_. Paste hai giá trị này vào supabase.url và supabase.publishable.key, thay cho giá trị giữ chỗ.
App chỉ đọc supabase.publishable.key, không đọc tên cũ supabase.anon.key. Build Android sẽ dừng nếu key này trống, nếu bạn copy nhầm key dài bắt đầu bằng eyJ (anon key cũ mà Supabase sẽ deprecate vào cuối năm 2026), hoặc nếu đó là secret key bắt đầu bằng sb_secret_. Thông báo lỗi ghi rõ property cần sửa và không in value ra. Giá trị giữ chỗ sb_publishable_YOUR_KEY vẫn qua được bước kiểm tra này, nên nếu quên thay, app vẫn build được nhưng không gọi được Supabase.
app/build.gradle.kts đọc các key này và đưa vào BuildConfig lúc build, nên giá trị không nằm trong source code. Chỉ supabase.publishable.key là bắt buộc để build, key nào thiếu thì thành chuỗi rỗng. Ba dòng revenuecat.api.key, premium.gate.enabled và daily.challenge.enabled là tùy chọn. Khi premium.gate.enabled=false, app không khởi tạo RevenueCat, nên bạn chưa cần đụng tới ba dòng này.
File mẫu không có sdk.dir, vì đường dẫn Android SDK khác nhau trên mỗi máy. Khi Android Studio sync Gradle, nó tự ghi sdk.dir vào local.properties nếu file chưa có dòng này, và giữ nguyên các key khác. Nếu build bằng dòng lệnh mà file chưa có sdk.dir, đặt biến môi trường ANDROID_HOME trỏ tới thư mục Android SDK, tức thư mục mà SDK Manager trong Android Studio hiển thị (Settings, Languages & Frameworks, Android SDK). Nếu tự viết sdk.dir trên Windows, dấu \ và : trong đường dẫn phải escape, ví dụ sdk.dir=C\:\\Users\\<tên>\\AppData\\Local\\Android\\Sdk.
Với URL và publishable key của project mình, app dùng được Supabase để thực hành Login by Email. Bạn vẫn cần app/google-services.json ở Phần 4 thì app mới build được. Đăng nhập bằng Google cần thêm một OAuth web client trong Google Cloud.
Bạn vào Google Cloud Console, sau đó làm theo các bước sau.
- Tạo project với tên tùy ý, ví dụ
kotlin-accelerator-dev. - Tạo Credentials theo video:
Client ID trong video là web client. Paste nó vào google.server.clientId trong local.properties. iOS cần thêm một iOS OAuth client riêng, chỉ khi bạn chạy bản iOS trên Mac.
Phần 4: Tạo Firebase Android Project
Mở Firebase Console, tạo kotlin-accelerator-dev, rồi add Android app:
- Tìm Android package name thật trong project:
applicationIdtrongapp/build.gradle.kts, hiện làcom.creative.kta. - Register đúng package name đó trong Firebase.
- Thêm debug SHA-1 nếu app dùng Google sign-in hoặc Firebase Auth.
- Download
google-services.json. - Đặt file ở
app/google-services.json.
Để lấy debug SHA-1 (debug):
./scripts/get-sha1-fingerprint.sh
Trên Windows (Command Prompt hoặc PowerShell), chạy scripts\get-sha1-fingerprint.bat.
Đừng commit google-services.json vào Git. File này không chứa nhiều thông tin nhạy cảm, nhưng nó định danh Firebase project của bạn. Repo đã có dòng app/google-services.json trong .gitignore, đừng xoá nó.
Firebase chỉ được nối vào phía Android. Trên iOS, app dùng implementation thay thế cho Analytics và Remote Config, nên bạn không cần tạo iOS app trong Firebase cho khóa học này.
Phần 5: Điền Local Config, Không Hardcode
Giờ bạn đã có đủ value cho local.properties. Dán vào đúng key, không hardcode vào file Kotlin nào. iOS đọc cùng các value này từ một file riêng, iosApp/Configuration/Config.xcconfig, cũng được Git ignore. File đó chỉ cần khi bạn chạy bản iOS trên Mac.
Pass Kiểm Tra
- Launch app trên Device hoặc Emulator
- Đi qua Splash và Onboarding tới Menu
- Chọn Login bằng Email -> Kiểm tra login, logout, register, reset password
- Chọn Đăng nhập bằng Google. Nếu chưa setup Google auth thì bước này sẽ fail. Setup theo video rồi kiểm tra lại
Checkpoint
Bạn hoàn tất khi Supabase SQL đã apply, Auth đã config, Firebase có Android app, app/google-services.json được ignore, local.properties chỉ chứa client-safe values, và các luồng đăng nhập chạy đúng.