Trang chủ

Sáu lần bị App Store từ chối và thứ thật sự chữa được chúng

Qua vài ứng dụng, tôi đã sưu tập được sáu lần bị từ chối. Lần nào cũng tránh được, và trong bốn trường hợp, thông báo từ chối gọi tên một điều khoản mà ý nghĩa thật của nó không hề hiển nhiên khi đọc.

2.1 — “chúng tôi cần một tài khoản dùng thử”

Họ nói gì: Tính hoàn chỉnh của ứng dụng. Người duyệt không qua nổi màn hình đăng nhập.

Thứ chữa được: Một tài khoản dùng thử vĩnh viễn khai trong App Store Connect ở mục App Review Information, với thông tin đăng nhập không bao giờ hết hạn và một tài khoản chứa dữ liệu thực tế.

Một tài khoản dùng thử rỗng thì gần như tệ ngang không có — người duyệt thấy một trạng thái trống và không đánh giá được ứng dụng. Tài khoản của tôi giờ có dữ liệu đầy đủ và một tác vụ định kỳ đặt lại nó mỗi tuần.

Nếu ứng dụng cần số điện thoại hay một mã để đăng nhập, hãy ghi cách vòng qua vào phần ghi chú cho người duyệt. “Dùng OTP 000000 cho số điện thoại dùng thử” là một câu đã cứu tôi khỏi hai lần bị từ chối.

4.2 — “chức năng tối thiểu”

Họ nói gì: ứng dụng quá đơn giản để là một ứng dụng.

Nó nghĩa là gì: nó là một lớp bọc quanh một website với rất ít hành vi thuộc về nền tảng.

Thứ chữa được: các tính năng nền tảng thật sự — hỗ trợ ngoại tuyến, tích hợp share sheet, một widget, và những thông báo có ý nghĩa. Không phải thêm màn hình; mà là thêm lý do để nó là một ứng dụng.

Đây là lần từ chối khó cãi nhất, vì “chức năng tối thiểu” là một phán đoán. Cãi thì không ăn thua. Thêm ba tính năng chỉ có ý nghĩa trên một chiếc điện thoại thì có.

5.1.1 — “chuỗi mô tả mục đích không cụ thể”

Họ nói gì: Thu thập và lưu trữ dữ liệu.

Nó nghĩa là gì: hộp thoại xin quyền không nói rõ dữ liệu sẽ được dùng để làm gì.

❌ NSCameraUsageDescription = "Chúng tôi cần quyền truy cập camera"
✅ NSCameraUsageDescription = "Chụp ảnh hóa đơn để đính kèm vào một khoản chi"

Quy tắc: hãy nói người dùng được gì, đừng nói ứng dụng muốn gì. Đây là bản sửa năm phút và nó là lần từ chối tôi thấy người khác gặp nhiều nhất.

Cảnh báo

Một quyền bạn xin nhưng không bao giờ dùng cũng là một lý do bị từ chối. Gỡ một thư viện từng xin quyền vị trí mà không gỡ khóa tương ứng trong Info.plist là đủ — người duyệt thấy một quyền được khai báo mà không có tính năng nào đi kèm rồi từ chối vì đúng điều đó.

3.1.1 — “bắt buộc dùng mua hàng trong ứng dụng”

Họ nói gì: ứng dụng liên kết tới một trang thanh toán bên ngoài cho một gói đăng ký dạng số.

Nó nghĩa là gì: hàng hóa số được tiêu thụ trong ứng dụng thì phải dùng mua hàng trong ứng dụng. Không có chuyện thương lượng ở điều này.

Thứ chữa được: cài đặt StoreKit cho tử tế, kèm chức năng khôi phục giao dịch, và gỡ hẳn liên kết bên ngoài. Lưu ý rằng “gỡ liên kết” nghĩa là gỡ ở mọi nơi, kể cả một trang trợ giúp nằm sâu ba màn hình — người duyệt đã tìm ra cái của tôi.

5.1.1(v) — “xóa tài khoản”

Họ nói gì: một ứng dụng cho phép người dùng tạo tài khoản thì phải cho họ xóa nó ngay trong ứng dụng.

Nó nghĩa là gì: một địa chỉ email hỗ trợ là chưa đủ. Phải là một luồng ngay trong ứng dụng.

Thứ chữa được: một mục Xóa tài khoản trong phần cài đặt, một bước xác nhận, và một lời gọi API thật sự xóa dữ liệu. Mười lăm phút làm việc, và giờ nó là yêu cầu bắt buộc với mọi ứng dụng có đăng ký.

2.3.3 — “ảnh chụp màn hình không cho thấy ứng dụng”

Họ nói gì: Siêu dữ liệu chính xác.

Nó nghĩa là gì: ảnh chụp màn hình của tôi là ảnh quảng cáo với chữ đè lên một khung điện thoại, và người duyệt không khớp được chúng với giao diện thật.

Thứ chữa được: ảnh chụp màn hình thật của ứng dụng thật. Một dòng chú thích phía trên khung máy thì được; màn hình bên trong phải đúng là ứng dụng trông như thế.

Tôi làm gì trước khi nộp bây giờ

Một danh sách kiểm tra, và nó đã trụ được hai năm:

  • Tài khoản dùng thử trong ghi chú cho người duyệt, có dữ liệu đầy đủ, thông tin đăng nhập không hết hạn
  • Mọi chuỗi mô tả mục đích đều gọi tên lợi ích cho người dùng
  • Không có quyền nào không dùng đến trong Info.plist
  • Xóa tài khoản ngay trong ứng dụng nếu có đăng ký
  • Khôi phục giao dịch nếu có mua hàng trong ứng dụng
  • Ảnh chụp màn hình là của ứng dụng thật
  • Mọi liên kết đều chạy, kể cả URL hỗ trợ và URL chính sách bảo mật
  • Nó chạy được trên hệ điều hành cũ nhất được hỗ trợ, không chỉ trên bản mới nhất

Về việc trả lời

Hai lần tôi đã trả lời thay vì nộp lại bản build, và cả hai lần đều hiệu quả.

Resolution Center là một cuộc trò chuyện với một con người. Một tin nhắn lịch sự và cụ thể — “tính năng này nằm sau X, đây là cách tới đó” — đã giải quyết hai lần từ chối của tôi mà không cần bản build mới. Một người duyệt không tìm thấy một tính năng thì không giống một người duyệt đã tìm thấy một vấn đề, và đáng kiểm tra xem bạn đang gặp trường hợp nào trước khi đi sửa ứng dụng.

Một điều nữa đáng nói: bị từ chối là chuyện thường ngày. Sáu lần qua vài ứng dụng và vài năm là bình thường, và không lần nào tốn quá một ngày. Cái giá là thời gian chờ duyệt, và đó là lập luận cho việc có một danh sách kiểm tra thay vì coi mỗi lần như một cuộc khủng hoảng.