Guideline 4.5.4: Apple từ chối app vì thông báo đẩy
Bởi Mehdi Azizi
Đăng ngày , 9 phút
Guideline 4.5.4: thông báo quảng cáo cần sự đồng ý rõ ràng trong app và cách để rút lại, còn app phải chạy được khi không có thông báo.
Guideline 4.5.4 quy định về thông báo đẩy (push notification). App của bạn phải hoạt động được khi không có chúng, không bao giờ chứa thông tin nhạy cảm trong đó, và không bao giờ dùng chúng để quảng cáo khi chưa được đồng ý. Một thông báo marketing cần một lời đồng ý được ghi rõ trong app của bạn và một công tắc để rút lại, ngoài quyền mà iOS cấp.
Mình tự phát hành các app iOS của mình bằng Expo. Trên TradaZen, app mô phỏng giao dịch của mình, mình đã gỡ một thông báo báo giảm giá và thay bằng một lời nhắc không kèm ưu đãi, có khai báo với reviewer. Bài này dựa trên văn bản của Apple, giấy phép nhà phát triển, tài liệu của Apple và chính trường hợp đó. Để xem tổng quan các lý do bị từ chối, hãy đọc vì sao Apple từ chối app.
Guideline 4.5.4 nói gì?
Quy tắc nằm ở mục 4 "Design", phần 4.5 "Apple Sites and Services" của App Review Guidelines. Vì thế tiêu đề của lời từ chối là: "Guideline 4.5.4 - Design - Apple Sites and Services". Văn bản đặt ra ba giới hạn.
- Không bắt buộc thông báo. "Push Notifications must not be required for the app to function." Từ chối hộp thoại của iOS không được chặn bất cứ thứ gì.
- Không có thông tin nhạy cảm. Thông báo "should not be used to send sensitive personal or confidential information". Thông báo hiện trên màn hình khóa, ai cũng có thể nhìn thấy.
- Không quảng cáo khi chưa đồng ý. Marketing bị cấm "unless customers have explicitly opted in to receive them via consent language displayed in your app's UI", kèm "a method in your app for a user to opt out".
Câu cuối cảnh báo rằng lạm dụng có thể khiến bạn mất quyền dùng dịch vụ. Hai quy tắc lân cận bổ sung thêm. 4.5.3 cấm spam bằng thông báo. 5.1.2(i) cấm bắt người dùng bật thông báo để truy cập một tính năng, một nội dung hay một phần thưởng.
Giấy phép nhà phát triển bổ sung gì
Guidelines nói về thông báo đẩy. Phụ lục 1 của Apple Developer Program License Agreement, mà bạn đã chấp nhận khi đăng ký, đi xa hơn ở ba điểm.
- Thông báo cục bộ (local notification) cũng bị áp dụng. Điều 2.2 nhắm tới "the APN or Local Notifications". Một lời nhắc được lên lịch trong app, không cần server, vẫn theo cùng quy tắc.
- Quảng cáo được định nghĩa rộng. Nó bao gồm bán thêm (upsell) và "sending any messages to promote the use of Your Application or advertise the availability of new features or versions".
- Hộp thoại của iOS là bất khả xâm phạm. Điều 1.3 cấm lách bảng xin phép của Apple. Nếu người dùng từ chối hoặc rút lại sự đồng ý, bạn không gửi gì nữa.
Cách mình hiểu: một tin nhắn kiểu "quay lại app đi" gần với quảng cáo, kể cả khi không có giá. Apple không phân định rõ trường hợp này, và đó là lý do mình khai báo loại lời nhắc này với reviewer.
Thông điệp từ chối 4.5.4 có nghĩa là gì?
Trường hợp từ chối được ghi nhận rõ nhất là một app không chạy được khi thiếu thông báo. Trong một chủ đề trên diễn đàn B4X năm 2018, Apple viết: "Push notifications must be optional and must obtain the user's consent to be used within the app." Sau đó nhà phát triển báo rằng app hiện màn hình đen khi bị từ chối quyền. Hướng giải thích được đưa ra trong chủ đề: giao diện chờ token thông báo rồi mới hiển thị.
Hãy mặc định rằng reviewer sẽ từ chối các quyền để xem chuyện gì xảy ra. Nếu app bị kẹt, nài nỉ hoặc tước đi một tính năng, bạn sẽ dính 4.5.4 hoặc 5.1.2(i). Với marketing không có sự đồng ý, mình chưa tìm thấy thông điệp từ chối công khai nào gần đây.
Loại thông báo nào cần sự đồng ý nào?
Bảng của mình kết hợp văn bản của Apple, giấy phép và hướng dẫn giao diện. Hai dòng "hết dùng thử" và "nhắc quay lại" là cách mình hiểu, không phải quan điểm Apple viết ra.
| Loại thông báo | Đồng ý cần có | Ví dụ hợp lệ |
|---|---|---|
| Phản hồi một hành động | Hộp thoại iOS | "Bản xuất của bạn đã sẵn sàng" |
| Lời nhắc do người dùng chọn | Hộp thoại iOS | Bài học hôm nay lúc 19h |
| Hết dùng thử, gia hạn | Hộp thoại iOS | "Gói dùng thử hết hạn ngày 12" |
| Nhắc quay lại | Hộp thoại iOS + thận trọng | Không có giá, chỉ một lần |
| Ưu đãi hoặc giảm giá | Hộp thoại iOS + đồng ý | Ô được tích trong app |
| Tính năng mới của app | Hộp thoại iOS + đồng ý | Chỉ gửi cho người đã đăng ký |
| Tin nhắn riêng, sức khỏe | Không bao giờ ghi nội dung | "Tin nhắn mới" |
| Thông báo tạm thời (provisional) | Ban đầu không có hộp thoại | Đến không âm thanh, không banner |
"Hộp thoại iOS" là quyền của hệ thống. "Đồng ý" là một lựa chọn riêng trong app: một câu nói rõ bạn sẽ gửi gì, và một công tắc mặc định tắt.
Lời nhắc gói đăng ký và ưu đãi
Trang Managing notifications trong hướng dẫn giao diện của Apple có nhắc tới gói đăng ký: người dùng có thể thấy hữu ích "an offer to become a subscriber", nếu họ đã chấp nhận thông báo marketing. Trang này thêm hai nghĩa vụ: một màn hình cài đặt trong app để đổi ý, và không bao giờ dùng mức "Time Sensitive" cho marketing.
Ranh giới mình chọn: lời nhắc thông tin về một giao dịch đã thực hiện thì không phải ưu đãi, còn tin nhắn thúc giục mua thì là ưu đãi. "Gói dùng thử hết hạn ngày 12" là thông tin. "Giảm 50% trong 24 giờ" là bán hàng. Màn hình mua hàng mà thông báo mở ra vẫn phải tuân theo quy tắc 3.1.2.
Thông báo nhẹ nhàng, hay thông báo tạm thời
Apple gọi là "provisional authorization" trong tài liệu về quyền. App có thể gửi mà không hiện hộp thoại của iOS. Thông báo đến không âm thanh, không banner, chỉ nằm trong lịch sử của trung tâm thông báo, kèm các nút để giữ hoặc tắt. Với Expo, đó là một tùy chọn của requestPermissionsAsync:
import * as Notifications from "expo-notifications";
await Notifications.requestPermissionsAsync({
ios: {
allowAlert: true,
allowBadge: true,
allowSound: true,
allowProvisional: true,
},
});
Khi đó trường ios.status có giá trị IosAuthorizationStatus.PROVISIONAL chừng nào người dùng chưa chọn. Thông báo tạm thời thay cho hộp thoại của iOS, không thay cho sự đồng ý marketing. Một quảng cáo gửi ở chế độ tạm thời vẫn là quảng cáo.
Cẩn thận với từ ngữ. Trên TradaZen, mình gọi "thông báo nhẹ nhàng" là một lời nhắc có giọng điệu bình tĩnh, chỉ gửi khi hộp thoại của iOS đã được chấp nhận. Đó không phải quyền tạm thời.
Cài đặt sự đồng ý rõ ràng với Expo
- Xin quyền iOS đúng ngữ cảnh. Apple khuyên xin quyền sau một hành động cho thấy lợi ích của nó, không phải ở lần mở đầu tiên. Trên TradaZen, nó xuất hiện chẳng hạn sau một phần thưởng trong onboarding hoặc khi hoàn thành một bài học. Cùng logic với yêu cầu đánh giá.
- Thêm một sự đồng ý marketing riêng. Một công tắc mặc định tắt, kèm một câu rõ ràng, ví dụ: "Nhận ưu đãi và tính năng mới, tối đa một lần mỗi tuần."
- Cung cấp một màn hình cài đặt. Lời nhắc và ưu đãi có thể tắt ngay trong app, không chỉ trong Settings của iOS.
- Lọc khi gửi. Server của bạn, hoặc bộ lên lịch cục bộ, chỉ gửi quảng cáo cho những người đã đồng ý.
- Để mọi thứ chạy được khi không có thông báo. Từ chối không chặn màn hình, tính năng hay phần thưởng nào.
TradaZen: thông báo mình đã gỡ
Ngày 12 tháng 10 năm 2026, một phiên bản TradaZen bị từ chối theo quy tắc 5.6, nhắm vào các giao dịch mua có được nhờ thao túng. Apple không chỉ ra yếu tố nào bị nhắm tới. Vì vậy mình rà lại toàn bộ luồng mua hàng, kể cả thông báo.
Có một thông báo gây vấn đề. Rời app trong lúc onboarding hoặc ở màn hình đăng ký sẽ lên lịch tin nhắn cục bộ này: "Mình có một ưu đãi giảm giá độc quyền dành riêng cho bạn." Nó chỉ phụ thuộc vào quyền của iOS, không có sự đồng ý marketing riêng. Đó chính là quảng cáo không có sự đồng ý rõ ràng mà 4.5.4 và giấy phép mô tả. Mình đã xóa nó trong cả ba mươi ngôn ngữ của app.
Thay vào đó là một lời nhắc duy nhất: "Hành trình của bạn đang chờ. Quay lại khi nào bạn muốn, không có gì vội." Giới hạn của nó:
- chỉ gửi nếu thông báo đã được cho phép;
- chỉ một lần mỗi lượt cài đặt, năm phút sau khi rời onboarding hoặc màn hình đăng ký;
- bị hủy nếu người dùng quay lại trước đó;
- không giá, không giảm giá, không đồng hồ đếm ngược, không âm thanh.
Lời nhắc này vẫn nằm trong vùng xám đã nói ở trên. Mình không giấu nó: nó được mô tả trong ghi chú cho reviewer và trong câu trả lời của mình gửi reviewer. Một lời nhắc được khai báo thì còn bàn được, một lời nhắc bị giấu trông như một mánh khóe.
Trả lời một lần từ chối 4.5.4 thế nào?
Cuộc trao đổi diễn ra trong App Store Connect, nơi bạn trả lời tin nhắn của App Review. Hãy sửa trước: bỏ yêu cầu bắt buộc, thêm sự đồng ý marketing hoặc làm sạch nội dung, rồi build lại. Mẫu mình sẽ dùng, bạn tự điều chỉnh:
Hello,
Thank you for your feedback on Guideline 4.5.4.
In the new build:
- The app works fully if notifications are denied.
- Promotional notifications are sent only to users
who turn on "[toggle name]" in [screen]. It is off
by default and can be turned off at any time.
- Notifications never include [sensitive data].
How to test:
1. Deny notifications at the first prompt.
2. Open [feature]: it works without them.
3. Open [screen] to see both toggles.
Best regards,
Checklist 4.5.4 trước khi nộp
- App dùng được trọn vẹn sau khi từ chối quyền, không có màn hình bị kẹt hay phần thưởng bị tước.
- Hộp thoại của iOS xuất hiện sau một hành động hữu ích, không bao giờ ở màn hình đầu tiên.
- Mọi quảng cáo, cục bộ hay từ xa, đều phụ thuộc vào một sự đồng ý marketing mặc định tắt.
- Một màn hình cài đặt trong app cho phép tắt lời nhắc và ưu đãi.
- Không nội dung thông báo nào hiển thị dữ liệu sức khỏe, số tiền hay tin nhắn riêng.
- Không quảng cáo nào ở mức "Time Sensitive".
- Ghi chú cho reviewer liệt kê các thông báo được gửi trong những ngày đầu.
- Bạn đã thử luồng sử dụng khi từ chối từng quyền. Hướng dẫn TestFlight chỉ cách cài build của bạn cho bài kiểm tra này.
Kiểm tra hồ sơ trước khi gửi
Review Kit gom checklist trước khi gửi của mình, các mẫu ghi chú cho tester và các skill Claude Code đọc lại dự án của bạn. Nếu muốn có người xem trực tiếp, đặt một giờ với mình: chúng ta cùng xem lại thông báo và màn hình cài đặt của bạn qua video call. Toàn bộ quy trình có trên trang app bị Apple từ chối.
Bạn đang chuẩn bị phát hành 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.
Câu hỏi thường gặp
"Guideline 4.5.4 - Design - Apple Sites and Services" có nghĩa là gì?
Đó là tiêu đề lời từ chối khi Apple cho rằng thông báo của bạn bị bắt buộc, quá lộ thông tin hoặc mang tính quảng cáo mà không có sự đồng ý. Hãy đọc câu ngay sau tiêu đề: nó cho biết reviewer đã thấy gì.
Có được xin quyền thông báo trong lúc onboarding không?
Được, nếu từ chối không chặn gì và yêu cầu đến sau một khoảnh khắc cho thấy lợi ích của nó. Đừng bao giờ gắn phần thưởng với việc đồng ý: 5.1.2(i) cấm điều đó.
Thông báo hết dùng thử có phải là marketing không?
Cách mình hiểu: không, nếu nó chỉ thông tin về gói dùng thử hiện tại. Nếu nó đề xuất giảm giá hoặc một gói đăng ký khác, nó trở thành quảng cáo và cần sự đồng ý marketing.
Thông báo cục bộ có chịu Guideline 4.5.4 không?
Guideline nói về thông báo đẩy, nhưng phụ lục 1 của giấy phép nhà phát triển áp dụng quy tắc về quảng cáo cho cả thông báo cục bộ. Hãy xử lý chúng giống nhau.
Thông báo tạm thời có miễn sự đồng ý marketing không?
Không. Nó tránh được hộp thoại của iOS lúc đầu, nhưng quảng cáo vẫn là quảng cáo: nó cần sự đồng ý rõ ràng trong app và một cách để rút lại.

