Đăng nhập Play Games (bắt buộc)
Mục tiêu: Portal xác minh được người chơi bằng mã do Google cấp, không tin player id game tự khai.
3.1 — Bật Play Games Services và liên kết Cloud project (Play Console)
- Play Console → chọn app → Grow users → Play Games Services → Setup and management → Configuration.
- Chọn Yes, my game already uses Google APIs nếu đã có Cloud project, hoặc để Play Console tạo Cloud project mới. Ghi lại tên project — mọi bước ở Google Cloud dưới đây làm trong project này.
- Trong trang Configuration, ghi lại Project ID của Play Games (dãy số, ví dụ
123456789012) — đây làapp_idcủa game (mục 3.4).
3.2 — Tạo OAuth (Google Cloud Console)
- Google Cloud Console → chọn đúng project → APIs & Services → OAuth consent screen: User type External, điền tên app, email hỗ trợ, domain
portal.tinysoft.io.vn(nếu được hỏi). Scope mặc định là đủ (games_litedo Play Games tự xin). - APIs & Services → Credentials → Create credentials → OAuth client ID → Web application. Đặt tên ví dụ "Portal server auth". Không cần Authorized redirect URI (Portal đổi mã với redirect rỗng). Lưu lại Client ID (
…apps.googleusercontent.com) và Client secret (GOCSPX-…). - Create credentials → OAuth client ID → Android: package
com.tst.game.drone_strike, SHA-1 của khóa ký. Cần ít nhất SHA-1 của App signing key (Play Console → Test and release → App integrity); thêm SHA-1 của upload key/debug key nếu cài app không qua Google Play khi test. Đây là yêu cầu của Google cho đăng nhập Play Games trên Android.
3.3 — Khai báo credential cho Play Games Services (Play Console)
- Play Games Services → Configuration → Credentials → Add credential → Android: chọn OAuth client Android vừa tạo.
- Add credential → Game server: chọn OAuth client Web application ở 3.2. Bước này bắt buộc — thiếu nó, game gặp
ApiException 10 / DEVELOPER_ERRORkhi xin server auth code. - Thêm tài khoản Google của người test vào Testers (khi Play Games config chưa publish), rồi Review and publish cấu hình Play Games khi sẵn sàng.
3.4 — Đưa giá trị vào Portal và game
| Giá trị | Nhập ở đâu | Ghi chú |
|---|---|---|
| Android package | Portal → Game Registry → sửa game → Android package | com.tst.game.drone_strike |
| Web client ID + Client secret | Portal → Game Registry → biểu tượng khiên ở dòng game ("Play Games: xác minh người chơi") | Chỉ Super Admin, cần MFA step-up. Secret chỉ ghi, mã hóa bằng MFA_ENCRYPTION_KEY (đổi khóa này thì phải nhập lại secret). Khiên chuyển "Đã cấu hình" là xong. |
| Web client ID (lần 2) | Repo game: env/prod.json → PLAY_GAMES_WEB_CLIENT_ID | Phải trùng web client nhập trong Portal. Không đưa secret vào game. |
| Play Games Project ID | Repo game: android/app/src/main/res/values/strings.xml → app_id (template SDK: games_ids.xml → game_services_project_id) | Manifest đọc qua com.google.android.gms.games.APP_ID |
| API key của game | Repo game: env/prod.json → PORTAL_API_KEY | Lấy ở Portal → Game Registry → API Key |
i
IDENTITY_VERIFICATION_MODE trên VPS phải là real (mặc định). skip/fake bỏ qua xác minh và chỉ được phép ở dev/test — backend từ chối khởi động nếu đặt ở production.
3.5 — Kiểm tra
- Cài game (bản từ Internal testing) bằng tài khoản tester, đăng nhập Play Games.
- Portal → Players: người chơi mới xuất hiện. Lỗi thì xem log backend:
docker compose -f docker-compose.prod.yml logs backend | grep -i identity.
| Triệu chứng | Nguyên nhân | Xử lý |
|---|---|---|
Game báo ApiException 10 / DEVELOPER_ERROR | Web client chưa thêm làm credential Game server, hoặc SHA-1 không khớp khóa ký bản đang cài | Mục 3.3 bước 2; thêm đúng SHA-1 (App integrity) vào OAuth client Android |
Link trả 401 identity verification failed | Chưa nhập web client trong Portal, sai secret, web client trong game khác trong Portal, hoặc thiếu Android package | Kiểm khiên "Đã cấu hình", đối chiếu PLAY_GAMES_WEB_CLIENT_ID, kiểm Android package |
| Đăng nhập không hiện cho người test | Cấu hình Play Games chưa publish và tài khoản chưa trong danh sách Testers | Thêm tester hoặc publish cấu hình |
Áp dụng cho Portal v1.2.2