Dan Tech Academy
Sau bài này bạn sẽ
  • 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
Thời lượng18 phút
Độ khóBeginner

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 đang cập nhật

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.

Bản quay đang trong khâu hậu kỳ

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:

text
kotlin-accelerator-dev
ValueAndroid có cần không?Ghi chú
Project URLCó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 keyKhôngBackend-only; không paste vào Android
Database passwordKhôngChỉ 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:

bash
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ỗ:

properties
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:

  1. Tìm Android package name thật trong project: applicationId trong app/build.gradle.kts, hiện là com.creative.kta.
  2. Register đúng package name đó trong Firebase.
  3. Thêm debug SHA-1 nếu app dùng Google sign-in hoặc Firebase Auth.
  4. Download google-services.json.
  5. Đặt file ở app/google-services.json.

Để lấy debug SHA-1 (debug):

bash
./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.

Đăng nhập