Làm cho ứng dụng sẵn sàng cho cửa hàng từ coding agent
Agent đọc ứng dụng trước mặt nó — SDK, quyền, bundle id — và soạn nháp mọi trang tuân thủ từ những gì tìm thấy. Bạn đọc các bản nháp và xuất bản chúng. Agent thì không thể.
Trước khi bắt đầu
Bạn cần Claude Code và một tài khoản AppFoyer. Gói miễn phí là đủ: tạo tài khoản. Không có khóa nào phải tạo — agent sẽ nhờ bạn phê duyệt nó trong trình duyệt ở lần kết nối đầu tiên.
Hoàn toàn không có coding agent? Sáu trường trong trình duyệt cho bạn cùng năm trang đó mà không cần plugin.
Không dùng Claude Code? Plugin cần nó, nhưng các trang quyền riêng tư và điều khoản thì không: trình soạn thảo của chúng trong dashboard có một prompt, đã điền thông tin ứng dụng của bạn, để bạn chạy trong bất kỳ trợ lý nào rồi dán kết quả trở lại — được in đầy đủ trong hướng dẫn về chính sách quyền riêng tư và hướng dẫn về điều khoản.
Cài đặt
claude
/plugin marketplace add appfoyer/claude-plugin
/plugin install appfoyer@appfoyer Không cần tài khoản để bắt đầu: agent đọc bản build, cho thấy những gì nó tìm được và đặt câu hỏi ngay trên máy của bạn, và chỉ yêu cầu bạn kết nối khi có thứ cần lưu. Lần đầu nó gọi AppFoyer, trình duyệt của bạn mở ra một trang phê duyệt: đăng nhập hoặc tạo tài khoản miễn phí, kiểm tra tên và nơi trình duyệt sẽ quay về, rồi phê duyệt. Claude Code giữ kết nối và tự gia hạn nó; không có gì phải sao chép, không có gì được lưu trong shell của bạn. Nếu trình duyệt không mở, chạy /mcp, chọn appfoyer rồi chọn Authenticate. Trong ứng dụng desktop Claude Code, hãy kết nối một lần theo cách này từ terminal, rồi mở một phiên mới ở đó: một phiên đang chạy sẵn sẽ không thấy kết nối mới. Ngắt kết nối trên trang Agent của dashboard và lần gọi tiếp theo sẽ thất bại ngay lập tức. Claude Code không tự làm mới một marketplace của bên thứ ba: trong /plugin → Marketplaces → appfoyer, chọn Enable auto-update để nhận các phiên bản mới.
Không có trình duyệt trên máy đó — một máy chủ từ xa, một container, một lần chạy bằng script? Hãy dùng khóa API thay thế: tạo một khóa trong Agent → API key — for CI and headless use, cài plugin như trên để có quy trình làm việc, rồi thêm máy chủ thêm một lần nữa với khóa trong header của nó:
export APPFOYER_API_KEY=cpk_…
claude mcp add --transport http appfoyer-key https://app.appfoyer.com/mcp --header "Authorization: Bearer $APPFOYER_API_KEY" Plugin chỉ đọc khóa từ biến môi trường đó — skill không bao giờ thấy nó, và nó chỉ đi trong header Authorization mà Claude Code điền vào.
Một MCP client khác — claude.ai, Claude Desktop, Cursor, VS Code — có thể kết nối tới https://app.appfoyer.com/mcp theo cùng cách, với cùng trang phê duyệt. Nó nhận được các công cụ; quy trình từng bước đọc tệp build của bạn đi kèm với plugin Claude Code.
Nói gì
Chạy những câu này bên trong repository của ứng dụng, không phải trong một thư mục trống:
| Nói | Điều gì xảy ra |
|---|---|
Make this app store-ready | Quét các tệp build, xác nhận những dữ kiện nó không tự suy ra được, soạn nháp mọi trang, trả về một liên kết xem lại. |
Is this app store-ready? | Kiểm tra chỉ đọc theo danh sách kiểm tra tuân thủ. Không ghi gì. |
Wire the store-ready links into the app | Sau khi bạn xuất bản: đề xuất các liên kết quyền riêng tư và hỗ trợ trong ứng dụng dưới dạng một diff để bạn xem lại. |
Add the AppFoyer drift check | Đề xuất một GitHub workflow đánh dấu các pull request thêm SDK hoặc quyền mà các trang có thể chưa đề cập. Cách hoạt động. |
Ví dụ
Hãy nói bằng lời của bạn; đây là những trường hợp skill xử lý.
Một ứng dụng, lần chạy đầu tiên
> Make this app store-ready - Liệt kê những gì nó tìm thấy trong các tệp build — SDK, quyền, bundle id — mỗi mục kèm tệp và dòng.
- Chỉ hỏi những gì nó không tìm được: tên công ty, email hỗ trợ, khu vực pháp lý, liên kết cửa hàng. Tối đa hai lượt.
- Tạo ứng dụng, tải lên biểu tượng từ repository và soạn nháp cả năm trang.
- Kết thúc bằng một liên kết xem lại. Không có gì được công khai cho đến khi bạn xuất bản ở đó.
Chạy lại sau một thay đổi
> Make this app store-ready - Tìm ứng dụng hiện có theo application id và so sánh các dữ kiện mới với dữ kiện đã lưu.
- Chỉ soạn lại những trang bị thay đổi ảnh hưởng, chẳng hạn trang quyền riêng tư sau khi thêm một SDK phân tích mới.
- Không động đến biểu tượng và địa chỉ trừ khi bạn yêu cầu.
Nhiều flavor, được nêu tên trong prompt
> Make com.acme.weather.free and com.acme.weather.pro store-ready - Tạo hai ứng dụng và không hỏi gì về việc chọn lựa.
- Đọc thư mục, tên và các phụ thuộc riêng của từng flavor. Một SDK quảng cáo chỉ dùng trong flavor free sẽ không được đưa vào chính sách quyền riêng tư của flavor pro.
- Trả về một liên kết xem lại và một bảng URL console cho từng flavor.
Nhiều flavor, không được nêu tên
> Make this app store-ready - Liệt kê các flavor cùng application id của chúng, tất cả đã được chọn sẵn, và bạn chọn flavor nào có trang web.
- Các build type như debug và staging được liệt kê là bị loại trừ, không được đề xuất.
Chiều thương hiệu × môi trường
> Make every brand store-ready - Liệt kê các tổ hợp (brandAProd, brandBProd), không phải từng flavor riêng lẻ.
- Chỉ đề xuất môi trường production. dev và qa không bao giờ được phát hành lên cửa hàng.
- Đọc tên ứng dụng từ Gradle (resValue, manifestPlaceholders) hoặc từ source set đã di chuyển khi bản build đặt nó ở đó.
- Nếu không phân biệt được một chiều là môi trường hay thương hiệu, nó sẽ hỏi.
Địa chỉ tùy chỉnh (Pro và Advanced)
> Make this app store-ready - Dựng địa chỉ từ tên tiếng Anh của ứng dụng, ví dụ weather-now.
- Nếu địa chỉ đó đã bị lấy hoặc quá gần với một tên thương hiệu, nó thử địa chỉ tiếp theo — weather-now-app, acme-weather — tối đa năm lần, rồi hỏi bạn.
- Trên gói miễn phí, nó giữ địa chỉ app-… và cho biết địa chỉ tùy chỉnh có trong gói Pro.
- Địa chỉ app-… vẫn tiếp tục phục vụ cùng trang web đó.
Đổi một địa chỉ bạn đang dùng
> Change the address to weather-radar - Hỏi trước. Địa chỉ tùy chỉnh cũ được giải phóng ngay lập tức, và trang thông tin trên cửa hàng nào vẫn ghi địa chỉ đó sẽ ngừng hoạt động.
- Chỉ đổi sau khi bạn đồng ý.
Cập nhật biểu tượng
> Update the app icon - Tìm biểu tượng launcher: biểu tượng Play 512, ảnh mipmap lớn nhất, hoặc ảnh marketing AppIcon của iOS — ưu tiên biểu tượng riêng của flavor.
- Nếu nó lớn hơn 512 KB, nó thu nhỏ một bản sao trong thư mục tạm. Repository của bạn không bị động đến.
- Cho bạn biết nó đã tải lên tệp nào. Với một ứng dụng đã xuất bản, biểu tượng mới có hiệu lực ngay lập tức.
Ứng dụng có quảng cáo
> Make this app store-ready. AdMob publisher id pub-0000000000000000 - Viết app-ads.txt từ các dòng bạn cung cấp. Publisher id không có trong mã nguồn của bạn, nên nó không bao giờ đoán.
- Nhắc bạn đặt trang web làm trang web nhà phát triển trong trang thông tin trên cửa hàng.
- AdMob đã xác minh các tệp app-ads.txt trên địa chỉ của chúng tôi; hãy chờ tối đa 24 giờ để nó thu thập.
Giữ các trang đồng bộ với bản build
> Add the AppFoyer drift check - Mỗi lần chạy “make this app store-ready” đều ghi appfoyer.json ở gốc repository: các SDK, loại dữ liệu và quyền mà các trang được viết dựa trên. Nó được ghi bởi chính trình quét mà bước kiểm tra sử dụng, không bao giờ viết tay.
- Prompt này hiển thị một GitHub workflow cho appfoyer/check-action miễn phí và ghi .github/workflows/appfoyer.yml khi bạn đồng ý. Nó không bao giờ ghi đè một workflow bạn đã có.
- Từ đó, mỗi pull request đều liệt kê những gì nó đã thêm hoặc bỏ kể từ khi các trang được viết, kèm tệp và dòng. Chạy lại plugin sẽ cập nhật các bản nháp và appfoyer.json.
- Không có gì được commit thay bạn. Hướng dẫn về việc giữ chính sách quyền riêng tư đồng bộ có chi tiết và cách thiết lập cho các hệ thống CI khác.
Kiểm tra mà không thay đổi gì
> Is this app store-ready? - Chạy danh sách kiểm tra cho từng ứng dụng khớp và báo cáo những gì còn thiếu. Không ghi gì.
- Một flavor chưa có ứng dụng sẽ được báo là còn thiếu.
Đưa các liên kết vào ứng dụng
> Wire the store-ready links into the app - Cần các trang đã xuất bản.
- Đề xuất một diff cho các liên kết quyền riêng tư và hỗ trợ trong màn hình cài đặt hoặc chuỗi văn bản của bạn. Chỉ áp dụng khi bạn đồng ý, và không bao giờ commit.
Những gì rời khỏi máy của bạn
Chỉ các dữ kiện được suy ra:
- tên ứng dụng, nền tảng và bundle id hoặc application id;
- tên của các SDK và quyền tìm thấy trong tệp build của bạn;
- các câu trả lời bạn xác nhận — tên công ty, email hỗ trợ, khu vực pháp lý, URL cửa hàng;
- văn bản trang mà agent soạn, được lưu trên tài khoản của bạn dưới dạng bản nháp;
- biểu tượng của chính ứng dụng, được gửi một lần qua một liên kết tải lên dùng một lần.
Không có tệp nào khác, không bao giờ có mã nguồn, không bao giờ có bí mật hay khóa tìm thấy trong repository. Những gì agent gửi đi cũng chính là những gì một chính sách quyền riêng tư dù sao cũng phải nêu.
Một tệp được ghi vào repository của bạn và ở lại đó: appfoyer.json, bản ghi về những gì các trang được viết dựa trên, do trình quét đi kèm plugin tạo ra. Nó không được gửi đi đâu cả. Agent không bao giờ commit nó, hay bất cứ thứ gì khác — bạn tự làm việc đó.
Những gì agent không thể làm
Dù kết nối qua trình duyệt hay bằng khóa API, plugin giữ một thông tin xác thực của agent — vì vậy nó hoàn toàn không có quyền xuất bản. Điều này được thực thi trên máy chủ, không phải bằng cách nhờ agent một cách lịch sự:
- Không có công cụ xuất bản. Agent viết bản nháp; các trang đang hoạt động của bạn không thay đổi.
- Hai thứ không có bản nháp: biểu tượng và địa chỉ tùy chỉnh. Trên một ứng dụng đã xuất bản, chúng thay đổi trang web đang hoạt động ngay lập tức, và agent sẽ báo cho bạn khi đã đặt chúng. Nó không thể thay một địa chỉ tùy chỉnh bạn đang dùng nếu bạn không đồng ý.
- Route REST dùng để xuất bản một trang từ chối thẳng thông tin xác thực của agent — chỉ dành cho phiên đăng nhập.
- Mỗi trang vẫn phải qua cùng bước sàng lọc nội dung khi xuất bản như một chỉnh sửa viết tay.
- Mỗi lần gọi của agent đều được ghi vào nhật ký kiểm toán của tài khoản, kèm kết nối hoặc khóa đã thực hiện nó.
Vì vậy, trường hợp tệ nhất khi một kết nối hoặc khóa bị lộ là vài bản nháp phải bỏ, một biểu tượng sai hoặc một địa chỉ mới — không phải một trang được công khai dưới tên bạn.
Các công cụ nó nhận được
Plugin kết nối tới một MCP endpoint chỉ cung cấp đúng những công cụ này:
| Công cụ | Chức năng | |
|---|---|---|
list_apps | Đọc | Mọi ứng dụng trong tài khoản kèm slug, URL công khai, và việc có gì đã được xuất bản hay chưa. |
get_app | Đọc | Một ứng dụng: cài đặt, các dữ kiện thu thập dữ liệu đã lưu, và văn bản đang hoạt động, trạng thái xuất bản cùng bản nháp đang chờ của từng trang. |
create_app | Ghi | Tạo một ứng dụng với các trang mẫu. Không có gì được công khai. |
create_apps | Ghi | Tạo tối đa mười ứng dụng trong một lần gọi, mỗi flavor sản phẩm một ứng dụng. Mỗi ứng dụng bắt đầu ở trạng thái chưa xuất bản. |
update_app | Ghi | Thay đổi cài đặt, các dữ kiện thu thập dữ liệu đã lưu hoặc danh sách SDK. Không bao giờ sửa văn bản trang. |
set_page | Ghi | Ghi bản nháp cho một trang. Trang đang hoạt động không bị động đến. |
set_ad_lines | Ghi | Thay thế app-ads.txt. Chỉ dùng khi có SDK quảng cáo và bạn đã cung cấp publisher id. |
get_checklist | Đọc | Danh sách kiểm tra sẵn sàng cho cửa hàng do máy chủ tính, cùng những trang nào vẫn còn bản nháp chưa xuất bản. |
get_store_forms | Đọc | Câu trả lời nháp cho biểu mẫu Data safety của Google Play và thông tin App Privacy của Apple, dựa trên các dữ kiện và danh sách SDK. Bạn tự nhập chúng vào console. |
request_publish | Ghi | Báo rằng việc soạn nháp đã xong và trả về URL xem lại. Không xuất bản gì. |
set_icon | Ghi | Trả về một URL tải lên dùng một lần cho biểu tượng của ứng dụng. Có hiệu lực ngay — biểu tượng không có bản nháp. |
check_slug | Đọc | Kiểm tra một địa chỉ tùy chỉnh (Pro và Advanced) theo cùng quy tắc như dashboard. |
set_slug | Ghi | Nhận một địa chỉ tùy chỉnh. Có hiệu lực ngay. Từ chối thay địa chỉ bạn đã có trừ khi bạn đã đồng ý. |
Khi có sự cố
| Triệu chứng | Nguyên nhân |
|---|---|
| Các công cụ hiển thị "needs authentication" | Kết nối chưa bao giờ được phê duyệt, hoặc đã bị ngắt. Chạy /mcp, chọn appfoyer rồi chọn Authenticate. |
| Trang phê duyệt báo rằng yêu cầu không thể sử dụng | Liên kết đã hết hạn hoặc đã được mở hai lần. Bắt đầu lại từ trình soạn thảo; chưa có gì được kết nối. |
unauthorized khi dùng khóa API | Khóa đã bị thu hồi trong dashboard, hoặc thuộc về một tài khoản khác. Tạo khóa mới và export lại. |
| Xuất bản trả về lỗi hạn mức | Đã dùng hết giới hạn ứng dụng đã xuất bản của gói. Ứng dụng và các bản nháp của nó vẫn được giữ — hủy xuất bản một ứng dụng khác hoặc nâng cấp, rồi xuất bản từ màn hình xem lại. |
| Một bản nháp bị từ chối hoặc bị tạm giữ | Bước sàng lọc nội dung đã khớp với điều gì đó. Phần lý do liệt kê những gì đã khớp và cách khắc phục; hãy chỉnh sửa và gửi lại. Không có gì công khai bị thay đổi. |
Một điều không thay đổi
Các bản nháp là mẫu được hoàn thiện từ mã nguồn của bạn, không phải tư vấn pháp lý. Một agent viết chúng nhanh không có nghĩa là chúng đúng — hãy đọc những gì nó viết trước khi xuất bản, đặc biệt là danh sách những gì ứng dụng của bạn thu thập. Bạn là người mà cửa hàng coi là chịu trách nhiệm.
Câu hỏi: support@appfoyer.com.