Hướng dẫn

Kết nối tài khoản App Store và Google Play của bạn.

TL;DR. Để Mokbi phát hành thay bạn, bạn chỉ cần kết nối hai thứ một lần: khóa service account của Google Cloud (một file JSON) cho Google Play, và khóa API của App Store Connect (một file .p8 cùng Key ID và Issuer ID) cho Apple. Phần khóa thì dễ. Bước khiến hầu hết mọi người vướng mắc là cấp đúng quyền truy cập đúng chỗ, vì Google Cloud IAM và Play Console là hai hệ thống phân quyền hoàn toàn tách biệt. Hướng dẫn này đi qua toàn bộ cả hai thiết lập từ đầu đến cuối và liệt kê cách khắc phục chính xác cho các lỗi thường gặp.

Những gì bạn cần

Mokbi không bao giờ thấy mật khẩu cửa hàng của bạn. Thay vào đó, bạn tạo một khóa có phạm vi giới hạn cho mỗi cửa hàng và dán vào một lần. Khóa được xác minh với cửa hàng, lưu trữ dưới dạng mã hóa, và bạn có thể ngắt kết nối bất cứ lúc nào.

  • Google Play: một khóa service account của Google Cloud, tải về dưới dạng file JSON, từ một dự án đã bật Google Play Android Developer API, cùng với service account đó được mời vào Play Console của bạn.
  • App Store Connect: một khóa API, tải về dưới dạng file .p8, cùng với Key IDIssuer ID của nhóm bạn.

Bạn chỉ cần làm việc này một lần cho mỗi cửa hàng. Sau đó, phát hành và phát hành lại chỉ còn là một cú nhấp chuột. Làm Google trước, vì nó có nhiều bước hơn.

Google Play, phần 1: tạo khóa service account

Việc này thực hiện trong Google Cloud Console (console.cloud.google.com).

  1. Tạo hoặc chọn một dự án, ví dụ "Mokbi Publisher".
  2. Vào APIs & Services → Library, tìm Google Play Android Developer API, rồi nhấn Enable.
  3. Vào APIs & Services → Credentials → Create credentials → Service account. Đặt tên như mokbi-play-publisher. Bạn có thể để trống vai trò của dự án — quyền thực sự đến từ Play Console ở phần 2.
  4. Mở service account, vào tab Keys, rồi Add key → Create new key → JSON, và tải file về. File JSON đó chính là thứ bạn dán vào Mokbi. client_email bên trong file (kết thúc bằng .iam.gserviceaccount.com) là địa chỉ bạn sẽ mời ở bước tiếp theo, vậy nên hãy giữ nó sẵn.

Gặp thông báo "Service account key creation is disabled"? Đó là một chính sách tổ chức của Google có tên iam.disableServiceAccountKeyCreation, mặc định bật theo "Secure by Default". Tắt nó cho dự án này: vào IAM & Admin → Organization Policies, tìm Disable service account key creation, chọn Manage policy, chọn "Override parent's policy", đặt Enforcement: Off giới hạn cho dự án này, rồi Save. Đợi khoảng vài phút rồi thử tạo khóa lại. Bạn cần vai trò Organization Policy Administrator, mà chủ tổ chức có sẵn hoặc có thể cấp cho bạn.

Google Play, phần 2: cấp quyền truy cập trong Play Console

Đây là bước khiến nhiều người mất hàng giờ, nên hãy đọc kỹ. Quyền truy cập vào ứng dụng của bạn chỉ được cấp duy nhất trong Google Play Console (play.google.com/console), không bao giờ trong Google Cloud IAM. Có hai chỗ cần kiểm tra:

  1. Setup → API access: đảm bảo dự án Google Cloud chứa service account của bạn đã được liên kết ở đây. Nếu thiếu liên kết này, khóa vẫn xác thực được nhưng sẽ nhận lỗi 403 trên mọi ứng dụng.
  2. Users and permissions (ở cuối cột bên trái, cấp tài khoản): chọn Invite new users, dán email của service account (địa chỉ kết thúc bằng .iam.gserviceaccount.com), sau đó trong App permissions thêm ứng dụng của bạn và cấp ít nhất quyền Manage store presence. Chỉ riêng quyền ứng dụng này là đủ để phát hành nội dung trang cửa hàng và ảnh chụp màn hình — bạn không cần quyền Admin cấp tài khoản.

Ứng dụng của bạn phải đã tồn tại sẵn trong Play Console. API trang cửa hàng chỉnh sửa một package có sẵn, không tạo ứng dụng mới, và cũng chưa cần tải lên APK hay AAB nào. Hãy đảm bảo tên package bạn nhập trong Mokbi khớp chính xác với ứng dụng.

Cái bẫy số một: Cloud IAM không phải là Play Console

Nếu bạn cứ gặp lỗi PERMISSION_DENIED, gần như luôn luôn là vì lý do này. Google Cloud IAM (trang IAM & Admin → IAM trong Cloud Console, nơi bạn gán "vai trò" cho service account) kiểm soát quyền truy cập vào tài nguyên Google Cloud. Nó không ảnh hưởng gì đến quyền truy cập vào trang cửa hàng của ứng dụng bạn. Gán vai trò ở đó sẽ không bao giờ khắc phục được lỗi quyền truy cập cửa hàng.

Quyền truy cập ứng dụng nằm hoàn toàn trong Play Console, ở hai chỗ nêu trên: liên kết API access và lời mời trong Users and permissions. Thiết lập đúng hai chỗ đó, và cùng một khóa từng trả về lỗi 403 sẽ bắt đầu hoạt động.

Apple: tạo khóa API App Store Connect

Việc này thực hiện trong App Store Connect (appstoreconnect.apple.com). Mokbi cần ba thứ: nội dung file .p8, Key ID, và Issuer ID.

  1. Vào Users and Access → Integrations → App Store Connect API. Mục này chỉ hiển thị cho Account Holder hoặc Admin của nhóm bạn. Nếu được hỏi, hãy cho phép khóa nhóm.
  2. Nhấn Generate API Key, đặt tên (ví dụ "Mokbi Publisher"), và gán vai trò App Manager.
  3. Tải file .p8 về. Bạn chỉ có thể tải nó một lần duy nhất, nên hãy lưu ở nơi an toàn. Ghi lại Key ID hiển thị cạnh khóa, và Issuer ID — UUID ở đầu trang Keys.

Giống như Google, ứng dụng phải đã tồn tại sẵn trong App Store Connect. API chỉnh sửa một trang cửa hàng có sẵn và không cần tải lên bản build nào. Phát hành bằng Mokbi sẽ chuẩn bị sẵn phiên bản cho bạn và dừng lại trước bước gửi duyệt, để bạn tự nhấn Submit trong App Store Connect khi đã sẵn sàng.

Kết nối trong Mokbi

Mở một dự án, vào bước Đăng, và dùng các nút kết nối:

  • Kết nối Google Play: dán toàn bộ nội dung JSON của service account, rồi nhấn Xác minh & kết nối. Nhập tên package của bạn và chạy Kiểm tra kết nối trước khi phát hành.
  • Kết nối App Store Connect: mở file .p8 bằng trình soạn thảo văn bản và dán nội dung của nó, thêm Key ID và Issuer ID, rồi nhấn Xác minh & kết nối.

Mỗi khóa đều được xác minh với cửa hàng trước khi lưu lại bất cứ gì, được mã hóa và lưu trong kho lưu trữ của chúng tôi, và có thể ngắt bất cứ lúc nào bằng Ngắt kết nối.

Các lỗi thường gặp và cách khắc phục

"Service account key creation is disabled." Một chính sách tổ chức đang chặn khóa JSON. Tắt iam.disableServiceAccountKeyCreation cho dự án (xem Google Play phần 1), đợi hai phút, rồi thử lại.

PERMISSION_DENIED hoặc lỗi 403 trên mọi ứng dụng. Quyền truy cập chưa được thiết lập trong Play Console. Kiểm tra lại xem dự án Cloud đã được liên kết trong Setup → API access chưa, và email service account đã được mời trong Users and permissions với quyền Manage store presence trên ứng dụng của bạn chưa. Vai trò trong Cloud IAM không có tác dụng ở đây.

Vẫn lỗi ngay sau khi bạn cấp quyền. Các thay đổi về quyền cần vài phút để có hiệu lực. Lưu lại quyền trong Play Console một lần nữa (mở lên và lưu lại) hoặc đợi thêm một chút, rồi chạy Kiểm tra kết nối lần nữa. Để cô lập vấn đề nhanh: hãy thử tạm thời cấp quyền Admin cấp tài khoản cho service account — nếu lượt thử đó thành công, nghĩa là lỗi trước đó nằm ở phạm vi ứng dụng hoặc liên kết dự án.

Sai ứng dụng, hoặc không có gì xảy ra. Tên package trong Mokbi phải khớp chính xác với ứng dụng trong Play Console, và ứng dụng phải đã tồn tại sẵn trong cả hai console. API trang cửa hàng chỉnh sửa một ứng dụng có sẵn, không bao giờ tạo mới.

Mất file .p8. Apple chỉ cho phép tải xuống một lần. Nếu đã mất, hãy thu hồi khóa đó trong App Store Connect và tạo một khóa mới, rồi kết nối lại trong Mokbi.

Kết nối cửa hàng của bạn → Xem cách phát hành hoạt động