# Guideline 1.2 User-Generated Content: สิ่งที่ Apple กำหนด

> Guideline 1.2: ถ้าผู้ใช้โพสต์เนื้อหาได้ แอปต้องมีตัวกรอง การรายงาน การบล็อก ช่องทางติดต่อ และข้อกำหนดที่ผู้ใช้กดยอมรับ พร้อมเช็กลิสต์ Expo และ Supabase

หน้าต้นฉบับ: [Guideline 1.2 User-Generated Content: สิ่งที่ Apple กำหนด](https://devoria.fr/th/blog/guideline-1-2-user-generated-content-app-store)
ผู้เขียน: [Mehdi Azizi](https://devoria.fr/th/mehdi-azizi)
เผยแพร่: 2026-11-04
แก้ไขเนื้อหาล่าสุด: 2026-11-04


Guideline 1.2 มีผลทันทีที่ผู้ใช้โพสต์อะไรก็ตามที่คนอื่นมองเห็นได้ ไม่ว่าจะเป็นข้อความ รูปภาพ รีวิว หรือในความเห็นผม แค่ชื่อเล่นในตารางอันดับก็นับด้วย ข้อความของ Apple กำหนดให้มีตัวกรอง การรายงานที่ตามด้วยการตอบสนองอย่างรวดเร็ว การบล็อก และช่องทางติดต่อที่เผยแพร่ไว้ **ส่วนข้อความแจ้งปฏิเสธจะเพิ่มข้อกำหนดข้อที่ห้า: ข้อกำหนดการใช้งานที่ผู้ใช้กดยอมรับ ซึ่งไม่ยอมให้มีทั้งเนื้อหาที่ไม่เหมาะสมและผู้ใช้ที่ก่อกวน**

คู่มือนี้ไม่ได้เล่าเรื่องการโดนปฏิเสธ แต่จะแสดงสิ่งที่ผมทำไว้ใน TradaZen แอปฝึกเทรดของผม ตอนที่ตารางอันดับเริ่มแสดงชื่อเล่นที่ผู้เล่นตั้งเอง ถ้าอยากเห็นภาพรวมของเหตุผลที่โดนปฏิเสธ ลองอ่าน [ทำไม Apple ถึงปฏิเสธแอป](https://devoria.fr/th/blog/apple-app-rejection-reasons-real-cases)

## Guideline 1.2 พูดถึงอะไร?

ข้อ 1.2 "User-Generated Content" อยู่ในหมวด 1 "Safety" ของ [App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/#user-generated-content) ครอบคลุมแอปที่มีเนื้อหาจากผู้ใช้หรือบริการแบบโซเชียลเน็ตเวิร์ก เพื่อป้องกันการใช้งานในทางที่ผิด แอปเหล่านี้ "must include" การป้องกันสี่อย่าง:

- "A method for filtering objectionable material from being posted to the app": **ตัวกรองที่บล็อกเนื้อหาไม่เหมาะสมก่อนถูกเผยแพร่**
- "A mechanism to report offensive content and timely responses to concerns": วิธีรายงานเนื้อหา และการตอบสนองต่อการรายงานอย่างรวดเร็ว
- "The ability to block abusive users from the service": ความสามารถในการบล็อกผู้ใช้ที่ก่อกวน
- "Published contact information so users can easily reach you": ช่องทางติดต่อที่เผยแพร่ไว้และหาได้ง่าย

ข้อความเวอร์ชันปัจจุบันซึ่งอัปเดตเมื่อวันที่ 8 มิถุนายน 2026 ไปไกลกว่านั้น โดยย้ำว่าคุณมีหน้าที่ลบเนื้อหาที่ละเมิดกฎ ข้อกำหนดการใช้งาน หรือกฎของชุมชนของคุณเอง ถ้า Apple เจอเนื้อหาแบบนี้ จะขอให้คุณลบออกและส่งแผนการปรับปรุง และอาจถอดแอปออกระหว่างรอได้

ข้อความยังระบุแอปที่ไม่มีที่ยืนบน App Store ไว้ด้วย ได้แก่แอปที่ใช้เป็นหลักเพื่อสื่อลามก แชตสุ่มหรือแชตนิรนามแบบ Chatroulette การให้คะแนนรูปร่างหน้าตาของคนจริง การข่มขู่ หรือการกลั่นแกล้ง **สำหรับการใช้งานเหล่านี้ การป้องกันสี่อย่างไม่เพียงพอ** ส่วนข้อ 1.2.1 เพิ่มกฎสำหรับแอปของครีเอเตอร์ โดยเฉพาะการตรวจสอบอายุสำหรับเนื้อหาที่เกินระดับอายุของแอป

## แอปของคุณเข้าข่ายไหม?

แบบสอบถามระดับอายุใน App Store Connect ให้คำนิยามที่ดีไว้ โดยจะเรียกว่า [เนื้อหาที่ผู้ใช้สร้างขึ้น](https://developer.apple.com/help/app-store-connect/reference/app-information/age-ratings-values-and-definitions) เมื่อเนื้อหาที่ผู้ใช้สร้างถูกเผยแพร่อย่างกว้างขวางในแอป ทั้งวิดีโอ รูปภาพ ข้อความ หรือเสียง และแยกการส่งข้อความระหว่างผู้ใช้ไว้อีกหัวข้อหนึ่ง

| สิ่งที่คนอื่นมองเห็น   | เข้าข่ายไหม?     |
| ---------------------- | ---------------- |
| ข้อความระหว่างสมาชิก   | ใช่              |
| รูปภาพหรือรีวิวสาธารณะ | ใช่              |
| ชื่อเล่นในตารางอันดับ  | ใช่ ในความเห็นผม |
| โน้ตส่วนตัว            | ไม่              |
| เนื้อหาที่คุณเขียนเอง  | ไม่              |

Apple ไม่ได้พูดถึงชื่อเล่นเลย แต่ผมก็ถือว่ามันเป็นเนื้อหาจากผู้ใช้ เพราะใครก็ตั้งชื่อหยาบคายได้ และผู้เล่นคนอื่นก็มองเห็น นี่คือสิ่งที่ผมเลือกทำกับตารางอันดับของ TradaZen

## กลไก 5 อย่างที่ต้องเขียนโค้ด ด้วย Expo และ Supabase

ข้อความปฏิเสธ 1.2 ที่นักพัฒนาคนหนึ่งโพสต์ไว้ใน [ฟอรัมของ Apple](https://developer.apple.com/forums/thread/807358) ช่วงปลายปี 2025 ระบุมาตรการที่คาดหวังไว้ เริ่มด้วย "Require that users agree to terms (EULA)" และปิดท้ายด้วยข้อกำหนดเรื่องเวลา: จัดการรายงาน "within 24 hours" โดยลบเนื้อหาและแบนผู้โพสต์

| กลไก                | เขียนโค้ดตรงไหน           |
| ------------------- | ------------------------- |
| ข้อกำหนดที่กดยอมรับ | หน้าจอและโปรไฟล์          |
| ตัวกรอง             | เซิร์ฟเวอร์ ก่อนแสดงผล    |
| การรายงาน           | ปุ่มและตาราง              |
| การบล็อก            | ตารางและกฎการเข้าถึง      |
| ช่องทางติดต่อ       | แอปและหน้าแอปบน App Store |

ตัวอย่าง SQL ด้านล่างต้องปรับให้เข้ากับ schema ของคุณ โดยอิงกับ [กฎการเข้าถึงระดับแถวของ Supabase](https://supabase.com/docs/guides/database/postgres/row-level-security) ซึ่งมีผลแม้มีคนเลี่ยงไม่ผ่านแอปของคุณก็ตาม

### 1. ข้อกำหนดที่กดยอมรับ และไม่ยอมให้มีการก่อกวน

ข้อกำหนดการใช้งานต้องเขียนไว้ชัดเจนว่าไม่ยอมให้มีเนื้อหาไม่เหมาะสมหรือผู้ใช้ที่ก่อกวน ตัวอย่างข้อความ (ควรให้คนตรวจทาน นี่ไม่ใช่คำแนะนำทางกฎหมาย): "ไม่อนุญาตเนื้อหาที่หยาบคาย สร้างความเกลียดชัง มีเนื้อหาทางเพศ หรือกลั่นแกล้งผู้อื่น เนื้อหาที่ถูกรายงานอาจถูกลบและผู้โพสต์อาจถูกแบนโดยไม่ต้องแจ้งล่วงหน้า"

**ประโยคเฉยๆ ใต้ปุ่มสมัครสมาชิกไม่ได้พิสูจน์ว่าผู้ใช้ยอมรับ ต้องให้ผู้ใช้กดยืนยันอย่างชัดเจน** ทำหน้าจอที่มีลิงก์ไปยังข้อกำหนดและปุ่ม "ยอมรับ" ก่อนการโพสต์ครั้งแรก บันทึกวันที่และเวอร์ชันที่ยอมรับไว้ในโปรไฟล์ แล้วห้ามโพสต์ถ้ายังไม่มีข้อมูลนี้:

```sql
create policy "publier après les CGU" on public.posts
for insert to authenticated
with check (
  auth.uid() = author_id
  and exists (
    select 1 from public.profiles p
    where p.id = auth.uid() and p.cgu_acceptees_le is not null
  )
);
```

### 2. ตัวกรองก่อนที่คนอื่นจะเห็นเนื้อหา

ตัวกรองต้องอยู่บนเซิร์ฟเวอร์ เพราะโค้ดในแอปถูกเลี่ยงได้ สำเนาในแอปมีไว้แค่เตือนผู้ใช้ทันทีเท่านั้น

ใน TradaZen มีฟังก์ชันในฐานข้อมูลที่ตรวจชื่อเล่นทุกชื่อ และแอปก็ใช้รายการคำเดียวกันเพื่อเตือนผู้เล่น ผมคอยดูให้สองฝั่งตรงกันเสมอ ฝั่งเซิร์ฟเวอร์จะไม่ปฏิเสธชื่อเล่นที่หยาบคายตอนบันทึก แต่ **จะแทนด้วยชื่อกลางๆ ตอนแสดงผล ซึ่งช่วยไม่ให้ใครโดนบล็อกเพราะผลบวกลวง**

ผลบวกลวงเกิดขึ้นเร็วมาก ใน TradaZen ตัวกรองเวอร์ชันแรกเซ็นเซอร์ชื่ออย่าง Dominique, Monique หรือ Véronique เพราะมีคำหยาบบางส่วนอยู่ในชื่อ วิธีแก้คือค้นหาเป็นคำทั้งคำ ไม่ใช่ส่วนของคำ และเนื่องจากแอปขายในภาษาญี่ปุ่นและจีนด้วย ตัวกรองจึงครอบคลุมภาษาเหล่านี้ด้วย

### 3. การรายงาน ที่จัดการภายใน 24 ชั่วโมง

เนื้อหาทุกชิ้นที่เผยแพร่มีปุ่ม "รายงาน" ใน TradaZen ชื่อเล่นที่ถูกรายงานในตารางอันดับของลีกจะแสดงเป็นข้อความกลางๆ ทันทีบนมือถือของคนที่รายงาน จากนั้นการรายงานจะถูกส่งไปที่เซิร์ฟเวอร์ และจะส่งซ้ำภายหลังถ้ามือถือออฟไลน์อยู่

ฝั่งฐานข้อมูล ใช้ตารางการรายงาน หนึ่งรายงานต่อหนึ่งคนต่อหนึ่งเนื้อหา:

```sql
create table public.reports (
  id uuid primary key default gen_random_uuid(),
  reporter_id uuid not null references auth.users (id) on delete cascade,
  target_id uuid not null,
  reason text,
  created_at timestamptz not null default now(),
  unique (reporter_id, target_id)
);
alter table public.reports enable row level security;
create policy "mes signalements" on public.reports
for insert to authenticated
with check (auth.uid() = reporter_id);
```

ใน TradaZen **ชื่อเล่นที่ถูกรายงานโดยผู้เล่นหลายคนจะถูกแทนด้วยชื่อกลางๆ** และจะไม่แสดงการรายงานให้คนที่ถูกรายงานเห็นเลย ข้อควรระวังทั่วไป: ตัวระบุที่ใช้ในการรายงานต้องไม่ให้เจ้าของเนื้อหาแก้ไขได้ ไม่อย่างนั้นเขาอาจหลบการซ่อนได้

การซ่อนอัตโนมัติไม่ได้มาแทนการตัดสินใจของคุณ เพื่อให้ทันภายใน 24 ชั่วโมง ให้ระบบแจ้งเตือนคุณทุกครั้งที่มีการรายงาน [webhook ฐานข้อมูลของ Supabase](https://supabase.com/docs/guides/database/webhooks) เรียกฟังก์ชันฝั่งเซิร์ฟเวอร์ที่ส่งข้อความหาคุณได้ คีย์ที่ใช้ลบเนื้อหาต้องอยู่บนเซิร์ฟเวอร์ ตามที่ผมอธิบายไว้ใน [คีย์ API ลับในแอป Expo](https://devoria.fr/th/blog/secret-api-key-expo-app)

### 4. การบล็อกที่มีผลทันที

ใช้ตารางการบล็อก แล้วเพิ่มกฎการเข้าถึงที่เอาเนื้อหาของคนที่ถูกบล็อกออกจากฟีดของคนที่บล็อก:

```sql
create policy "sans les bloqués" on public.posts
for select to authenticated
using (
  not exists (
    select 1 from public.blocks b
    where b.blocker_id = auth.uid() and b.blocked_id = posts.author_id
  )
);
```

ใน TradaZen เพิ่มเพื่อนได้ด้วยรหัส และลบหรือบล็อกเพื่อนได้ **เพื่อนที่ถูกบล็อกจะหายไปจากรายการ แม้จะส่งคำขอมาใหม่ก็ตาม**

### 5. ช่องทางติดต่อที่เผยแพร่ไว้และหาได้ง่าย

ใส่อีเมลติดต่อไว้ในหน้าตั้งค่าของแอป และใส่ URL ฝ่ายช่วยเหลือที่ตอบกลับจริงใน App Store Connect ใน TradaZen อีเมลฝ่ายซัพพอร์ตอยู่ในนโยบายความเป็นส่วนตัวและข้อกำหนดการใช้งาน เนื้อหาที่หน้าเหล่านี้ควรมีอยู่ใน [นโยบายความเป็นส่วนตัวของแอป](https://devoria.fr/th/blog/ios-app-privacy-policy-guide)

เรื่องสุดท้าย: ตัดสินใจว่าเนื้อหาของคนที่ลบบัญชีจะเป็นอย่างไร `on delete cascade` ข้างบนจะลบการรายงานของเขาไปพร้อมกับบัญชี วิธีทำแบบครบถ้วนอยู่ใน [การลบบัญชีบน iOS](https://devoria.fr/th/blog/ios-account-deletion-test-before-app-review)

## สิ่งที่ TradaZen เขียนไว้ในนโยบาย

กลไกเหล่านี้อธิบายไว้อย่างเปิดเผยในนโยบายความเป็นส่วนตัวของ TradaZen ซึ่งเพิ่มเติมเมื่อเดือนกันยายน 2026 ตอนที่มีลีกและเพื่อนเข้ามา: "ชื่อเล่นจะผ่านตัวกรองอัตโนมัติ คุณรายงานชื่อเล่นที่ไม่เหมาะสมในตารางอันดับได้ และลบหรือบล็อกเพื่อนได้" นโยบายเดียวกันยังระบุว่าอีเมลและบันทึกการเทรดจะไม่แสดงให้ผู้เล่นคนอื่นเห็นเด็ดขาด ภูมิหลังของแอปอยู่ใน [กรณีศึกษา TradaZen](https://devoria.fr/th/blog/tradazen-case-study-launch-iphone-app)

## ตอบ Apple อย่างไรหลังโดนปฏิเสธข้อ 1.2

บอกผู้ตรวจว่ากลไกแต่ละอย่างอยู่ตรงไหน ทั้งในคำตอบและใน review notes ฟังก์ชันเหล่านี้อยู่ในแอป ผู้ตรวจทดสอบโค้ดที่อยู่ใน build ดังนั้นต้องเตรียม build ใหม่ด้วย ขั้นตอนการ [ตอบกลับ App Review](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/reply-to-app-review-messages/) เหมือนกับกฎข้ออื่น นี่คือตัวอย่างภาษาอังกฤษ ปรับใช้ได้ โดยเก็บไว้เฉพาะสิ่งที่มีจริงในแอปของคุณ:

```text
Hello,

Thank you for your review. Build X includes the precautions
listed in Guideline 1.2:

- Terms: users accept our terms, with zero tolerance for
  objectionable content and abusive users, before posting.
- Filter: posts and usernames are checked on our server
  before other users can see them.
- Report: tap "..." on any post, then "Report".
- Block: tap "..." on any post, then "Block user". Their
  content disappears immediately.
- Reports notify us instantly; we act on them within 24 hours.
- Contact: Settings > Contact us, and our support URL.

Best regards,
```

ถ้า build ยังขาดกลไกไหนอยู่ แค่ตอบกลับไม่พอ เช่นเดียวกับ [guideline 2.1](https://devoria.fr/th/blog/guideline-2-1-app-store-rejection-fix) Apple ตัดสินจาก build ที่อยู่ในมือเขา

## เช็กลิสต์ 1.2 ก่อนส่ง

- คุณลิสต์ทุกอย่างที่ผู้ใช้โพสต์และคนอื่นมองเห็นแล้ว รวมถึงชื่อเล่น
- ข้อกำหนดการใช้งานห้ามเนื้อหาไม่เหมาะสมและการก่อกวน และแอปขอให้กด "ยอมรับ" อย่างชัดเจน
- ตัวกรองทำงานบนเซิร์ฟเวอร์ ค้นหาเป็นคำทั้งคำ และครอบคลุมภาษาในหน้าแอปของคุณ
- เนื้อหาทุกชิ้นมีปุ่ม "รายงาน" และทุกการรายงานแจ้งเตือนคุณทันที
- คุณลบเนื้อหาและแบนผู้โพสต์ได้ภายใน 24 ชั่วโมง
- การบล็อกผู้ใช้ทำให้เนื้อหาของเขาหายไปทันที
- มีอีเมลติดต่อแสดงในแอป และ URL ฝ่ายช่วยเหลือตอบกลับจริง
- แบบสอบถามระดับอายุระบุว่ามีเนื้อหาจากผู้ใช้ และมีการส่งข้อความถ้าแอปของคุณมี
- Review notes บอกว่ากลไกแต่ละอย่างอยู่ตรงไหน พร้อมบัญชีทดลอง

## แก้ปัญหาการโดนปฏิเสธก่อนส่งแอปใหม่

ถ้าแอปของคุณเพิ่งโดนปฏิเสธข้อ 1.2 [Review Kit](https://devoria.fr/th/kits/app-review) รวบรวมสิ่งที่ผมตรวจก่อนส่งทุกครั้ง พร้อม skill สองตัวที่อ่านโปรเจกต์ของคุณใน Claude Code และเตรียมคำตอบให้ถ้า Apple ปฏิเสธ ถ้าอยากให้คนช่วยดู [จองเวลาหนึ่งชั่วโมงกับผม](https://devoria.fr/th/coaching) เราจะอ่านข้อความด้วยกันและดูระบบดูแลเนื้อหาของคุณ ขั้นตอนทั้งหมดหลังโดนปฏิเสธอยู่ในหน้า [แอปโดน Apple ปฏิเสธ](https://devoria.fr/th/expertise/app-rejected-by-apple)

ถ้าคุณกำลังเตรียมปล่อยแอปแรก [ทำแบบประเมินฟรี](https://devoria.fr/th/diagnostic) ระบบจะบอกว่าควรเริ่มขั้นตอนไหนก่อน และส่งเช็กลิสต์กันโดน Apple ปฏิเสธของผมให้คุณ

ไม่มีใครรับประกันได้ว่า Apple จะอนุมัติแอปของคุณ แต่กลไกทั้งห้าอย่างนี้ที่มองเห็นได้ชัด อย่างน้อยก็ตัดเหตุผลข้อนี้ออกไปจากรายการได้

## คำถามที่พบบ่อย

### "Guideline 1.2 - Safety - User-Generated Content" หมายความว่าอะไร?

นี่คือหัวข้อการปฏิเสธในข้อความจาก Apple หมายความว่าแอปของคุณแสดงเนื้อหาที่ผู้ใช้สร้างขึ้นโดยไม่มีการป้องกันครบตามที่กำหนด ได้แก่ ตัวกรอง การรายงานที่จัดการอย่างรวดเร็ว การบล็อก ช่องทางติดต่อที่เผยแพร่ไว้ และข้อกำหนดการใช้งานที่ผู้ใช้กดยอมรับ

### ชื่อเล่นในตารางอันดับนับเป็นเนื้อหาจากผู้ใช้ไหม?

ข้อความของ Apple ไม่ได้บอกไว้ ผมถือว่านับ เพราะชื่อเล่นตั้งได้อิสระและผู้เล่นคนอื่นมองเห็น ใน TradaZen ชื่อเล่นในตารางอันดับจะผ่านตัวกรอง ถูกรายงานได้ และถูกแทนด้วยชื่อกลางๆ ถ้ามีปัญหา

### ต้องจัดการการรายงานภายใน 24 ชั่วโมงจริงไหม?

นั่นคือสิ่งที่ข้อความปฏิเสธของ Apple ขอ ส่วนข้อความของกฎพูดถึงการตอบสนองอย่างรวดเร็ว ตัวกรองอัตโนมัติจึงไม่พอ ต้องมีคนลบเนื้อหาและแบนผู้โพสต์ การซ่อนอัตโนมัติหลังถูกรายงานหลายครั้งช่วยให้คุณรับมือได้ระหว่างรอ

### ข้อกำหนดการใช้งานต้องให้กดยอมรับในแอปไหม?

เป็นวิธีที่ปลอดภัยที่สุด ข้อความปฏิเสธขอให้ผู้ใช้ยอมรับข้อกำหนดที่ไม่ยอมให้มีทั้งเนื้อหาไม่เหมาะสมและผู้ใช้ที่ก่อกวน ลิงก์ท้ายหน้าไม่ได้พิสูจน์ว่าผู้ใช้ยอมรับ หน้าจอที่มีปุ่ม "ยอมรับ" ก่อนการโพสต์ครั้งแรกจะไม่เหลือข้อสงสัย

### แอปแชตนิรนามผ่าน guideline 1.2 ได้ไหม?

ข้อความปัจจุบันระบุว่าแชตสุ่มหรือแชตนิรนามเป็นหนึ่งในการใช้งานที่ไม่มีที่ยืนบน App Store แอปที่ใช้เพื่อสิ่งนี้เป็นหลักอาจถูกถอดออกโดยไม่แจ้งล่วงหน้า แม้จะมีตัวกรอง การรายงาน และการบล็อกก็ตาม


## โปรเจกต์ของคุณ

[Review Kit](https://devoria.fr/th/kits/app-review): เช็กลิสต์รีวิว App Store ของผม การถูก Apple ปฏิเสธที่ผมแก้ไขแล้ว เช็กลิสต์ของ Google Play และ skill ของ Claude Code อีกสามตัว ฿1,849

[iOS & Android Kit](https://devoria.fr/th/kits/ios): สร้างแอป iPhone และ Android ของคุณด้วย Claude Code: โค้ดเริ่มต้นจากแอปของผม เส้นทางจนถึงสโตร์ และชุดคิททั้งหมด ฿3,699

[แบบประเมิน: อะไรกั้นคุณไว้จากแอป iPhone ของคุณ](https://devoria.fr/th/diagnostic): 7 คำถาม 60 วินาที: รู้ว่าอะไรที่ขวางคุณจากการเผยแพร่แอป iPhone จริง ๆ พร้อมเส้นทาง 4 ขั้นตอนและชุดคิทที่เหมาะกับคุณ
