# RevenueCat: cài đặt gói đăng ký in-app trên iOS

> RevenueCat kết nối sản phẩm App Store Connect với ứng dụng của bạn và quản lý quyền truy cập. Các bước để tích hợp gói đăng ký in-app iOS đầu tiên.

Trang gốc: [RevenueCat: cài đặt gói đăng ký in-app trên iOS](https://devoria.fr/vi/blog/revenuecat-goi-dang-ky-in-app-ios)
Tác giả: [Mehdi Azizi](https://devoria.fr/vi/mehdi-azizi)
Ngày đăng: 2026-10-01
Lần sửa nội dung gần nhất: 2026-10-09


## Vì sao nên dùng RevenueCat thay vì chỉ dùng StoreKit

StoreKit, framework của Apple, cho phép bạn bán gói đăng ký mà không cần dịch vụ bên thứ ba nào. Nhưng với người mới, tự viết toàn bộ logic mua hàng, khôi phục và kiểm tra quyền truy cập là cả một khối code phải bảo trì, kèm nhiều trường hợp biên rất dễ quên: đổi thiết bị, hết hạn, hoàn tiền.

[RevenueCat](https://www.revenuecat.com/docs/welcome/overview) đứng giữa App Store Connect và app của bạn: nó đọc các sản phẩm, quản lý các gói đăng ký đang hoạt động và giúp bạn khỏi phải tự viết lớp này. Bạn vẫn kiểm soát giá và các ưu đãi từ một bảng điều khiển, không cần phát hành lại app mỗi lần thay đổi.

## Bước 1: tạo sản phẩm trong App Store Connect

Trước khi đến RevenueCat, sản phẩm phải tồn tại phía Apple. Trong App Store Connect, hãy tạo một nhóm gói đăng ký, rồi một hoặc nhiều cấp với thời hạn riêng, ví dụ theo tháng hoặc theo năm, và giá theo từng khu vực. Bạn cũng cần điền các nội dung hiển thị cho người dùng ở mỗi cấp: Apple yêu cầu chúng trước khi chấp nhận sản phẩm khi duyệt.

Một lỗi hay quên ở bước này: sản phẩm đã tạo nhưng chưa bao giờ được gửi kèm lần duyệt đầu tiên của app cùng phiên bản tương ứng. Một sản phẩm đang chờ mà chưa từng nằm trong lần gửi app nào sẽ vô hình với người dùng, dù RevenueCat đã thấy nó.

## Bước 2: kết nối RevenueCat với ứng dụng của bạn

Trong RevenueCat, bạn tạo một project, liên kết khóa API App Store Connect để RevenueCat tự động đồng bộ sản phẩm, rồi định nghĩa các "entitlement", tức quyền truy cập. Một entitlement đại diện cho thứ mà gói đăng ký mở khóa, ví dụ quyền truy cập đầy đủ vào app, bất kể sản phẩm cụ thể nào đã kích hoạt nó.

Lớp trung gian này rất hữu ích: nếu sau này bạn thay đổi cấu trúc ưu đãi, ví dụ thêm một cấp theo năm, bạn chỉ cần gắn sản phẩm mới vào cùng entitlement đó, không phải đụng vào code kiểm tra quyền truy cập trong app.

Phía app, [SDK RevenueCat cho React Native](https://www.revenuecat.com/docs/getting-started/installation/reactnative) được cài vào project Expo bằng một plugin riêng, và cung cấp một hàm đơn giản để biết người dùng hiện tại có entitlement đang hoạt động hay không.

## Bước 3: xây dựng paywall

Paywall là màn hình giới thiệu ưu đãi và kích hoạt việc mua. RevenueCat cung cấp các paywall cấu hình được từ bảng điều khiển, sửa được mà không cần phát hành lại app, hoặc bạn có thể tự xây paywall riêng bằng SDK nếu muốn toàn quyền kiểm soát thiết kế.

Vị trí đặt paywall quan trọng không kém thiết kế. Paywall hiện ra trước khi người dùng thấy giá trị của app thường chuyển đổi kém hơn paywall đặt ngay sau một thao tác thành công đầu tiên. Bài [lỗi paywall iOS thường gặp của người mới](https://devoria.fr/vi/blog/paywall-ios-7-loi-nguoi-moi) trình bày chi tiết những cái bẫy phổ biến nhất ở bước này, không chỉ riêng phần tích hợp kỹ thuật.

## Bước 4: thử nghiệm mua, khôi phục và hết hạn

Đây là bước hay bị làm qua loa nhất, nhưng lại là bước Apple kiểm tra kỹ nhất. Ba kịch bản phải chạy được trước khi gửi:

**Mua.** Với tài khoản tester sandbox, việc mua phải mở khóa entitlement ngay lập tức, và app phải phản ứng với thay đổi này mà không cần khởi động lại.

**Khôi phục.** Trên thiết bị mới hoặc sau khi cài lại, với cùng tài khoản Apple, nút "Khôi phục giao dịch mua" phải tìm lại được gói đăng ký đang hoạt động. Apple luôn kiểm tra luồng này khi duyệt, và việc thiếu nút hoặc nút hoạt động sai là lý do bị từ chối thường gặp theo [guideline 3.1.1](https://devoria.fr/vi/blog/guideline-3-1-1-mua-hang-trong-ung-dung-app-store).

**Hết hạn.** Trong môi trường sandbox, gói đăng ký hết hạn sau vài phút thay vì vài tháng, giúp bạn kiểm tra quyền truy cập có đóng lại đúng khi hết kỳ hay không, mà không phải chờ một chu kỳ thanh toán thật.

## Những gì RevenueCat không thay thế được

RevenueCat lo cơ chế mua hàng, chứ không lo việc trang app hay paywall của bạn có tuân thủ [guideline 3.1.2](https://devoria.fr/vi/blog/guideline-3-1-2-app-bi-tu-choi-goi-dang-ky) hay không. Bạn vẫn phải mô tả đúng gói đăng ký trong phần mô tả App Store, ghi rõ giá chính xác và thời hạn, và điền điều khoản sử dụng. Bài [gói đăng ký hay mua một lần trên iOS](https://devoria.fr/vi/blog/goi-dang-ky-hay-mua-mot-lan-ung-dung-ios) giúp bạn chọn đúng mô hình trước cả khi đến bước kỹ thuật này.

Ngoài ra, RevenueCat thu phí hoa hồng trên doanh thu vượt một ngưỡng hằng tháng nhất định, cộng thêm vào hoa hồng của Apple trên các gói đăng ký bán trong app. Hãy kiểm tra các mức hiện tại trên chính trang của họ trước khi xây mô hình kinh doanh xoay quanh hai khoản hoa hồng này.

## Những lỗi thường gặp nhất của người mới

**Quên trạng thái đang tải.** Khi khởi động, RevenueCat cần một chút thời gian để lấy quyền truy cập của người dùng. Nếu app mặc định hiển thị nội dung trả phí trước khi có phản hồi, người dùng chưa đăng ký có thể thoáng thấy nội dung họ chưa trả tiền. Hãy làm một trạng thái đang tải rõ ràng thay vì hiển thị mặc định theo kiểu lạc quan.

**Kiểm tra quyền sai chỗ.** Entitlement đang hoạt động phải được kiểm tra lại mỗi khi mở một màn hình trả phí, không chỉ một lần lúc khởi động. Nếu người dùng hủy hoặc gói đăng ký hết hạn trong lúc đang dùng app, màn hình tiếp theo phải phản ánh thay đổi đó.

**Nhầm lẫn môi trường sandbox và production.** Mã sản phẩm và tài khoản tester sandbox tách biệt với production. Một bài test chạy được trong sandbox với sai tài khoản Apple, hoặc một sản phẩm chỉ được tạo ở production, có thể khiến bạn lầm tưởng mọi thứ đã sẵn sàng.

## Một ứng dụng đã được kiểm tra, không chỉ là ứng dụng biên dịch được

Một gói đăng ký "chạy được" khi thử nhanh trên tài khoản của chính bạn không đảm bảo nó vẫn ổn khi khôi phục trên thiết bị khác hay khi hết hạn thật. Đó chính xác là điều reviewer của Apple kiểm tra. Trang [gói đăng ký in-app iOS](https://devoria.fr/vi/expertise/goi-dang-ky-trong-ung-dung-ios) trình bày chi tiết toàn bộ chuỗi này, từ lúc tạo sản phẩm đến bước kiểm tra cuối cùng.

Nếu bạn muốn bắt đầu từ một nền tảng có sẵn paywall và gói đăng ký trong code, đó là những gì có trong code khởi đầu của [iOS Kit](https://devoria.fr/vi/kits/ios). Để kiểm tra gói đăng ký của bạn như reviewer sẽ làm, [Apple Review Kit](https://devoria.fr/vi/kits/review-apple) tập hợp checklist trước khi gửi của tôi và các ghi chú để lại cho tester về phần mua hàng trong app.

## Câu hỏi thường gặp

### Làm thế nào để cài đặt gói đăng ký RevenueCat trên iOS?

Gồm bốn bước. Đầu tiên, tạo sản phẩm trong App Store Connect. Sau đó kết nối RevenueCat bằng khóa API App Store Connect và định nghĩa các entitlement (quyền truy cập), rồi xây dựng paywall. Cuối cùng, thử nghiệm mua, khôi phục và hết hạn: đây là bước hay bị làm qua loa, nhưng lại được Apple kiểm tra.

### RevenueCat có bắt buộc để bán gói đăng ký trên iOS không?

Không. StoreKit, framework của Apple, cho phép bán gói đăng ký mà không cần dịch vụ bên thứ ba. Nhưng khi đó bạn phải tự viết toàn bộ logic mua hàng, khôi phục và kiểm tra quyền truy cập, kèm các trường hợp biên dễ quên: đổi thiết bị, hết hạn, hoàn tiền. RevenueCat đứng giữa App Store Connect và app để bạn khỏi phải viết lớp này.

### Entitlement trong RevenueCat là gì?

Entitlement là một quyền truy cập: nó đại diện cho thứ mà gói đăng ký mở khóa, ví dụ quyền truy cập đầy đủ vào app, bất kể sản phẩm cụ thể nào đã kích hoạt nó. Nếu sau này bạn thêm một cấp theo năm, bạn chỉ cần gắn sản phẩm mới vào cùng entitlement. Code kiểm tra quyền truy cập trong app không cần thay đổi.

### Làm thế nào để thử nghiệm gói đăng ký RevenueCat trước khi gửi cho Apple?

Ba kịch bản phải chạy được trước khi gửi. Mua: với tài khoản tester sandbox, quyền truy cập được mở khóa ngay, không cần khởi động lại app. Khôi phục: trên thiết bị mới hoặc sau khi cài lại, với cùng tài khoản Apple, nút khôi phục tìm lại được gói đăng ký đang hoạt động. Hết hạn: trong sandbox, gói đăng ký hết hạn sau vài phút, giúp bạn kiểm tra quyền truy cập có đóng lại không.

### Vì sao sản phẩm hiện trong RevenueCat nhưng người dùng lại không thấy?

Thường là vì sản phẩm chưa bao giờ được đưa vào một lần gửi app. Sản phẩm được tạo trong App Store Connect nhưng chưa từng gửi kèm lần duyệt đầu tiên cùng phiên bản tương ứng sẽ vô hình với người dùng, dù RevenueCat đã thấy nó. Đây là lỗi hay quên ở bước tạo sản phẩm.

### RevenueCat có thu hoa hồng trên gói đăng ký không?

RevenueCat thu hoa hồng trên doanh thu vượt một ngưỡng hằng tháng nhất định. Khoản này cộng thêm vào hoa hồng của Apple trên các gói đăng ký bán trong app. Hãy kiểm tra các mức hiện tại trên trang của RevenueCat trước khi xây mô hình kinh doanh xoay quanh hai khoản hoa hồng này.


## Dự án của bạn

[iOS Kit](https://devoria.fr/vi/kits/ios): Tạo app iPhone với Claude Code: code khởi đầu từ các app của mình, các skill kiểm tra công việc của nó, và các kit Apple Review, Screenshots, ASO. 129,99 €.
