Bỏ qua để đến nội dung

Đă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.

GamePlay Games SDKPortal backendGoogle OAuthPlay Games API requestServerSideAccess(PLAY_GAMES_WEB_CLIENT_ID) server_auth_code + playerId POST /api/v2/games/{id}/client/players/link (x-game-api-key) POST /token: code + web client id + secret access_token GET /games/v1/players/me ?applicationId=android_package playerId — phải trùng playerId game gửi session cho người chơi (sai → 401 identity verification failed)
Web client id/secret nhập trong Portal (lưu mã hóa); game chỉ cần web client id (không có secret).

3.1 — Bật Play Games Services và liên kết Cloud project (Play Console)

  1. Play Console → chọn app → Grow users → Play Games Services → Setup and management → Configuration.
  2. 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.
  3. Trong trang Configuration, ghi lại Project ID của Play Games (dãy số, ví dụ 123456789012) — đây là app_id của game (mục 3.4).

3.2 — Tạo OAuth (Google Cloud Console)

  1. 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_lite do Play Games tự xin).
  2. 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-…).
  3. 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)

  1. Play Games Services → Configuration → Credentials → Add credential → Android: chọn OAuth client Android vừa tạo.
  2. 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_ERROR khi xin server auth code.
  3. 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 ở đâuGhi chú
Android packagePortal → Game Registry → sửa game → Android packagecom.tst.game.drone_strike
Web client ID + Client secretPortal → 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_IDPhải trùng web client nhập trong Portal. Không đưa secret vào game.
Play Games Project IDRepo 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 gameRepo game: env/prod.json → PORTAL_API_KEYLấ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

  1. Cài game (bản từ Internal testing) bằng tài khoản tester, đăng nhập Play Games.
  2. 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ứngNguyên nhânXử lý
Game báo ApiException 10 / DEVELOPER_ERRORWeb 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àiMục 3.3 bước 2; thêm đúng SHA-1 (App integrity) vào OAuth client Android
Link trả 401 identity verification failedChưa nhập web client trong Portal, sai secret, web client trong game khác trong Portal, hoặc thiếu Android packageKiể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 testCấu hình Play Games chưa publish và tài khoản chưa trong danh sách TestersThêm tester hoặc publish cấu hình

Áp dụng cho Portal v1.2.2