Guideline 3.1.1: khi nào bắt buộc dùng mua hàng trong ứng dụng
Bởi Mehdi Azizi
Đăng ngày , 9 phút
Guideline 3.1.1: mọi nội dung hay tính năng số mở khóa trong app đều phải qua mua hàng trong ứng dụng của Apple. Ngoại lệ, quy định EU, Mỹ và cách sửa.
Guideline 3.1.1 bắt buộc dùng mua hàng trong ứng dụng (in-app purchase) của Apple ngay khi app của bạn mở khóa nội dung hoặc tính năng số: gói đăng ký, bản đầy đủ, tiền tệ trong game, nội dung premium. Bị từ chối theo 3.1.1 nghĩa là Apple đã tìm thấy một lối vào khác dẫn tới nội dung đó: thanh toán trên website của bạn, khóa bản quyền, mã tự tạo, nút dẫn tới trang thanh toán. Cách sửa là dùng mua hàng trong ứng dụng, trừ khi trường hợp của bạn thuộc một ngoại lệ hoặc một quy định theo khu vực.
Mình tự phát hành các app iOS của mình, và những app có gói đăng ký đều bán qua mua hàng trong ứng dụng của Apple. Mình chưa bao giờ bị từ chối theo 3.1.1, và mình sẽ không kể cho bạn điều ngược lại. Hướng dẫn này dựa trên văn bản chính thức, phiên bản ngày 8 tháng 6 năm 2026, đọc vào ngày 15 tháng 10 năm 2026, cùng các điều kiện theo khu vực do Apple công bố. Trường hợp gần giống là gói đăng ký, với hai lần bị từ chối thật, nằm trong bài hướng dẫn về guideline 3.1.2.
Guideline 3.1.1 nói gì?
3.1.1, “In-App Purchase”, mở đầu phần 3.1 “Payments” của App Review Guidelines. Vì thế tiêu đề email mới là: “Guideline 3.1.1 - Business - Payments - In-App Purchase”. Câu đầu tiên nói điều cốt lõi: để mở khóa tính năng trong app, “you must use in-app purchase”, bạn phải dùng mua hàng trong ứng dụng. Apple liệt kê gói đăng ký, tiền tệ trong game, màn chơi, nội dung premium và bản đầy đủ.
Câu tiếp theo nhắm vào các cách lách. Một app không được dùng cơ chế riêng của mình để mở khóa nội dung: Apple gọi tên khóa bản quyền, marker thực tế tăng cường, mã QR, tiền mã hóa và ví tiền mã hóa.
Cũng quy định này còn thêm những nghĩa vụ hay bị quên:
- tín dụng và tiền tệ mua qua mua hàng trong ứng dụng không được hết hạn, và mọi giao dịch có thể khôi phục phải có cơ chế khôi phục;
- rương hay lượt quay trả phí (“loot box”) phải hiển thị tỉ lệ nhận được từng loại vật phẩm trước khi mua;
- thẻ quà tặng, phiếu hay coupon số bán trong app phải qua mua hàng trong ứng dụng; thẻ vật lý gửi qua bưu điện có thể dùng phương thức khác;
- app không có gói đăng ký có thể cho dùng thử giới hạn thời gian, dưới dạng một mục mua hàng trong ứng dụng miễn phí tên là “XX-day Trial”, nêu rõ trước khi bắt đầu thời hạn, những gì sẽ mất và số tiền phải trả;
- tiền tip cho nhà phát triển được phép, qua mua hàng trong ứng dụng.
Những tình huống dẫn tới bị từ chối 3.1.1
| App làm gì | Vì sao Apple từ chối | Cách sửa |
|---|---|---|
| Mở khóa nội dung mua trên website của bạn | Không có mua hàng trong ứng dụng tương đương | Bán thêm nội dung đó qua mua hàng trong ứng dụng |
| Hiển thị “Thanh toán trên website của chúng tôi” | Dẫn tới phương thức thanh toán khác | Gỡ nút, trừ khi có ngoại lệ |
| Yêu cầu khóa bản quyền hoặc mã tự tạo | Cơ chế mở khóa bị cấm | Mã ưu đãi (offer code) của Apple |
| Mở khóa bằng tiền mã hóa | Cơ chế mở khóa bị cấm | Mua hàng trong ứng dụng |
| Bán tín dụng có hạn sử dụng | Nghĩa vụ của 3.1.1 | Tín dụng vĩnh viễn và khôi phục |
| Bán rương không ghi tỉ lệ | Không hiển thị tỉ lệ | Hiển thị tỉ lệ trước khi mua |
Dòng đầu tiên là dòng bị hiểu sai nhiều nhất. Trong một lần bị từ chối được đăng trên diễn đàn của Apple, thông báo nói app “accesses digital content purchased outside the app”, truy cập nội dung mua ở nơi khác, “but that content isn't available to purchase using in-app purchase”. Apple không trách bạn có website bán hàng: Apple trách app không cho mua cùng thứ đó qua Apple.
Để tặng quyền truy cập miễn phí hoặc giảm giá, Apple có hệ thống riêng: mã ưu đãi. Theo tài liệu StoreKit, chúng dùng được cho mọi loại mua hàng trong ứng dụng: gói đăng ký, consumable và non-consumable. Bạn tạo chúng trong App Store Connect, và người dùng nhập chúng trong App Store hoặc trong app của bạn.
Các ngoại lệ: khi không bắt buộc mua hàng trong ứng dụng
Quy định 3.1.3 liệt kê các app được dùng phương thức thanh toán khác. Đây là bảng mình dùng để biết một dự án thuộc nhóm nào.
| Trường hợp của bạn | Bắt buộc mua hàng trong ứng dụng? | Quy định |
|---|---|---|
| Gói đăng ký, bản đầy đủ, nội dung số | Có | 3.1.1 |
| Sản phẩm vật lý, dịch vụ dùng bên ngoài app | Không, bắt buộc dùng phương thức khác | 3.1.3(e) |
| Lớp học hoặc tư vấn trực tiếp, một kèm một | Không | 3.1.3(d) |
| Lớp học trực tiếp nhiều người | Có | 3.1.3(d) |
| Báo chí, sách, nhạc, video mua ở nơi khác | Không, để truy cập | 3.1.3(a) |
| Dịch vụ đa nền tảng mua trên website của bạn | Được truy cập nếu cũng bán qua mua hàng trong ứng dụng | 3.1.3(b) |
| Công cụ bán cho doanh nghiệp dùng cho nhân viên | Không | 3.1.3(c) |
| App miễn phí đi kèm một công cụ web, không có mua bán | Không | 3.1.3(f) |
Hai giới hạn. App hưởng ngoại lệ không được, ngay trong app, hướng người dùng sang phương thức thanh toán khác, ngoại trừ storefront Mỹ và các trường hợp Apple cho phép. Ngược lại, Apple nói rõ “Developers can send communications outside of the app”: bạn có thể liên hệ người dùng bên ngoài app, ví dụ qua email.
Quy định theo khu vực vào tháng 10 năm 2026
Ở phần này, văn bản thay đổi rất nhanh. Nội dung dưới đây dựa trên văn bản của Apple đọc ngày 15 tháng 10 năm 2026: hãy đọc lại trước khi code thanh toán bên ngoài.
| Khu vực | Được phép thêm ngoài mua hàng trong ứng dụng |
|---|---|
| Mỹ | Nút và liên kết tới thanh toán khác, không cần entitlement |
| Liên minh châu Âu | Thanh toán thay thế trong app và ưu đãi ngoài app, có điều kiện |
| Nhật Bản, Brazil, Hàn Quốc | Chương trình riêng, phải xin entitlement |
| Các nước khác | Không nút, liên kết hay lời kêu gọi nào tới thanh toán khác |
Mỹ
Quy định 3.1.1(a) nói rõ entitlement “are not required for developers to include buttons, external links, or other calls to action in their United States storefront apps”. Vậy trên storefront Mỹ, một nút dẫn tới website của bạn là được phép. Binary của bạn giống nhau ở mọi nơi: nếu thêm nút này, app phải biết người dùng đang ở storefront nào. StoreKit cung cấp thông tin đó qua Storefront.
Liên minh châu Âu
Điều kiện mới áp dụng từ ngày 1 tháng 10 năm 2026, theo trang của Apple về các lựa chọn thanh toán tại EU. Bạn có thể giữ riêng mua hàng trong ứng dụng, không cần thay đổi gì. Bạn cũng có thể đưa một nhà cung cấp thanh toán vào app, hoặc ưu đãi ngoài app, ví dụ dẫn tới website của bạn. Khi đó Apple yêu cầu, trong số các điều kiện:
- entitlement “StoreKit External Purchases or Offers” và, với liên kết hay thanh toán trong app, cửa sổ thông báo của hệ thống;
- mua hàng trong ứng dụng ít nhất phải nổi bật bằng lựa chọn kia, khi cả hai cùng hiển thị trên màn hình;
- không nhắc tới các phương thức thanh toán này trên trang App Store của bạn;
- kiểm soát của phụ huynh cho người chưa thành niên, và không có ưu đãi ngoài app cho người dưới 13 tuổi, hoặc cao hơn tùy quốc gia;
- cùng một lựa chọn trên mọi storefront EU trong 12 tháng.
Phí hoa hồng áp dụng tùy lựa chọn. Hãy đọc mục về phí trên cùng trang đó trước khi quyết định.
Các nước khác
Ở nơi khác, quy định vẫn nghiêm ngặt: “apps and their metadata may not include buttons, external links, or other calls to action” tới phương thức thanh toán khác. Chữ “metadata” rất quan trọng: một mô tả ghi “rẻ hơn trên website của chúng tôi” cũng vi phạm quy định. Một số nước, gồm Nhật Bản, Brazil và Hàn Quốc, có chương trình riêng, được liệt kê trong tài liệu External Purchase.
Sửa lỗi bị từ chối 3.1.1 và trả lời Apple
- Tìm ra lối vào. Thông báo nêu nội dung hoặc màn hình có vấn đề: nội dung mua ở nơi khác, nút, mã, liên kết.
- Đóng nó lại hoặc thêm đường song song. Hoặc bạn gỡ nút hay mã, hoặc bạn bán cùng nội dung đó qua mua hàng trong ứng dụng.
- Chỉ viện dẫn ngoại lệ khi nó có thật. Trích đúng điểm của 3.1.3 và giải thích trong hai câu vì sao trường hợp của bạn thuộc điểm đó.
- Cho người duyệt thứ để kiểm tra. Một tài khoản demo và đường đi tới paywall, trong ghi chú duyệt, như mình giải thích trong bài về guideline 2.1.
Bạn trả lời trong mục App Review của App Store Connect, theo hướng dẫn trả lời App Review. Đây là mẫu cho trường hợp phổ biến nhất, nội dung mua trên website. Đây chỉ là ví dụ: hãy thay build, sản phẩm và các bước bằng của bạn.
Hello,
Thank you for your review.
Issue: the app gave access to premium content purchased on our
website, without offering the same purchase in the app.
Fix in build X:
- Premium access is now available as an auto-renewable
subscription through in-app purchase, on the paywall.
- The "Subscribe on our website" button has been removed.
- A "Restore Purchases" button is available on the paywall.
How to verify: launch the app and open any premium screen.
The paywall shows the in-app purchase options.
Best regards,
Nút và paywall nằm trong code: bạn cần một build mới. Nếu vẫn tin chắc trường hợp của mình là ngoại lệ, Apple cũng cho phép kháng nghị lên App Review Board.
Tích hợp mua hàng trong ứng dụng mà không phải viết lại mọi thứ
Với người mới, cách đơn giản nhất là tạo sản phẩm trong App Store Connect, rồi kết nối chúng với app bằng RevenueCat: công thức nằm trong bài RevenueCat: thiết lập gói đăng ký in-app. Nếu bạn còn phân vân giữa hai mô hình, hãy đọc gói đăng ký hay mua một lần. Nếu bạn làm app bằng công cụ không cần code, hãy kiểm tra xem nó có hỗ trợ mua hàng trong ứng dụng không: đó là một điểm trong bài tạo ứng dụng không cần code.
Ngay khi mục mua hàng trong ứng dụng của bạn là gói đăng ký, 3.1.2 cũng áp dụng: số tiền bị tính phải nổi bật, thời hạn, gia hạn, liên kết. Những lỗi màn hình hay gặp nhất nằm trong paywall iOS: 7 lỗi của người mới.
Checklist 3.1.1 trước khi gửi duyệt
- Mọi thứ mở khóa được trong app (tính năng, nội dung, màn chơi, tiền tệ) đều mua được qua mua hàng trong ứng dụng.
- Không có nút, liên kết hay đoạn chữ nào dẫn tới thanh toán bên ngoài, trừ storefront Mỹ hoặc chương trình khu vực đã được cấp.
- Mô tả trên trang app của bạn không nhắc tới phương thức thanh toán nào khác.
- Nội dung bán trên website của bạn cũng được bán qua mua hàng trong ứng dụng trong app.
- Không có khóa bản quyền, mã QR, mã tự tạo hay tiền mã hóa nào mở khóa bất cứ thứ gì.
- Để tặng quyền truy cập, bạn dùng mã ưu đãi của Apple.
- Tín dụng đã mua không hết hạn, và nút “Restore Purchases” hoạt động.
- Mỗi rương hay lượt quay trả phí đều hiển thị tỉ lệ trước khi mua.
- Sản phẩm vật lý hay dịch vụ bên ngoài app được thanh toán qua Apple Pay hoặc thẻ, không qua mua hàng trong ứng dụng.
- Ghi chú duyệt của bạn nói rõ chỗ tìm các mục mua và, nếu viện dẫn ngoại lệ, đó là ngoại lệ nào.
Kiểm tra app của bạn trước khi gửi
Nếu app của bạn vừa bị từ chối theo 3.1.1, Apple Review Kit giúp bạn tìm lại quy định được trích, yêu cầu của nó, cùng một ví dụ sửa lỗi và trả lời. Phần ghi chú cho người kiểm tra có bao gồm mua hàng trong ứng dụng. Nếu muốn có người xem trực tiếp, đặt một giờ với mình: chúng ta đọc thông báo của Apple và tìm ra lối vào mà họ đã thấy. Quy trình đầy đủ có trên trang ứng dụng bị Apple từ chối, và cách thiết lập mua hàng trên trang gói đăng ký in-app iOS.
Nếu bạn đang chuẩn bị ra mắt lần đầu, làm bài chẩn đoán miễn phí: nó sắp xếp lại các bước theo đúng thứ tự và gửi bạn checklist chống bị Apple từ chối của mình. Để tạo một ứng dụng di động bán qua mua hàng trong ứng dụng ngay từ đầu, iOS Kit xuất phát từ một bộ code đã có sẵn paywall và gói đăng ký.
Không ai có thể đảm bảo Apple sẽ chấp nhận app của bạn. Điều mình có thể làm là giúp bạn chọn đúng phương thức thanh toán trước khi viết code.
Câu hỏi thường gặp
“Guideline 3.1.1 - Business - Payments - In-App Purchase” nghĩa là gì?
Đó là tên đầy đủ của quy định về mua hàng trong ứng dụng trong thông báo của Apple. Nó cho biết app của bạn cho truy cập nội dung hoặc tính năng số qua một con đường khác ngoài mua hàng trong ứng dụng: thanh toán trên website, mã, khóa bản quyền hoặc liên kết tới trang thanh toán.
Có được đặt liên kết tới website của mình để thanh toán rẻ hơn không?
Trên storefront Mỹ thì được: quy định cho phép nút và liên kết mà không cần entitlement. Ở Liên minh châu Âu, có thể làm được với entitlement của Apple và các điều kiện đi kèm. Ở nơi khác, trừ khi có chương trình khu vực, cả app lẫn trang app đều không được dẫn tới phương thức thanh toán khác.
Có được mở khóa app bằng mã khuyến mãi không?
Không được dùng mã tự tạo: 3.1.1 cấm các cơ chế mở khóa riêng của app, như khóa bản quyền. Hãy dùng mã ưu đãi của Apple, tạo trong App Store Connect. Chúng dùng được cho gói đăng ký và các loại mua hàng trong ứng dụng khác.
Có cần mua hàng trong ứng dụng để bán sản phẩm vật lý hay dịch vụ không?
Không. Sản phẩm vật lý hay dịch vụ dùng bên ngoài app, như bữa ăn giao tận nơi hay một chuyến xe, phải thanh toán bằng phương thức khác, Apple Pay hoặc thẻ ngân hàng. Lớp học trực tiếp một kèm một cũng không cần, nhưng lớp học trực tiếp nhiều người thì cần.
Khách hàng đăng ký trên website của tôi có đăng nhập vào app được không?
Được, với dịch vụ đa nền tảng, miễn là cùng quyền truy cập đó cũng được bán qua mua hàng trong ứng dụng trong app. Đó là quy định 3.1.3(b). Nếu không có gói đó trong app, bạn rơi đúng vào kiểu từ chối 3.1.1 điển hình: nội dung mua ở nơi khác và không thể mua qua Apple.
Dùng RevenueCat có đủ để tuân thủ 3.1.1 không?
RevenueCat dựa trên mua hàng trong ứng dụng của Apple, nên nó không gây ra vấn đề 3.1.1. Tuy vậy, nó không tự gỡ nút thanh toán bên ngoài hay mã tự tạo mà app của bạn có thể chứa. Bạn vẫn phải kiểm tra sự tuân thủ trên từng màn hình, và trên trang app của mình.