Guideline 3.1.2 แอปโดนปฏิเสธเพราะระบบสมัครสมาชิก
โดย Mehdi Azizi
เผยแพร่เมื่อ , 9 นาที
Guideline 3.1.2: ยอดที่เรียกเก็บจริงต้องเป็นราคาที่เด่นที่สุดใน paywall พร้อมระยะเวลา การต่ออายุ และลิงก์ข้อกำหนด มีเคสโดนปฏิเสธจริง 2 เคสพร้อมวิธีแก้
Guideline 3.1.2 ว่าด้วยการสมัครสมาชิกแบบต่ออายุอัตโนมัติ ถ้า Apple อ้างข้อนี้มา ให้คุณเช็กสองเรื่อง: ยอดเงินที่เรียกเก็บจริงต้องเป็นราคาที่เด่นที่สุดใน paywall ของคุณ และทั้งตัวแอปกับหน้าแอปบนสโตร์ต้องบอกระยะเวลา ราคา และมีลิงก์ที่ใช้งานได้ไปยังข้อกำหนดการใช้งานและนโยบายความเป็นส่วนตัวของคุณ
ผมโดนปฏิเสธด้วยข้อนี้กับแอปสองตัวในเดือนตุลาคม 2026 คือ Solys วันที่ 10 และ TradaZen วันที่ 12 ต้นเหตุคือการแสดงผลแบบเดียวกัน: ราคาต่อสัปดาห์ตัวใหญ่ ส่วนยอดที่เรียกเก็บจริงตัวเล็ก บทความนี้มีเนื้อหาของกฎ สองเคสนี้ และเช็กลิสต์ที่ผมใช้ตอนนี้ ถ้าเป็นเหตุผลอื่น อ่านทำไม Apple ถึงปฏิเสธแอป
Guideline 3.1.2 พูดถึงอะไร?
ข้อ 3.1.2 "Subscriptions" อยู่ในหมวด 3 "Business" ของ App Review Guidelines ส่วน 3.1 "Payments" จึงเป็นที่มาของหัวข้ออีเมล "Guideline 3.1.2 - Business - Payments - Subscriptions" ข้อนี้มีสามข้อย่อย และตัวอักษรในวงเล็บบอกคุณว่าต้องดูตรงไหน
| ข้อย่อย | สิ่งที่ Apple กำหนด | การปฏิเสธที่พบบ่อย |
|---|---|---|
| 3.1.2(a) Permissible uses | ให้คุณค่าต่อเนื่อง ขั้นต่ำ 7 วัน | สมัครสมาชิกแต่ไม่มีเนื้อหาที่พัฒนาต่อ |
| 3.1.2(b) Upgrades and Downgrades | เปลี่ยนแพ็กเกจได้โดยไม่จ่ายซ้ำซ้อน | จ่ายสองแพ็กเกจพร้อมกัน |
| 3.1.2(c) Subscription Information | ได้อะไร ในราคาเท่าไร | ราคาที่คำนวณตัวใหญ่กว่ายอดที่เรียกเก็บ |
เนื้อหาของ 3.1.2(c) สั้นมาก ก่อนขอให้ใครสมัครสมาชิก คุณต้อง "clearly describe what the user will get for the price" คือบอกให้ชัดว่าเขาจะได้อะไรในราคานี้ จากนั้นอ้างไปยังภาคผนวก 2 (Schedule 2) ของข้อตกลงสิทธิ์การใช้งานของโปรแกรมนักพัฒนา ภาคผนวกนี้ระบุสิ่งที่คุณต้องแสดง "clearly and conspicuously" คือชัดเจนและมองเห็นได้ง่าย:
- ชื่อของแพ็กเกจสมาชิก
- ระยะเวลา
- ราคา และราคาต่อหน่วยถ้าเกี่ยวข้อง
- ลิงก์ไปยังนโยบายความเป็นส่วนตัวและข้อกำหนดการใช้งานของคุณ ที่เข้าถึงได้ในแอป
กฎเรื่องขนาดราคาอยู่ในหน้าของ Apple เรื่องการสมัครสมาชิก ในขั้นตอนการซื้อ "the amount that will be billed must be the most prominent pricing element in the layout" คือยอดที่จะถูกตัดเงินต้องเป็นองค์ประกอบราคาที่เด่นที่สุด ราคาเทียบต่อเดือนหรือยอดที่ประหยัดได้ยังแสดงได้ ถ้าอยู่ในตำแหน่งรองและตัวเล็กกว่า หน้าเดียวกันยังกำหนดว่า ถ้ามีช่วงทดลองใช้ฟรี ต้องบอกระยะเวลาและราคาที่จะเรียกเก็บเมื่อหมดช่วงทดลอง
การปฏิเสธ 3.1.2(c) สองครั้งที่ผมเจอ
Solys: 0,38 € ตัวใหญ่ 19,99 € ตัวเล็ก
Solys คือแอปนาฬิปลุกที่ช่วยปิดโซเชียลของคุณ บน paywall ในขั้นตอน onboarding การ์ด "รายปี" แสดง "0,38 €/สัปดาห์" ขนาด 21 พอยต์ตัวหนา ข้างล่างขนาด 15 พอยต์: "หรือ 19,99 €/ปี" แต่ยอดที่ถูกตัดเงินคือ 19,99 € ไม่ใช่ 0,38 €
วันที่ 10 ตุลาคม 2026 Apple ปฏิเสธเวอร์ชันนั้นโดยอ้าง 3.1.2(c) ข้อความขอให้ยอดที่เรียกเก็บเป็นองค์ประกอบราคาที่ชัดและเด่นที่สุด ช่วงทดลองใช้ฟรี ราคาโปรเปิดตัว และราคาที่คำนวณ ต้องเป็นรองจากยอดนี้ Apple ระบุเกณฑ์ไว้: ฟอนต์ ขนาด สี และตำแหน่ง
ผมรู้อยู่แล้วตอนเลือกแสดงแบบนี้ เพราะ TradaZen เวอร์ชันก่อนหน้าที่ทำแบบเดียวกันเคยผ่าน มันคือการเดิมพัน และมันทำให้เสียรอบรีวิวไปหนึ่งรอบ
วิธีแก้: "19,99 €/ปี" ตัวใหญ่ "หรือ 0,38 €/สัปดาห์" เป็นคำบรรยายสีเทาข้างล่าง ครบทั้ง 30 ภาษาของแอป เพราะ paywall อยู่ในโค้ด จึงต้องทำ build ใหม่ก่อนส่งเวอร์ชันอีกครั้ง
TradaZen: เหตุผลเดียวกัน สองวันต่อมา
TradaZen คือแอปจำลองการเทรดของผม วันที่ 12 ตุลาคม 2026 เวอร์ชัน 1.5.1 โดนปฏิเสธด้วยกฎเดียวกัน ข้อความพูดถึงราคา "weekly calculated" ที่แสดง "more clearly and conspicuously than the billed amount" คือราคาเทียบต่อสัปดาห์เด่นกว่ายอดที่เรียกเก็บ
การแก้ครั้งแรกของผมยังไม่พอ และผมเห็นเองก่อนส่ง ผมย่อ "0,92 €/สัปดาห์" แต่ยังวางไว้ด้านขวาบนแถวราคา ทว่าการ์ดของแพ็กเกจรายสัปดาห์แสดงราคาจริง "8,99 €/สัปดาห์" ในคอลัมน์เดียวกัน ตัวเลขทั้งสองจึงอ่านเหมือนอยู่ระดับเดียวกัน ราคาที่คำนวณซึ่งวางในคอลัมน์ราคาจริงจะถูกอ่านเป็นราคาที่เรียกเก็บ แม้จะตัวเล็กก็ตาม
วิธีแก้ที่ใช้จริง: แต่ละการ์ดแสดงยอดที่เรียกเก็บตัวใหญ่ด้านขวา ราคาต่อสัปดาห์ย้ายไปเป็นคำบรรยายสีเทาข้างล่าง ด้านซ้ายมีแค่ชื่อแพ็กเกจ รอบรีวิวถัดมา Apple ไม่ยก 3.1.2(c) ขึ้นมาอีก
บทเรียนอื่นๆ จากแอปนี้อยู่ในกรณีศึกษา TradaZen
สิ่งที่ Apple ปฏิเสธ และสิ่งที่ผ่าน
นี่คือการแสดงผลจริงตามลำดับ พร้อมผลลัพธ์
| การแสดงราคา | ผลลัพธ์ |
|---|---|
| TradaZen เวอร์ชันก่อนหน้า: เน้นราคาต่อสัปดาห์ | ผ่านในรอบรีวิวก่อนหน้า |
| Solys: "0,38 €/สัปดาห์" ตัวหนา "19,99 €/ปี" ข้างล่าง | ถูกปฏิเสธ 10/10/2026, 3.1.2(c) |
| TradaZen 1.5.1: ราคาต่อสัปดาห์เด่นกว่ายอดที่เรียกเก็บ | ถูกปฏิเสธ 12/10/2026, 3.1.2(c) |
| TradaZen: ย่อราคาต่อสัปดาห์ แต่อยู่ในคอลัมน์ราคา | ผมตัดทิ้งเองก่อนส่ง |
| TradaZen: ยอดเรียกเก็บตัวใหญ่ด้านขวา ราคาสัปดาห์เป็นคำบรรยาย | ไม่ถูกยกขึ้นมาในรอบรีวิวถัดไป |
| Solys: "19,99 €/ปี" ตัวใหญ่ ราคาสัปดาห์เป็นคำบรรยายสีเทา | แก้แล้วส่งให้ Apple อีกครั้ง |
แถวแรกสำคัญที่สุด รีวิวที่ผ่านไม่ได้รับรองว่า paywall ของคุณจะผ่านรอบถัดไป ทุกเวอร์ชันต้องผ่านผู้รีวิวใหม่ ซึ่งอาจตีความกฎเข้มกว่าคนก่อน การแสดงผลที่ปลอดภัยมีแบบเดียวคือแบบที่ทำตามเนื้อหาของกฎ
ยอดที่ถูกตัดเงินคือราคาเดียวที่ตัวใหญ่ ราคาเทียบใดๆ ไม่ว่าต่อสัปดาห์ ต่อเดือน หรือต่อวัน เป็นคำบรรยายที่เล็กกว่าและจางกว่า และไม่มีวันอยู่แทนที่มัน
เช็กลิสต์ paywall ที่ผ่าน 3.1.2
นี่คือรายการที่ผมไล่เช็กทุก paywall ในแอปของผมก่อนส่งทุกครั้ง:
- บนทุกการ์ด ยอดที่เรียกเก็บคือราคาที่ใหญ่ที่สุด คอนทราสต์สูงสุด และอยู่ตำแหน่งดีที่สุด
- ราคาที่คำนวณทุกแบบ (ต่อสัปดาห์ ต่อเดือน ต่อวัน) เป็นคำบรรยาย ตัวเล็กกว่าและจางกว่า อยู่ใต้ยอดที่เรียกเก็บ
- ไม่มีราคาที่คำนวณไปอยู่ในคอลัมน์ที่แพ็กเกจอื่นแสดงราคาจริง
- เขียนระยะเวลาให้ชัด: "ต่อปี" "ต่อสัปดาห์"
- ช่วงทดลองใช้ฟรีบอกระยะเวลาและยอดที่จะเรียกเก็บเมื่อหมดช่วงทดลอง
- มีประโยคบอกว่าการสมัครสมาชิกต่ออายุอัตโนมัติ และยกเลิกได้ในการตั้งค่าบัญชี Apple
- สิ่งที่การสมัครสมาชิกปลดล็อกเขียนไว้ก่อนปุ่มซื้อ
- มีปุ่ม Restore Purchases ที่มองเห็นได้บน paywall
- ลิงก์ไปยังข้อกำหนดการใช้งานและนโยบายความเป็นส่วนตัวอยู่บน paywall และเปิดได้จริง
- ถ้าคุณมีหลายแพ็กเกจ ให้อยู่ในกลุ่มการสมัครสมาชิก (subscription group) เดียวกัน ตามที่ Apple แนะนำ
- ตรวจการแสดงผลบน iPhone รุ่นจอเล็กที่สุดและกับราคาที่ยาวที่สุด ใน TradaZen ผมทดสอบราคาเป็นเงินด่องเวียดนาม: ตัวเลขที่ขึ้นบรรทัดใหม่จะทำลายลำดับความสำคัญ
ถ้าคุณใช้ paywall ของ RevenueCat เอกสารของ RevenueCat ก็เตือนแบบเดียวกัน: ตัวแปรราคาต่อเดือนอย่างเดียวไม่พอ ถ้ายอดที่เรียกเก็บและรอบการเรียกเก็บไม่ปรากฏที่อื่น การเชื่อมต่อแบบครบอยู่ใน RevenueCat: ตั้งค่าการสมัครสมาชิกในแอป และข้อผิดพลาดด้านการออกแบบอยู่ใน paywall iOS: 7 ข้อผิดพลาดของมือใหม่
ลิงก์ข้อกำหนดและนโยบายความเป็นส่วนตัว: ทั้งในแอปและในหน้าแอป
การปฏิเสธ 3.1.2 อีกแบบไม่ได้เล็งที่ paywall แต่เล็งที่ metadata ข้อความที่นักพัฒนาโพสต์ในฟอรัมของ Apple ระบุตำแหน่งที่ Apple ต้องการ: ลิงก์นโยบายความเป็นส่วนตัวในช่องที่กำหนดใน App Store Connect และลิงก์ข้อกำหนดการใช้งาน (EULA) ในคำอธิบายแอปหรือในช่อง EULA
กับดักมาจากสัญญามาตรฐาน ตามความช่วยเหลือของ App Store Connect ถ้าคุณไม่เพิ่มสัญญาแบบกำหนดเอง สัญญามาตรฐานของ Apple จะมีผล และ "the license agreement link isn't shown on your App Store product page" คือไม่มีลิงก์ปรากฏบนหน้าแอปของคุณ ถ้าคุณใช้สัญญามาตรฐาน คุณต้องใส่ลิงก์เองในคำอธิบาย ไปยังหน้าข้อกำหนดของคุณหรือไปยังสัญญาสิทธิ์การใช้งานมาตรฐานของ Apple
ในแอปที่มีการสมัครสมาชิก ผมปิดท้ายคำอธิบายด้วยสองบรรทัด ในทุกภาษาของหน้าแอป นี่คือแม่แบบ ปรับให้เข้ากับข้อเสนอและโดเมนของคุณ:
ทดลองใช้ฟรี 7 วัน จากนั้นสมัครสมาชิกรายปีหรือรายสัปดาห์
ยกเลิกได้ทุกเมื่อ
ข้อกำหนด: https://your-domain.com/terms
ความเป็นส่วนตัว: https://your-domain.com/privacy
เปิดลิงก์ทั้งสองก่อนวาง: หน้าที่หาไม่เจอก็เท่ากับไม่มีลิงก์ สิ่งที่นโยบายต้องมีอธิบายไว้ในนโยบายความเป็นส่วนตัวของแอป และส่วนอื่นของหน้าแอปอยู่ในหน้า ASO App Store
เรื่องนี้แก้ได้โดยไม่ต้องทำ build ใหม่: คำอธิบายและช่องต่างๆ ใน App Store Connect เป็น metadata
3.1.2(a): การสมัครสมาชิกต้องให้คุณค่าต่อเนื่อง
อีกข้อย่อยที่ทำให้โดนปฏิเสธเล็งที่โมเดลธุรกิจ ไม่ใช่หน้าจอ 3.1.2(a) กำหนด "ongoing value" คือคุณค่าที่ต่อเนื่องไปตามเวลา รอบการเรียกเก็บต้องยาวอย่างน้อยเจ็ดวัน และการสมัครสมาชิกต้องใช้ได้บนทุกอุปกรณ์ของผู้ใช้ สมาชิกต้องได้สิ่งที่จ่ายไปโดยไม่ต้องทำงานเพิ่ม เช่น โพสต์ลงโซเชียล
ถ้าแอปของคุณให้บริการแค่ครั้งเดียวจบ การซื้อครั้งเดียวอาจเหมาะกว่า ทั้งสองโมเดลเปรียบเทียบไว้ในสมัครสมาชิกหรือซื้อครั้งเดียว
ตอบ Apple อย่างไรหลังโดนปฏิเสธ 3.1.2
การสื่อสารเกิดขึ้นในส่วน App Review ของแอปคุณ ขั้นตอนตอบกลับ App Review เหมือนกับกฎข้ออื่น มีสองกรณี:
- ปัญหาอยู่ในแอป (ขนาดราคา ข้อความบน paywall): ต้องทำ build ใหม่ เหมือน Solys และ TradaZen ผู้รีวิวทดสอบโค้ดที่อยู่ในแอป ผมอธิบายไว้ในคู่มือ guideline 2.1
- ปัญหาอยู่ในหน้าแอป (ลิงก์หายหรือเสีย): คุณแก้ metadata ตอบกลับ แล้วการส่งเดิมก็กลับเข้าคิว
เขียนเป็นภาษาอังกฤษแบบเรียบๆ: อะไรเป็นปัญหา อะไรเปลี่ยนไป ตรวจสอบอย่างไร นี่คือแม่แบบที่ผมใช้ (เปลี่ยนหมายเลข build ราคา และขั้นตอนเป็นของคุณ):
Hello,
Thank you for your review.
Issue: on the paywall, the weekly equivalent price was displayed
more prominently than the billed amount.
Fix in build X:
- Each plan now shows its billed amount (e.g. "€19.99/year")
as the largest price on the card.
- The weekly equivalent is a smaller grey caption below it.
- The paywall states the duration, the auto-renewal, and links
to our Terms of Use and Privacy Policy.
How to verify: launch the app and complete the onboarding.
The paywall appears at the end.
Best regards,
แก้ paywall ก่อนส่งครั้งถัดไป
ถ้าแอปของคุณเพิ่งโดนปฏิเสธด้วย 3.1.2 Apple Review Kit ช่วยคุณหากฎที่ถูกอ้าง สิ่งที่กฎต้องการ และตัวอย่างการแก้และการตอบกลับ skill ของ Claude Code ในชุดนี้ยังช่วยตรวจ paywall และหน้าแอปของคุณก่อนส่ง ถ้าอยากได้คนช่วยดู จองเวลาหนึ่งชั่วโมงกับผม: เราจะอ่านข้อความของ Apple และปรับ paywall ของคุณบนหน้าจอของคุณด้วยกัน ขั้นตอนทั้งหมดอยู่ในหน้าแอปโดน Apple ปฏิเสธ และการตั้งค่าการสมัครสมาชิกอยู่ในหน้าการสมัครสมาชิกในแอป iOS
ถ้าคุณกำลังเตรียมปล่อยแอปแรก ทำแบบวินิจฉัยฟรี: มันจะเรียงขั้นตอนให้ถูกลำดับ และส่งเช็กลิสต์กันโดน Apple ปฏิเสธของผมให้คุณ ถ้าอยากสร้างแอปมือถือที่ทำเงินได้ตั้งแต่วันเปิดตัว iOS Kit ใช้ขั้นตอนที่สาม "เชื่อมระบบรับเงิน" สำหรับการสมัครสมาชิกและ paywall โดยเฉพาะ
ไม่มีใครรับประกันได้ว่า Apple จะอนุมัติแอปของคุณ สิ่งที่ผมทำได้คือช่วยให้คุณไม่โดนปฏิเสธ 3.1.2(c) แบบที่ผมโดนมาแล้วสองครั้ง
คำถามที่พบบ่อย
"Guideline 3.1.2 - Business - Payments - Subscriptions" หมายความว่าอะไร?
คือชื่อเต็มของกฎเรื่องการสมัครสมาชิก มันบ่งบอกว่าราคาจัดลำดับความสำคัญผิด ข้อมูลบน paywall ขาดหาย หน้าแอปไม่มีลิงก์ หรือการสมัครสมาชิกไม่มีคุณค่าต่อเนื่อง ตัวอักษรในวงเล็บ เช่น 3.1.2(c) บอกข้อย่อยที่ถูกอ้าง
ยังแสดงราคาต่อสัปดาห์หรือต่อเดือนได้ไหม?
ได้ Apple อนุญาตให้แสดงราคาเทียบต่อสัปดาห์หรือต่อเดือน หรือยอดที่ประหยัดได้ ตราบใดที่ตัวเล็กกว่าและเด่นน้อยกว่ายอดที่เรียกเก็บจริง ในแอปของผม ราคาเทียบเป็นคำบรรยายสีเทาใต้ยอดที่เรียกเก็บ และไม่เคยอยู่ในคอลัมน์ราคาจริง
ต้องทำ build ใหม่หลังโดนปฏิเสธ 3.1.2 ไหม?
ต้อง ถ้าปัญหาอยู่บน paywall เพราะผู้รีวิวทดสอบโค้ดที่อยู่ในแอป ไม่ต้อง ถ้าปัญหาอยู่ในหน้าแอป เช่น ไม่มีลิงก์ในคำอธิบาย: คุณแก้ metadata แล้วการส่งเดิมก็กลับเข้าคิว
ควรใส่ลิงก์ข้อกำหนดการใช้งาน (EULA) ไว้ที่ไหน?
ในแอป ให้ใส่บน paywall ส่วนหน้าแอป ใส่ในคำอธิบายหรือในช่อง EULA ของ App Store Connect ถ้าคุณมีสัญญาแบบกำหนดเอง ถ้าใช้สัญญามาตรฐานของ Apple จะไม่มีลิงก์แสดงบนหน้าแอปของคุณ: ให้เพิ่มเองในคำอธิบาย ในทุกภาษา
paywall ของผมเคยผ่านแล้ว ทำไมตอนนี้โดนปฏิเสธ?
เพราะทุกเวอร์ชันต้องผ่านรีวิวใหม่ บางครั้งเป็นผู้รีวิวคนละคน การเน้นราคาต่อสัปดาห์เคยผ่านใน TradaZen แล้วโดนปฏิเสธทั้งใน Solys และ TradaZen ในเดือนตุลาคม 2026 สิ่งเดียวที่ปกป้องคุณได้คือการทำตามเนื้อหาของกฎ