In-App Purchase (IAP) เป็นกลไกการซื้อภายในแอปที่อนุญาตให้ผู้ใช้ซื้อสินค้าและบริการดิจิทัลภายในแอปพลิเคชันมือถือได้โดยตรง แพลตฟอร์ม iOS และ Android มี API ในตัวสำหรับประมวลผลการชำระเงินโดยไม่ต้องส่งข้อมูลบัตรธนาคารไปยังนักพัฒนา ตามเอกสารของ Apple StoreKit IAP ประมวลผลธุรกรรมมูลค่ากว่า 500 พันล้านดอลลาร์ต่อปีผ่าน App Store และ Google Play
ประเด็นสำคัญ
In-App Purchase (IAP) เป็นเทคโนโลยีที่อนุญาตให้ขายสินค้าและบริการดิจิทัลภายในแอปพลิเคชันมือถือ การชำระเงินถูกประมวลผลผ่าน App Store (บน iOS) หรือ Google Play (บน Android) ซึ่งเรียกเก็บค่าคอมมิชชันสำหรับการดำเนินการธุรกรรม นักพัฒนาได้รับเงินหลังจากหักค่าคอมมิชชันของร้านค้า
Apple เรียกเก็บค่าคอมมิชชัน 30% (15% สำหรับธุรกิจขนาดเล็กที่มีรายได้ไม่เกิน 1 ล้านดอลลาร์) Google Play ก็เรียกเก็บ 30% เช่นกัน (15% สำหรับรายได้ของนักพัฒนาหนึ่งล้านดอลลาร์แรก) ตั้งแต่ปี 2024 Google กำลังทดสอบโปรแกรม User Choice Billing ซึ่งอนุญาตให้นักพัฒนาใช้ระบบการชำระเงินทางเลือก
IAP เป็นสิ่งจำเป็นสำหรับการขายสินค้าดิจิทัลในแอปตามนโยบายของ App Store และ Google Play สินค้าทางกายภาพ บริการ (เรียกแท็กซี่ ส่งอาหาร) และการชำระเงินแบบเพียร์ทูเพียร์สามารถใช้ระบบการชำระเงินของบุคคลที่สามได้
App Store และ Google Play รองรับ In-App Purchase สามประเภทหลัก แต่ละประเภทออกแบบมาสำหรับโมเดลการสร้างรายได้ที่แตกต่างกัน การเลือกประเภทผลิตภัณฑ์ส่งผลต่อตรรกะการกู้คืนการซื้อ การจัดการการสมัครสมาชิก และพฤติกรรมเมื่อติดตั้งแอปใหม่
การซื้อแบบสิ้นเปลือง เป็นรายการที่สามารถซื้อได้หลายครั้งและถูกใช้ไประหว่างการใช้งาน ตัวอย่างทั่วไป: สกุลเงินในเกม (เหรียญ, อัญมณี), ชีวิตพิเศษ, บูสเตอร์, พาวเวอร์อัปแบบสิ้นเปลือง สินค้าสิ้นเปลืองจะไม่ถูกกู้คืนเมื่อติดตั้งแอปใหม่ — นักพัฒนาจัดการยอดคงเหลือของผู้ใช้แต่ละคนบนเซิร์ฟเวอร์ของตนเอง
การซื้อแบบไม่สิ้นเปลือง เป็นรายการที่ซื้อครั้งเดียวและคงอยู่ตลอดไป ตัวอย่าง: เวอร์ชันเต็มของแอป, เลเวลพรีเมียม, การปลดล็อกฟิลเตอร์, การลบโฆษณา ผลิตภัณฑ์แบบไม่สิ้นเปลือง สามารถกู้คืนได้ ผ่าน Restore Purchases API: หลังจากติดตั้งใหม่ ผู้ใช้สามารถรับรายการที่ซื้อก่อนหน้านี้ได้โดยไม่ต้องชำระเงินอีกครั้ง
การสมัครสมาชิกแบบต่ออายุอัตโนมัติ คือการชำระเงินเป็นงวดสำหรับการเข้าถึงเนื้อหาหรือบริการตามระยะเวลาที่กำหนด (สัปดาห์, เดือน, ปี) การสมัครสมาชิกจะต่ออายุโดยอัตโนมัติจนกว่าผู้ใช้จะยกเลิกในการตั้งค่าบัญชี ร้านค้าให้การแจ้งเตือนเซิร์ฟเวอร์ (App Store Server Notifications, Google Play Developer Notifications) เกี่ยวกับการเปลี่ยนแปลงสถานะการสมัครสมาชิก: การต่ออายุ, หมดอายุ, การคืนเงิน
การตั้งค่า In-App Purchase เริ่มต้นในแผงนักพัฒนา: App Store Connect สำหรับ iOS และ Google Play Console สำหรับ Android สำหรับแต่ละผลิตภัณฑ์ จะระบุรหัสผลิตภัณฑ์ (Product ID), ชื่อ, คำอธิบาย, ประเภท และราคาในดอลลาร์สหรัฐฯ โดยแปลงเป็นสกุลเงินท้องถิ่นโดยอัตโนมัติ หลังจากสร้างแล้ว ผลิตภัณฑ์จะผ่านการตรวจสอบของร้านค้า
ใน App Store Connect ผลิตภัณฑ์ IAP ถูกสร้างขึ้นในส่วน Features → In-App Purchases สำหรับแต่ละผลิตภัณฑ์ จะเลือกประเภท (consumable, non-consumable, auto-renewable subscription, non-renewing subscription) และกรอกชื่อที่แปลแล้ว สำหรับการสมัครสมาชิก จะมีการกำหนดค่ากลุ่มการสมัครสมาชิก (Subscription Groups) เพิ่มเติม — กลุ่มของการสมัครสมาชิกที่สามารถใช้แทนกันได้
ใน Google Play Console ผลิตภัณฑ์ที่มีการจัดการจะถูกกำหนดค่าในส่วน Monetise → Products → In-app products Google ใช้คำว่า Managed Product (เทียบเท่ากับ non-consumable) และ Subscription สำหรับการซื้อแบบสิ้นเปลืองบน Android จะใช้แฟลก consume แยกต่างหากซึ่งรีเซ็ตผลิตภัณฑ์สำหรับการซื้อซ้ำ
การตรวจสอบผลิตภัณฑ์ IAP โดยทั่วไปใช้เวลา 24–48 ชั่วโมง ใน App Store และไม่กี่ชั่วโมงใน Google Play การเปลี่ยนแปลงราคามีผลทันทีโดยไม่ต้องตรวจสอบซ้ำ ไม่สามารถเปลี่ยนแปลงรหัสผลิตภัณฑ์ได้หลังจากสร้าง — สามารถลบและสร้างใหม่เท่านั้น
การตรวจสอบใบเสร็จ เป็นขั้นตอนบังคับในการประมวลผล In-App Purchase แอปพลิเคชันไคลเอ็นต์ส่งใบเสร็จไปยังเซิร์ฟเวอร์ของคุณ เซิร์ฟเวอร์ตรวจสอบผ่าน API ของ Apple (https://buy.itunes.apple.com) หรือ Google (https://androidpublisher.googleapis.com) และหลังจากตรวจสอบสำเร็จจึงมอบสินค้าให้กับผู้ใช้
หากไม่มีการตรวจสอบฝั่งเซิร์ฟเวอร์ ผู้โจมตีสามารถปลอมแปลงการตอบสนองของร้านค้าและรับสินค้าได้ฟรี การตรวจสอบฝั่งไคลเอ็นต์ ไม่ปลอดภัยเพราะทำงานในสภาพแวดล้อมที่ผู้ใช้ควบคุม การตรวจสอบฝั่งเซิร์ฟเวอร์รับประกันว่าใบเสร็จเป็นของแท้และการชำระเงินสำเร็จ สำหรับ Apple การตรวจสอบทำผ่านปลายทาง verifyReceipt (โปรดักชันหรือแซนด์บ็อกซ์) สำหรับ Google — ผ่าน Android Publisher API ร้านค้าทั้งสองส่งคืนการยืนยันในรูปแบบ JSON
Apple ส่งคืนข้อมูลการซื้อในใบเสร็จ: product_id, transaction_id, purchase_date, expiration_date (สำหรับการสมัครสมาชิก) Google ส่งคืนฟิลด์ที่คล้ายกันผ่าน Purchases.products.get หรือ Purchases.subscriptions.get API เซิร์ฟเวอร์ควรจัดเก็บ transaction_id ของใบเสร็จแต่ละใบและปฏิเสธคำขอซ้ำที่มี ID เดียวกันเพื่อป้องกันการโจมตีแบบรีเพลย์
การรวม In-App Purchase จำเป็นต้องเชื่อมต่อไลบรารีของแพลตฟอร์ม: StoreKit 2 บน iOS และ Billing Library 7+ บน Android API อนุญาตให้ขอรายการผลิตภัณฑ์ เริ่มการซื้อ จัดการผลลัพธ์ และกู้คืนรายการที่ซื้อก่อนหน้านี้
import StoreKit
func purchaseProduct(productID: String) async throws {
guard let product = try await Product.products(for: [productID]).first else { return }
let result = try await product.purchase()
switch result {
case .success(let verification):
let transaction = try verification.payloadValue
await validateReceipt(transaction)
await transaction.finish()
default:
break
}
}
import com.android.billingclient.api.BillingClient
import com.android.billingclient.api.BillingFlowParams
val billingClient = BillingClient.newBuilder(context)
.setListener { billingResult, purchases ->
if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
purchases?.forEach { purchase ->
validateReceipt(purchase)
}
}
}
.build()
val params = BillingFlowParams.newBuilder()
.setProductDetails(productDetails)
.build()
billingClient.launchBillingFlow(activity, params)
const response = await fetch('https://buy.itunes.apple.com/verifyReceipt', {
method: 'POST',
body: JSON.stringify({
'receipt-data': receiptBase64,
'password': 'SHARED_SECRET'
})
})
const data = await response.json()
if (data.status === 0) {
// ยืนยันใบเสร็จแล้ว — กำลังมอบสินค้า
await grantProduct(data.receipt.product_id)
}
การสร้างรายได้ ผ่าน In-App Purchase ต้องมีกลยุทธ์การกำหนดราคาและ UX ที่คิดมาอย่างดี ผู้ใช้มีแนวโน้มที่จะซื้อครั้งแรกมากขึ้นหากได้รับแพ็กเริ่มต้นที่น่าดึงดูดในราคาต่ำ Apple และ Google แนะนำให้แสดงราคาผลิตภัณฑ์ก่อนขั้นตอนยืนยันการซื้อ
การแนะนำการสมัครสมาชิก เป็นขั้นตอนการเปลี่ยนผู้ใช้ที่สำคัญ แสดงคุณค่าของการสมัครสมาชิกให้ผู้ใช้เห็นก่อนขอชำระเงิน: ระยะเวลาทดลองใช้ฟรี การเปรียบเทียบแผน รายการสิทธิประโยชน์ จากการวิจัย ระยะเวลาทดลองใช้ฟรีเพิ่มการเปลี่ยนเป็นผู้ใช้ที่ชำระเงินได้ 25–40%
การกู้คืนการซื้อ เป็นสิ่งจำเป็นสำหรับผลิตภัณฑ์แบบไม่สิ้นเปลืองและการสมัครสมาชิก ปุ่มกู้คืนควรเข้าถึงได้ในการตั้งค่าแอปหรือบนหน้าจอชำระเงิน Google และ Apple อาจปฏิเสธแอปหากไม่ได้ implement การกู้คืนการซื้อสำหรับประเภท IAP ที่เกี่ยวข้อง
ระยะเวลาผ่อนผัน (Grace Period) เป็นระยะเวลาเลื่อนการชำระเงินสำหรับการสมัครสมาชิกในระหว่างที่ผู้ใช้ยังคงเข้าถึงได้หลังจากชำระเงินไม่สำเร็จ iOS และ Android รองรับระยะเวลาผ่อนผันสูงสุด 30 วัน การเปิดใช้งานระยะเวลาผ่อนผันช่วยลดอัตราการสูญเสียสมาชิก (churn rate) ลง 10–15%
การทดสอบ A/B ราคา IAP เป็นแนวปฏิบัติสำคัญในการสร้างรายได้ App Store Connect รองรับการกำหนดราคาท้องถิ่น (Price Tiers) ที่สามารถเปลี่ยนราคาได้โดยไม่ต้องตรวจสอบซ้ำ Google Play Console อนุญาตให้กำหนดค่าได้สูงสุด 5 แผนพื้นฐานที่มีราคาต่างกันสำหรับผลิตภัณฑ์สมัครสมาชิกหนึ่งรายการ แนะนำให้ทดสอบอย่างน้อยสองจุดราคา: ปัจจุบันและใหม่ การทดสอบควรดำเนินการเป็นเวลา 2–4 สัปดาห์กับกลุ่มตัวอย่างอย่างน้อย 1,000 ผู้ใช้ต่อจุดราคา
การตรวจสอบร้านค้าและการจัดการการปฏิเสธ เป็นขั้นตอนบังคับในการเผยแพร่แอปที่มี IAP Apple ตรวจสอบแอปที่มีการสมัครสมาชิกแบบต่ออายุอัตโนมัติอย่างละเอียดเป็นพิเศษ: คุณต้อง提供บัญชีทดสอบที่มีการสมัครสมาชิกที่ใช้งานอยู่ แสดงหน้าจอยกเลิกการสมัครสมาชิก และ implement การกู้คืนการซื้อ Google Play เข้มงวดน้อยกว่าแต่ต้องการการยืนยันสิทธิ์ในเนื้อหาดิจิทัล แนะนำให้เพิ่มบันทึกสำหรับผู้ตรวจสอบ (Review Notes) ที่อธิบายตรรกะ IAP
คำถามที่พบบ่อย
In-App Purchase (IAP) เป็นกลไกการซื้อสินค้าดิจิทัลภายในแอปมือถือ การชำระเงินถูกประมวลผลผ่าน App Store หรือ Google Play ซึ่งหักค่าคอมมิชชัน 30% (15% สำหรับธุรกิจขนาดเล็ก) และโอนส่วนที่เหลือให้นักพัฒนา
IAP มีสามประเภท: สิ้นเปลือง (ใช้หมด — เหรียญ, ชีวิต), ไม่สิ้นเปลือง (ถาวร — ลบโฆษณา, เวอร์ชันเต็ม) และการสมัครสมาชิกแบบต่ออายุอัตโนมัติ (เป็นงวด — เข้าถึงเนื้อหาตามระยะเวลา) การซื้อแบบไม่สิ้นเปลืองรองรับการกู้คืน
วิธีการป้องกันหลักคือ การตรวจสอบใบเสร็จฝั่งเซิร์ฟเวอร์ ไคลเอ็นต์ส่งใบเสร็จไปยังเซิร์ฟเวอร์ของคุณ และเซิร์ฟเวอร์ตรวจสอบผ่าน API ของ Apple หรือ Google หากไม่มีการตรวจสอบฝั่งเซิร์ฟเวอร์ ผู้โจมตีสามารถปลอมแปลงการตอบสนองของร้านค้าและรับสินค้าได้ฟรี
การตั้งค่า IAP รวมถึง: การสร้างผลิตภัณฑ์ใน App Store Connect หรือ Google Play Console, การเชื่อมต่อ StoreKit (iOS) หรือ Billing Library (Android), การ implement ขั้นตอนการซื้อ และการตรวจสอบใบเสร็จฝั่งเซิร์ฟเวอร์ ผลิตภัณฑ์แต่ละรายการผ่านการตรวจสอบของร้านค้า
Apple เรียกเก็บ 30% (15% สำหรับนักพัฒนาที่มีรายได้ไม่เกิน 1 ล้านดอลลาร์) Google Play ก็เรียกเก็บ 30% เช่นกัน (15% สำหรับ 1 ล้านแรก) ตั้งแต่ปี 2024 Google กำลังทดสอบระบบการชำระเงินทางเลือกผ่าน User Choice Billing นักพัฒนาสามารถเลือกผู้ให้บริการชำระเงินของบุคคลที่สามได้ แต่ต้องจ่ายค่าธรรมเนียมบริการ 11–12% ให้กับ Google
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม