Introductory offer App Store Connect: dùng thử miễn phí iOS
Bởi Mehdi Azizi
Đăng ngày , 8 phút
Introductory offer là bản dùng thử miễn phí hoặc giá giảm đầu kỳ của gói đăng ký iOS, mỗi tài khoản Apple chỉ được một lần trong mỗi nhóm. Cách tạo và hiển thị.
Introductory offer, hay ưu đãi giới thiệu, là mức giá khởi đầu của một gói đăng ký tự động gia hạn: dùng thử miễn phí, trả trước hoặc trả dần theo từng kỳ. Mỗi khách hàng chỉ được hưởng một lần trong mỗi nhóm đăng ký, nên app của bạn phải kiểm tra điều kiện trước khi ghi "dùng thử miễn phí". Bạn tạo ưu đãi trong trang giá của gói đăng ký, và paywall phải hiển thị rõ thời hạn ưu đãi cùng mức giá sẽ bị tính sau đó.
Trên Solys và TradaZen, bản dùng thử miễn phí 7 ngày nằm ở gói năm. Gói tuần thì không có. Dưới đây là ba loại ưu đãi, ai được hưởng, cách tạo, rồi hai lỗi hiển thị mà mình từng mắc. Cụm "ưu đãi ra mắt" thường cũng chỉ cùng một thứ, kể cả trong bài của mình về lỗi paywall.
Introductory offer là gì?
Trang trợ giúp App Store Connect định nghĩa nó là một mức giá giảm hoặc một bản dùng thử miễn phí, có giới hạn thời gian, cho kỳ đầu tiên của gói đăng ký. Nó chỉ áp dụng cho gói đăng ký tự động gia hạn. Khi ưu đãi kết thúc, gói sẽ gia hạn với giá bình thường, trừ khi người dùng hủy trước.
Ưu đãi hiển thị trên trang App Store của bạn với những người đủ điều kiện. Khi mua, Apple tự động áp dụng nếu người đó đủ điều kiện. Việc của bạn là không hứa trên màn hình một ưu đãi mà Apple sẽ không cấp.
Ba loại ưu đãi giới thiệu
Tài liệu StoreKit mô tả ba phương thức thanh toán. Đây là từng loại với ví dụ giả định: gói năm 39,99 € và gói tháng 6,99 €, không phải giá của app nào của mình.
| Loại | Ví dụ giả định | Trả lúc đầu | Sau đó |
|---|---|---|---|
| Dùng thử miễn phí | Tặng 7 ngày | 0 € | 39,99 €/năm |
| Trả trước | 3 tháng giá 9,99 € | 9,99 € một lần | 39,99 €/năm |
| Trả dần | 2,99 €/tháng, 3 tháng | 2,99 € mỗi tháng | 6,99 €/tháng |
Và đây là điều màn hình cần ghi cho từng loại, vẫn với các mức giá giả định này:
- Dùng thử miễn phí: "Miễn phí 7 ngày, sau đó 39,99 € mỗi năm." Trong thời gian dùng thử, gói đăng ký đã bắt đầu, nhưng chưa bị trừ tiền cho đến khi hết hạn.
- Trả trước: "9,99 € cho 3 tháng đầu, sau đó 39,99 € mỗi năm." Người dùng trả một lần cho toàn bộ giai đoạn giảm giá.
- Trả dần: "2,99 € mỗi tháng trong 3 tháng, sau đó 6,99 € mỗi tháng." Giá giảm được tính lại ở mỗi kỳ.
Trong cả ba trường hợp, câu chữ đều có mức giá sẽ bị tính sau ưu đãi.
Ai được hưởng ưu đãi giới thiệu?
Trang trợ giúp của Apple nói rõ: mỗi gói đăng ký có thể có một ưu đãi, nhưng mỗi người chỉ được một ưu đãi giới thiệu trong mỗi nhóm đăng ký. Tài liệu StoreKit nêu cụ thể ba trường hợp:
- người đăng ký mới luôn đủ điều kiện;
- người đăng ký cũ quay lại sẽ đủ điều kiện nếu chưa từng dùng ưu đãi giới thiệu nào trong nhóm này;
- người đang đăng ký không đủ điều kiện, kể cả khi đổi sang gói khác trong cùng nhóm.
Quyền này gắn với tài khoản Apple trả tiền, không phải iPhone hay tài khoản tạo trong app của bạn. Ai đã dùng thử, hủy rồi cài lại app thì không còn quyền nữa. Thế nhưng sản phẩm vẫn tiếp tục quảng bá ưu đãi của nó: đó là nơi sinh ra hiển thị gây hiểu lầm.
Hệ quả trực tiếp: một bản dùng thử ở gói tuần sẽ tiêu mất quyền dùng thử ở gói năm, vì cả hai nằm trong cùng một nhóm. Đó là lý do bản dùng thử của mình chỉ nằm ở gói năm.
Một giới hạn khác: mỗi quốc gia bạn có thể có một ưu đãi giới thiệu đang chạy và một ưu đãi sắp tới. Nếu hai ưu đãi chồng lên nhau, ưu đãi tạo sau sẽ thay thế cái kia. Tháng 7 năm 2026, trên TradaZen, mình muốn có cả giá giảm lẫn dùng thử miễn phí cho gói năm. Chỉ được một ưu đãi mỗi lúc: chọn cái này hoặc cái kia. Cuối cùng mình tạo thêm một gói năm thứ hai, rẻ hơn, để mang bản dùng thử.
Tạo ưu đãi trong App Store Connect
Bạn cần vai trò Account Holder, Admin, App Manager hoặc Marketing. Tên các mục lấy theo trang trợ giúp của Apple:
- Trong Apps, mở app của bạn, rồi chọn Subscriptions ở thanh bên.
- Chọn nhóm, rồi chọn gói đăng ký.
- Trong phần Subscription Prices, bấm View all Subscription Pricing, rồi Set up Introductory Offer.
- Chọn quốc gia hoặc khu vực, rồi ngày bắt đầu và kết thúc. Nếu bắt đầu hôm nay, ưu đãi chạy ngay.
- Chọn Free, Pay up front hoặc Pay as you go, rồi thời hạn và giá.
- App Store Connect đề xuất giá tương đương cho 175 quốc gia. Chỉnh lại nếu cần, rồi xác nhận.
Ưu đãi đã tạo thì không sửa được nữa: muốn đổi thời hạn hay giá, hãy xóa nó trong tab Introductory Offers rồi tạo lại. Một thay đổi có thể mất tới một giờ mới tới sandbox. Tài liệu của RevenueCat cũng khuyên chờ tới 24 giờ trước khi kết luận rằng ưu đãi không được áp dụng.
Các thời hạn có thể chọn
Dùng thử miễn phí kéo dài 3 ngày, 1 hoặc 2 tuần, 1, 2, 3 hoặc 6 tháng, hoặc 1 năm, bất kể thời hạn gói đăng ký. Trả trước bao gồm 1, 2, 3 hoặc 6 tháng, hoặc 1 năm. Trả dần thì phụ thuộc vào thời hạn gói đăng ký:
| Gói đăng ký | Trả dần |
|---|---|
| 1 tuần | 1 đến 12 tuần |
| 1 tháng | 1 đến 12 tháng |
| 2 tháng | 2 đến 12 tháng, bước 2 |
| 3 tháng | 3, 6, 9 hoặc 12 tháng |
| 6 tháng | 6 hoặc 12 tháng |
| 1 năm | 1 năm |
Trên các app của mình, mình chọn 7 ngày, ở gói năm. Đây không phải quy định của Apple, mà là lựa chọn sản phẩm, bạn nên xem lại dựa trên số liệu của chính mình.
Chỉ hiển thị dùng thử cho người đủ điều kiện
Apple nói ngay trong trang trợ giúp đó: nếu bạn hiển thị ưu đãi trong app, hãy kiểm tra người đó thật sự được hưởng. Hãy hỏi code của bạn hai câu: sản phẩm có bản dùng thử miễn phí không, và người này còn quyền hưởng không?
Câu đầu tiên đọc từ sản phẩm. Lưu ý, ưu đãi giới thiệu không nhất thiết là miễn phí. Trên TradaZen, gói năm tiêu chuẩn có ưu đãi trả trước, tức năm đầu rẻ hơn, còn bản dùng thử nằm ở gói năm kia. Cả hai đều trả về dưới dạng "ưu đãi giới thiệu". Vì vậy code của mình đọc giá của ưu đãi: bằng 0 là dùng thử; lớn hơn 0 là ưu đãi trả phí.
Câu thứ hai hỏi store. Với Swift, StoreKit 2 cung cấp isEligibleForIntroOffer, từ iOS 15. Apple lưu ý giá trị này có thể là true ngay cả khi chưa cấu hình ưu đãi nào: vì thế mới cần câu hỏi đầu tiên. Với RevenueCat trong app Expo, đó là checkTrialOrIntroductoryPriceEligibility, trả về đủ điều kiện, không đủ điều kiện, không có ưu đãi, hoặc không xác định. Đây là nguyên tắc bằng TypeScript:
import Purchases, {
INTRO_ELIGIBILITY_STATUS as S,
type PurchasesStoreProduct,
} from "react-native-purchases";
type Essai = "oui" | "non" | "doute";
export async function essaiGratuit(p: PurchasesStoreProduct): Promise<Essai> {
if (!p.introPrice || p.introPrice.price > 0) return "non";
try {
const r = await Purchases.checkTrialOrIntroductoryPriceEligibility([
p.identifier,
]);
const statut = r[p.identifier]?.status;
if (statut === S.INTRO_ELIGIBILITY_STATUS_ELIGIBLE) return "oui";
if (statut === S.INTRO_ELIGIBILITY_STATUS_INELIGIBLE) return "non";
if (statut === S.INTRO_ELIGIBILITY_STATUS_NO_INTRO_OFFER_EXISTS)
return "non";
return "doute";
} catch {
return "doute";
}
}
Trường hợp "doute" (không chắc) mới là vấn đề thật. RevenueCat mô tả việc kiểm tra của họ là ước lượng tốt nhất có thể, và dù sao bảng thanh toán của Apple cũng hiển thị điều kiện thật trước khi xác nhận. Với trạng thái không xác định, RevenueCat khuyên hiển thị giá bình thường, để không đánh lừa ai.
Mình học được mặt còn lại của vấn đề trên TradaZen. Phiên bản đầu coi lỗi đọc dữ liệu như một lời từ chối: những người đủ điều kiện dùng thử lại không thấy nó. Giờ các app của mình chỉ gỡ bản dùng thử khi store từ chối rõ ràng, tức không đủ điều kiện hoặc không có ưu đãi. Khi không chắc, vẫn giữ hiển thị của sản phẩm. Đây là một sự đánh đổi, không phải khuyến nghị của RevenueCat: nếu bạn thích thận trọng, hãy làm theo họ. Dù chọn cách nào, đừng bao giờ nhầm "mình không biết" với "không".
Nếu bạn dùng paywall của RevenueCat, mỗi đoạn chữ có thể có một phiên bản dành cho người đủ điều kiện hưởng ưu đãi, theo trang về ưu đãi của họ. Phần thiết lập còn lại nằm trong bài của mình về RevenueCat cho gói đăng ký iOS.
Điều 3.1.2 yêu cầu gì trên màn hình
Guideline 3.1.2(a) cho phép dùng thử miễn phí trên gói đăng ký, với điều kiện cung cấp các thông tin mà App Store Connect quy định. Trang của Apple về gói đăng ký nói rõ: trong luồng mua bản dùng thử, hãy ghi rõ thời hạn và mức giá bị tính khi kết thúc. Số tiền bị tính cũng phải là thông tin giá nổi bật nhất trên màn hình.
Lần bị từ chối mà Solys nhận ngày 10 tháng 10 năm 2026 đã nói vậy: dùng thử miễn phí, giá ra mắt và các mức giá quy đổi phải luôn kém nổi bật hơn số tiền bị tính. Bạn có thể quảng bá bản dùng thử, nhưng mức giá bị tính sau đó phải là con số dễ đọc nhất trên màn hình. Hai lần bị từ chối và cách sửa nằm trong bài của mình về guideline 3.1.2.
Lỗi ngược lại cũng có: có bản dùng thử mà không nói ra. Có thời gian, nút trên paywall của mình chỉ ghi "Tiếp tục". Trên Solys, chữ "Tặng 7 ngày" thậm chí chỉ có trong nhãn VoiceOver, không hiện thành chữ trên màn hình.
Kiểm thử ưu đãi trong sandbox
Hãy mua gói đăng ký bằng một tài khoản sandbox: bản dùng thử phải hiện trên bảng thanh toán của Apple. Để chạy lại luồng của người đăng ký mới, chọn Clear Purchase History trong cài đặt tài khoản sandbox trên iPhone. Theo tài liệu sandbox của Apple, tài khoản khi đó sẽ đủ điều kiện hưởng ưu đãi giới thiệu trở lại.
Hãy thử cả một tài khoản đã dùng thử rồi: paywall của bạn không được quảng bá gì miễn phí nữa. Nếu sản phẩm hoàn toàn không tải được, hãy đọc bài của mình về trạng thái Missing Metadata.
Gắn bản dùng thử miễn phí mà không lỗi
iOS & Android Kit dựa trên code khởi đầu của các app của mình: onboarding, paywall và gói đăng ký đã được code sẵn, và bước thứ ba, "kết nối tiền", hướng dẫn bạn cấu hình sản phẩm và bản dùng thử. Toàn bộ chuỗi được mô tả ở trang gói đăng ký in-app iOS. Nếu bạn còn phân vân về mô hình, hãy bắt đầu với gói đăng ký hay mua một lần.
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ặng một tháng hoặc kéo lại người đăng ký cũ, phần tiếp theo nằm trong bài của mình về mã ưu đãi.
Câu hỏi thường gặp
Introductory offer trên App Store là gì?
Đó là mức giá khởi đầu của một gói đăng ký tự động gia hạn: dùng thử miễn phí, trả trước hoặc trả dần. Bạn tạo nó trong App Store Connect, và Apple tự động áp dụng khi mua cho những người đủ điều kiện. Sau đó, gói đăng ký chuyển sang giá bình thường.
Một người dùng có thể dùng thử miễn phí hai lần không?
Không trong cùng một nhóm đăng ký: mỗi tài khoản Apple chỉ được một ưu đãi giới thiệu trong mỗi nhóm. Cài lại app không trả lại quyền này. Tuy nhiên, nếu họ đăng ký ở một nhóm khác trong app của bạn, họ có thể hưởng ưu đãi của nhóm đó.
Có thể kết hợp dùng thử miễn phí với giảm giá không?
Không trên cùng một gói đăng ký vào cùng thời điểm: mỗi quốc gia chỉ có một ưu đãi giới thiệu đang chạy. Bạn có thể tạo gói đăng ký thứ hai mang ưu đãi kia, hoặc dùng mã ưu đãi, có thể nối tiếp sau ưu đãi giới thiệu tùy theo cài đặt của bạn.
Có cần phiên bản app mới để thêm bản dùng thử không?
Với bản thân ưu đãi thì không: nó được cấu hình trong App Store Connect và áp dụng khi mua. Nhưng nếu paywall của bạn ghi cứng "7 ngày" trong code, bạn sẽ phải cập nhật. Hãy đọc thời hạn từ sản phẩm mà store trả về, và màn hình sẽ tự khớp theo.
Người đăng ký cũ có được dùng thử miễn phí không?
Có, nếu họ chưa từng dùng ưu đãi giới thiệu nào trong nhóm đăng ký này. Nếu đã hưởng rồi thì họ không còn quyền nữa, kể cả nhiều tháng sau. Để kéo họ quay lại, Apple có ưu đãi win-back và ưu đãi khuyến mãi.

