Guideline 4.5.4: Apple ปฏิเสธแอปเพราะ push notification
โดย Mehdi Azizi
เผยแพร่เมื่อ , 9 นาที
Guideline 4.5.4: การแจ้งเตือนเชิงโปรโมชันต้องได้รับความยินยอมชัดเจนในแอปและมีวิธียกเลิก และแอปต้องใช้งานได้แม้ไม่เปิดการแจ้งเตือน
Guideline 4.5.4 กำกับดูแลเรื่อง push notification แอปของคุณต้องใช้งานได้โดยไม่ต้องพึ่งการแจ้งเตือน ห้ามใส่ข้อมูลอ่อนไหวลงไป และห้ามใช้เพื่อโปรโมชันโดยไม่ได้รับความยินยอม การแจ้งเตือนเชิงการตลาดต้องมีข้อความขอความยินยอมเป็นลายลักษณ์อักษรในแอป และมีสวิตช์ให้ถอนความยินยอมได้ นอกเหนือจากการอนุญาตของ iOS
ผมเผยแพร่แอป iOS ของตัวเองด้วย Expo ใน TradaZen ซึ่งเป็นแอปจำลองการเทรดของผม ผมลบการแจ้งเตือนที่ประกาศส่วนลดออก แล้วแทนที่ด้วยการเตือนที่ไม่มีข้อเสนอใด ๆ และแจ้งให้ reviewer ทราบ คู่มือนี้อ้างอิงจากข้อความของ Apple, ข้อตกลงสิทธิ์สำหรับนักพัฒนา, เอกสารของ Apple และกรณีนี้ ถ้าอยากเห็นภาพรวมของเหตุผลที่ถูกปฏิเสธ อ่าน ทำไม Apple ถึงปฏิเสธแอป
Guideline 4.5.4 ว่าไว้อย่างไร?
กฎนี้อยู่ในหมวด 4 "Design" ส่วน 4.5 "Apple Sites and Services" ของ App Review Guidelines จึงเป็นที่มาของหัวข้อการปฏิเสธ: "Guideline 4.5.4 - Design - Apple Sites and Services" ข้อความนี้กำหนดข้อจำกัดไว้สามข้อ
- ห้ามบังคับให้เปิดการแจ้งเตือน "Push Notifications must not be required for the app to function." การปฏิเสธหน้าต่างขออนุญาตของ iOS ต้องไม่ทำให้อะไรติดขัด
- ห้ามมีข้อมูลอ่อนไหว การแจ้งเตือน "should not be used to send sensitive personal or confidential information" เพราะการแจ้งเตือนแสดงบนหน้าจอล็อก ใครก็มองเห็นได้
- ห้ามโปรโมชันโดยไม่ได้รับความยินยอม การตลาดเป็นสิ่งต้องห้าม "unless customers have explicitly opted in to receive them via consent language displayed in your app's UI" และต้องมี "a method in your app for a user to opt out"
ประโยคสุดท้ายเตือนว่าการใช้ในทางที่ผิดอาจทำให้เสียสิทธิ์ใช้บริการ มีกฎใกล้เคียงอีกสองข้อที่เติมภาพให้ครบ ข้อ 4.5.3 ห้ามสแปมผ่านการแจ้งเตือน ข้อ 5.1.2(i) ห้ามบังคับให้เปิดการแจ้งเตือนเพื่อเข้าถึงฟีเจอร์ เนื้อหา หรือรางวัล
สิ่งที่ข้อตกลงสิทธิ์สำหรับนักพัฒนาเพิ่มเติม
Guidelines พูดถึง push notification แต่ภาคผนวก 1 ของ Apple Developer Program License Agreement ซึ่งคุณยอมรับตอนสมัคร ไปไกลกว่านั้นในสามประเด็น
- การแจ้งเตือนแบบ local ก็นับด้วย ข้อ 2.2 ครอบคลุม "the APN or Local Notifications" การเตือนที่ตั้งเวลาไว้ในแอปโดยไม่มีเซิร์ฟเวอร์ ก็ต้องทำตามกฎเดียวกัน
- นิยามของโปรโมชันกว้างมาก รวมถึงการขายเพิ่ม (upsell) และ "sending any messages to promote the use of Your Application or advertise the availability of new features or versions"
- ห้ามแตะต้องหน้าต่างขออนุญาตของ iOS ข้อ 1.3 ห้ามเลี่ยงหน้าต่างขอความยินยอมของ Apple ถ้าผู้ใช้ปฏิเสธหรือถอนความยินยอม คุณต้องไม่ส่งอะไรอีก
ความเห็นของผม: ข้อความแบบ "กลับมาที่แอปสิ" ใกล้เคียงกับโปรโมชัน แม้จะไม่มีราคาก็ตาม Apple ไม่ได้ชี้ขาดกรณีนี้ และนั่นคือเหตุผลที่ผมแจ้งการเตือนแบบนี้ให้ reviewer ทราบ
ข้อความปฏิเสธ 4.5.4 หมายความว่าอะไร?
การปฏิเสธที่มีหลักฐานชัดที่สุดคือแอปที่ใช้งานไม่ได้ถ้าไม่มีการแจ้งเตือน ในกระทู้ฟอรัม B4X ปี 2018 Apple เขียนว่า: "Push notifications must be optional and must obtain the user's consent to be used within the app." จากนั้นนักพัฒนาบอกว่าเจอหน้าจอดำหลังปฏิเสธการอนุญาต สาเหตุที่คนในกระทู้สันนิษฐานคือ UI ที่รอ token ของการแจ้งเตือนก่อนจะแสดงผล
ให้ถือว่า reviewer จะปฏิเสธการอนุญาตทุกอย่างเพื่อดูว่าเกิดอะไรขึ้น ถ้าแอปค้าง เซ้าซี้ หรือตัดฟีเจอร์ออก คุณจะโดน 4.5.4 หรือ 5.1.2(i) ส่วนเรื่องการตลาดโดยไม่ได้รับความยินยอม ผมยังไม่เจอข้อความปฏิเสธที่เผยแพร่ต่อสาธารณะเมื่อเร็ว ๆ นี้
การแจ้งเตือนแต่ละแบบต้องได้รับความยินยอมแบบไหน?
ตารางของผมนำข้อความของ Apple, ข้อตกลงสิทธิ์ และคู่มือการออกแบบ UI มาประกอบกัน แถว "สิ้นสุดช่วงทดลองใช้" และ "เตือนให้กลับมา" เป็นความเห็นของผม ไม่ใช่จุดยืนที่ Apple เขียนไว้
| ประเภทการแจ้งเตือน | ความยินยอมที่ต้องมี | ตัวอย่างที่ถูกต้อง |
|---|---|---|
| ตอบสนองต่อการกระทำ | หน้าต่าง iOS | "ไฟล์ export ของคุณพร้อมแล้ว" |
| การเตือนที่ผู้ใช้เลือกเอง | หน้าต่าง iOS | บทเรียนประจำวันตอน 19:00 |
| สิ้นสุดช่วงทดลองใช้, การต่ออายุ | หน้าต่าง iOS | "ช่วงทดลองใช้ของคุณจะหมดวันที่ 12" |
| เตือนให้กลับมา | หน้าต่าง iOS + ระมัดระวัง | ไม่มีราคา ส่งครั้งเดียว |
| ข้อเสนอหรือส่วนลด | หน้าต่าง iOS + ความยินยอม | ช่องที่ติ๊กในแอป |
| ของใหม่ในแอป | หน้าต่าง iOS + ความยินยอม | ส่งเฉพาะผู้ที่สมัครรับ |
| ข้อความส่วนตัว, สุขภาพ | ห้ามมีเนื้อหาเด็ดขาด | "ข้อความใหม่" |
| การแจ้งเตือนแบบชั่วคราว (provisional) | ไม่มีหน้าต่างในตอนแรก | มาถึงแบบไม่มีเสียงและไม่มีแบนเนอร์ |
"หน้าต่าง iOS" คือการอนุญาตของระบบ "ความยินยอม" คือตัวเลือกแยกต่างหากในแอปของคุณ: ประโยคที่บอกว่าคุณจะส่งอะไร และสวิตช์ที่ปิดไว้เป็นค่าเริ่มต้น
การเตือนเรื่อง subscription และข้อเสนอ
หน้า Managing notifications ในคู่มือการออกแบบ UI ของ Apple ยกตัวอย่าง subscription: ผู้ใช้อาจชอบ "an offer to become a subscriber" ถ้าเขายอมรับการแจ้งเตือนเชิงการตลาดแล้ว และยังเพิ่มข้อบังคับอีกสองข้อ: ต้องมีหน้าตั้งค่าในแอปให้เปลี่ยนใจได้ และห้ามใช้ระดับ "Time Sensitive" กับการตลาดเด็ดขาด
เส้นแบ่งที่ผมยึดไว้: การเตือนที่ให้ข้อมูลเกี่ยวกับสิ่งที่ซื้อไปแล้วไม่ใช่ข้อเสนอ ส่วนข้อความที่กระตุ้นให้ซื้อคือข้อเสนอ "ช่วงทดลองใช้ของคุณจะหมดวันที่ 12" คือการให้ข้อมูล "ลด 50% ภายใน 24 ชั่วโมง" คือการขาย หน้าซื้อที่การแจ้งเตือนเปิดขึ้นมายังคงต้องทำตามกฎ 3.1.2
การแจ้งเตือนแบบนุ่มนวล หรือแบบชั่วคราว
Apple เรียกสิ่งนี้ว่า "provisional authorization" ในเอกสารเรื่องการขออนุญาต แอปส่งการแจ้งเตือนได้โดยไม่ต้องแสดงหน้าต่างของ iOS การแจ้งเตือนจะมาถึงแบบไม่มีเสียงและไม่มีแบนเนอร์ อยู่แค่ในประวัติของศูนย์การแจ้งเตือน พร้อมปุ่มให้เลือกเก็บไว้หรือปิด ใน Expo นี่คือออปชันหนึ่งของ requestPermissionsAsync:
import * as Notifications from "expo-notifications";
await Notifications.requestPermissionsAsync({
ios: {
allowAlert: true,
allowBadge: true,
allowSound: true,
allowProvisional: true,
},
});
ฟิลด์ ios.status จะมีค่าเป็น IosAuthorizationStatus.PROVISIONAL ตราบใดที่ผู้ใช้ยังไม่ได้เลือก การแจ้งเตือนแบบชั่วคราวใช้แทนหน้าต่างของ iOS ได้ แต่ใช้แทนความยินยอมทางการตลาดไม่ได้ โปรโมชันที่ส่งแบบชั่วคราวก็ยังเป็นโปรโมชันอยู่ดี
ระวังเรื่องคำศัพท์ด้วย ใน TradaZen ผมเรียกการเตือนที่มีน้ำเสียงสบาย ๆ และส่งเฉพาะเมื่อผู้ใช้ยอมรับหน้าต่างของ iOS แล้วว่า "การแจ้งเตือนแบบนุ่มนวล" ซึ่งไม่ใช่การอนุญาตแบบชั่วคราว
ตั้งค่าความยินยอมที่ชัดเจนด้วย Expo
- ขออนุญาต iOS ในจังหวะที่เหมาะสม Apple แนะนำให้ขอหลังการกระทำที่แสดงให้เห็นประโยชน์ ไม่ใช่ตอนเปิดแอปครั้งแรก ใน TradaZen หน้าต่างนี้จะขึ้นหลังได้รับรางวัลใน onboarding หรือหลังเรียนจบบทเรียน เป็นต้น ตรรกะเดียวกับการขอให้รีวิว
- เพิ่มความยินยอมทางการตลาดแยกต่างหาก สวิตช์ที่ปิดไว้เป็นค่าเริ่มต้น พร้อมประโยคที่ชัดเจน เช่น "รับข้อเสนอและของใหม่ ไม่เกินสัปดาห์ละครั้ง"
- มีหน้าตั้งค่า การเตือนและข้อเสนอต้องปิดได้ในแอป ไม่ใช่แค่ในการตั้งค่าของ iOS
- กรองตอนส่ง เซิร์ฟเวอร์ของคุณ หรือตัวตั้งเวลาแบบ local จะส่งโปรโมชันเฉพาะคนที่ยอมรับแล้วเท่านั้น
- ให้ทุกอย่างใช้งานได้แม้ไม่ยินยอม การปฏิเสธต้องไม่บล็อกหน้าจอ ฟีเจอร์ หรือรางวัลใด ๆ
TradaZen: การแจ้งเตือนที่ผมลบออก
วันที่ 12 ตุลาคม 2026 TradaZen เวอร์ชันหนึ่งถูกปฏิเสธด้วยกฎ 5.6 ซึ่งว่าด้วยการซื้อที่ได้มาจากการชักจูงหลอกล่อ Apple ไม่ได้ระบุว่าองค์ประกอบไหนที่เป็นปัญหา ผมจึงไล่ตรวจขั้นตอนการซื้อทั้งหมด รวมถึงการแจ้งเตือนด้วย
มีการแจ้งเตือนหนึ่งที่เป็นปัญหา การออกจากแอประหว่าง onboarding หรือที่หน้า subscription จะตั้งเวลาข้อความ local นี้ไว้: "ผมมีส่วนลดพิเศษสำหรับคุณคนเดียว" ข้อความนี้ขึ้นอยู่กับการอนุญาตของ iOS อย่างเดียว ไม่มีความยินยอมทางการตลาดแยกต่างหาก นี่คือโปรโมชันที่ไม่มีความยินยอมชัดเจนตามที่ 4.5.4 และข้อตกลงสิทธิ์อธิบายไว้ ผมลบมันออกจากทั้งสามสิบภาษาของแอป
แทนที่ด้วยการเตือนเพียงครั้งเดียว: "เส้นทางของคุณรออยู่ กลับมาต่อเมื่อไหร่ก็ได้ ไม่ต้องรีบ" ข้อจำกัดของมันคือ:
- ส่งเฉพาะเมื่อผู้ใช้อนุญาตการแจ้งเตือนแล้ว
- ส่งครั้งเดียวต่อการติดตั้ง ห้านาทีหลังออกจาก onboarding หรือหน้า subscription
- ยกเลิกถ้าผู้ใช้กลับมาก่อน
- ไม่มีราคา ไม่มีส่วนลด ไม่มีตัวนับเวลาถอยหลัง ไม่มีเสียง
การเตือนนี้ยังอยู่ในพื้นที่สีเทาที่อธิบายไว้ข้างบน ผมไม่ได้ซ่อนมัน: มันถูกอธิบายไว้ในโน้ตสำหรับการรีวิวและในคำตอบถึง reviewer การเตือนที่แจ้งไว้ยังคุยกันได้ แต่การเตือนที่ซ่อนไว้ดูเหมือนกลอุบาย
จะตอบกลับการปฏิเสธ 4.5.4 อย่างไร?
การสนทนาเกิดขึ้นใน App Store Connect ซึ่งเป็นที่ที่คุณตอบกลับข้อความของ App Review แก้ไขก่อน: เอาการบังคับออก เพิ่มความยินยอมทางการตลาด หรือปรับข้อความให้สะอาด แล้วสร้าง build ใหม่ นี่คือเทมเพลตที่ผมจะใช้ ปรับตามแอปของคุณได้:
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,
เช็กลิสต์ 4.5.4 ก่อนส่งรีวิว
- แอปใช้งานได้ครบหลังปฏิเสธการอนุญาต ไม่มีหน้าจอค้างหรือรางวัลที่ถูกตัด
- หน้าต่างของ iOS ขึ้นหลังการกระทำที่มีประโยชน์ ไม่ใช่ที่หน้าจอแรก
- โปรโมชันทุกอัน ทั้งแบบ local และแบบ remote ขึ้นอยู่กับความยินยอมทางการตลาดที่ปิดไว้เป็นค่าเริ่มต้น
- มีหน้าตั้งค่าในแอปสำหรับปิดการเตือนและข้อเสนอ
- ไม่มีข้อความแจ้งเตือนใดแสดงข้อมูลสุขภาพ จำนวนเงิน หรือข้อความส่วนตัว
- ไม่มีโปรโมชันในระดับ "Time Sensitive"
- โน้ตสำหรับการรีวิวระบุการแจ้งเตือนที่ส่งในช่วงไม่กี่วันแรก
- คุณทดสอบขั้นตอนทั้งหมดโดยปฏิเสธการอนุญาตทุกอย่างแล้ว คู่มือ TestFlight จะแสดงวิธีติดตั้ง build ของคุณสำหรับการทดสอบนี้
ตรวจเอกสารของคุณก่อนส่ง
Review Kit รวบรวมเช็กลิสต์ก่อนส่งของผม เทมเพลตโน้ตสำหรับผู้ทดสอบ และ skills ของ Claude Code ที่ช่วยตรวจโปรเจกต์ของคุณ ถ้าอยากให้คนช่วยดู จองเวลาหนึ่งชั่วโมงกับผม: เราจะตรวจการแจ้งเตือนและหน้าตั้งค่าของคุณด้วยกันผ่านวิดีโอคอล ขั้นตอนทั้งหมดอยู่ที่หน้า แอปถูก Apple ปฏิเสธ
กำลังเตรียมเปิดตัวแอปแรกอยู่ใช่ไหม? ทำการวินิจฉัยฟรี: มันจะเรียงขั้นตอนให้ถูกลำดับ และส่งเช็กลิสต์กันโดน Apple ปฏิเสธของผมให้คุณ
คำถามที่พบบ่อย
"Guideline 4.5.4 - Design - Apple Sites and Services" หมายความว่าอะไร?
นี่คือหัวข้อการปฏิเสธเมื่อ Apple เห็นว่าการแจ้งเตือนของคุณเป็นแบบบังคับ เปิดเผยข้อมูลมากเกินไป หรือเป็นโปรโมชันโดยไม่ได้รับความยินยอม อ่านประโยคที่ตามหลังหัวข้อ: มันบอกว่า reviewer เจออะไร
ขอสิทธิ์การแจ้งเตือนระหว่าง onboarding ได้ไหม?
ได้ ถ้าการปฏิเสธไม่บล็อกอะไร และการขอเกิดขึ้นหลังจังหวะที่แสดงให้เห็นประโยชน์ อย่าผูกรางวัลไว้กับการยินยอมเด็ดขาด: ข้อ 5.1.2(i) ห้ามไว้
การแจ้งเตือนว่าช่วงทดลองใช้กำลังจะหมดถือเป็นการตลาดไหม?
ความเห็นของผม: ไม่ ถ้ามันแค่ให้ข้อมูลเกี่ยวกับช่วงทดลองใช้ปัจจุบัน แต่ถ้ามันเสนอส่วนลดหรือ subscription แบบอื่น มันจะกลายเป็นโปรโมชันและต้องมีความยินยอมทางการตลาด
การแจ้งเตือนแบบ local อยู่ภายใต้ 4.5.4 ด้วยไหม?
Guideline พูดถึง push notification แต่ภาคผนวก 1 ของข้อตกลงสิทธิ์สำหรับนักพัฒนาใช้กฎเรื่องโปรโมชันกับการแจ้งเตือนแบบ local ด้วย ให้ปฏิบัติกับมันแบบเดียวกัน
การแจ้งเตือนแบบชั่วคราวทำให้ไม่ต้องขอความยินยอมทางการตลาดได้ไหม?
ไม่ได้ มันช่วยให้ไม่ต้องแสดงหน้าต่างของ iOS ในตอนแรก แต่โปรโมชันก็ยังเป็นโปรโมชัน: ต้องมีความยินยอมที่ชัดเจนในแอปและมีวิธีให้ยกเลิกได้

