Products/Subscriptions
ประเภทของ SKU
ของที่เราขายอยู่ภายใน App เราไม่ว่าจะเป็น item หรือ package ต่างๆ เราแบ่งได้เป็น 2 ประเภทด้วยครับ
ซื้อเป็นครั้งๆ และสามารถซื้อซ้ำๆ ได้ แบบนี้ Google จะเรียนว่า In-app products
สมัครบริการและจ่ายเงินต่อเนื่องอาจจะเป็น ต่อเดือน ต่อสัปดาห์ หากยังไม่ยกเลิกไม่ควรซื้อซ้ำได้ แบบนี้ Google จะเรียกว่า Subscriptions
ไม่ว่าจะเป็นแบบไหนของที่เราขายอยู่ใน App จะต้อง Setup อยู่บน Google Play Console ด้วย โดยที่แต่ละ SKU จะอยู่ภายใต้ App package name เช่นเรามี App 2 version สำหรับ Mobile และ Tablet แบบนี้ เราจะต้องเข้าไป Setup SKU ทั้ง 2 package name เลยครับ
In-app products
ในการ Setup SKU ประเภทนี้ทำได้โดยเข้าไปที่ Google Play Console แล้วเลือก package name ของ App ที่ต้องการจะ Setup SKU จากนั้นเลือก menu Products -> In-app products และกด Create product
รายละเอียดที่เราจะต้องกำหนดจะมี
Product ID : ต้องเป็น id ของ SKU ต้องเป็น unique id และต้องเป็น lower case ครับ
Product details
Name : เป็นชื่อของ SKU ที่จะแสดงที่หน้า Google In-app ให้ user เห็นด้วยครับ
Description : เป็นรายละเอียดของ SKU ที่จะแสดงที่หน้า Google In-app ให้ user เห็นด้วยครับ
Price
Default price : เป็นราคาที่จะเรียกเก็บเงิน user ครับ ราคาต่ำสุดที่กำหนดได้ตอนนี้อยู่ที่ 7 บาทครับ (จริงๆ มีวิธีการทำ pricing template ด้วย ไวมีโอกาสจะมาเล่าให้ฟังครับ)
Multi-quantity : อันนี้เป็น checkbox ให้กำหนดว่าใน 1 transaction ที่ user submit มานั้นจะมีจำนวนมากกว่า 1 หรือไหม (ส่วนนี้ผมยังไม่เคยลองครับ)
Tax and compliance : นั้นเป็นเรื่องของภาษีซึ่งเป็น optional

Subscriptions
ในการ Setup SKU ประเภทนี้ทำได้โดยเข้าไปที่ Google Play Console แล้วเลือก package name ของ App ที่ต้องการจะ Setup SKU จากนั้นเลือก menu Products -> Subscriptions และกด Create subscription
รายละเอียดที่เราจะต้องกำหนดจะมี
Product ID : ต้องเป็น id ของ SKU ต้องเป็น unique id และต้องเป็น lower case ครับ
Subscription details
Name : เป็นชื่อของ SKU ที่จะแสดงที่หน้า Google In-app ให้ user เห็นด้วยครับ
Description : เป็นรายละเอียดของ SKU ที่จะแสดงที่หน้า Google In-app ให้ user เห็นด้วยครับ
Benefits : เป็นรายละเอียดเพิ่มเติมสำหรับบอก user ครับ เป็น optional
Price
Billing period : เป็นตัวกำหนดรอบบิลครับ เมื่อครบกำหนดตามที่เรากำหนดแล้วระบบจะเรียกเก็บเงินลูกค้าใหม่ให้ทันที(recurring charge)
Default price : เป็นราคาที่จะเรียกเก็บเงิน user ครับ ราคาต่ำสุดที่กำหนดได้ตอนนี้อยู่ที่ 7 บาทครับ (จริงๆ มีวิธีการทำ pricing template ด้วย ไวมีโอกาสจะมาเล่าให้ฟังครับ)
Subscription options
Free trial : เป็นตัวระบุสำหรับให้ user สามารถทดสอบได้ กรณีกำหนดเป็น enabled จะมีให้เรากำหนดเพิ่มเติมว่าจะให้ trial จำนวนกี่วัน หลังจากครบกำหนดวัน trial แล้ว Google จะเรียกเก็บเงิน user ให้ทันที (ต่ำสุดได้แค่ 3 วันครับ)
Introductory price : เป็นตัวกำหนดราคาเริ่มต้นครับ มีให้กำหนด 3 option ด้วยกัน
None : ก็คือไม่กำหนดครับ Subscribe ครั้งแรกและการเรียกเก็บเงินครั้งต่อๆ ไปก็จะเรียกเก็บเท่ากันหมด
Single Payment : เมื่อ Subscribe ครั้งแรกและอยู่ในช่วงเวลาที่กำหนด(Duration - Days/Weeks/Months) จะเรียกเก็บเงินตามที่กำหนด เมื่อเลยช่วงเวลานี้ไปแล้วจะเรียกเก็บเงินตามจริงครับ
Recurring Payment : เมื่อ Subscribe ครั้งแรกละอยู่ในรอบบิลตามจำนวนปีที่กำหนด(Billing periods yearly) จะเรียกเก็บเงินตามที่กำหนด เมื่อเลยช่วงปีที่กำหนดแล้วจะเรียกเก็บเงินตามจริงครับ
Grace period : เป็นตัวกำหนดว่าจะมีช่วงเวลาผ่อนผันให้กับ user กรณีเรียกเก็บเงินไม่สำเร็จหรือเปล่า เช่นกรณี Subscribe ไปแล้วเข้าสู่รอบบิลที่ 2 เมื่อระบบทำการต่ออายุให้(Renew) แต่ไม่สามารถเรียกเก็บเงินจาก user ได้ จะยังคงยอมให้ user มีสิทธิ์มาแก้ไขช่องทางชำระเงิน(Payment method) เพื่อให้เรียกเก็บเงินได้อีกครั้ง ตามวันที่กำหนด
Resubscribe : หลังจาก user ได้ cancel subscribe ไปแล้ว จะให้ user สามารถ subscribe ได้เองโดยตรงผ่าน Play Store หรือไม
Tax and compliance นั้นเป็นเรื่องของภาษีซึ่งเป็น optional


Integration
หัวข้อนี้จะพูดถึงแค่ในส่วน Android app ก่อนนะครับ ในส่วนของ Backend นั้นจะเล่าต่อในหัวข้อถัดไป(Realtime Notification) นะครับ
ผมคงไม่ได้พาลง coding ที่ละ step นะครับ แต่จะเล่าถึง flow หลักๆ ที่ต้องมีและต้อง handle ครับ หากต้องการลง detail ระดับ coding เลยผมแนะนำท google official document เลยครับ
📖 https://developer.android.com/google/play/billing/integrate
Life of a purchase
เริ่มด้วยวงจรชีวิตมันก่อนเลยครับเป็นสิ่งที่ Android app ตอน implement ต้องเจอแน่นอน
แสดง SKU ที่ User สามารถ ซื้อหรือสมัครได้
แสดง Google dialog สำหรับให้ User ชำระเงิน
Verify รายการที่ซื้อด้วย Backend ของระบบเราเอง
ให้สิทธิ์ User ได้รับของหรือเนื้อหาที่ User ต้องได้รับ
กรณีของ SKU ประเภท Subscriptions จะมี state ที่จะเกิดขึ้นได้เพิ่มเติมเนื่องจากจะมีเรียกเก็บเงินในรอบบิลถัดไป(Renew) เรื่อยๆ จนกว่า User จะทำการ Cancel ด้วย
Active: state ปกติ user สามารถเข้าถึงรายการที่สมัครได้ปกติ
Cancelled: state user ได้ทำการ cancelled แล้วผ่าน Google Play Store แต่ user ยังสามารถเข้าถึงเนื้อหาที่สมัครได้จนกว่าจะหมดอายุ
In grace period: state ที่เกิดหลังจากเรียกเก็บเงินครั้งที่ 2 เป็นต้นไป(Renew) แต่ Google ไม่สามารถเก็บเงินได้ User ยังสามารถเข้าถึงเนื้อหาได้ และสามารถแก้ไขช่องทางชำระเงินได้ เพื่อให้ Google ได้เรียกเก็บเงินซ้ำอีกครั้ง (อย่างที่เล่าไปตอนต้น ส่วนนี้เราต้อง enabled ตอนที่ setup SKU ด้วยนะครับ)
On hold: state ที่เกิดหลังจากเรียกเก็บเงินครั้งที่ 2 เป็นต้นไป(Renew) แต่ Google ไม่สามารถเก็บเงินได้ User ไม่สามารถเข้าถึงเนื้อหาได้ และสามารถแก้ไขช่องทางชำระเงินได้ เพื่อให้ Google ได้เรียกเก็บเงินซ้ำอีกครั้ง
Paused: state ที่ user ต้องการให้ระบบ recurring charge หยุดเรียกเงินชั่วคราว User ไม่สามารถเข้าถึงเนื้อหาได้ จนกว่าจะหมดระยะเวลา Paused(featrue นี้หากไม่ต้องการ เราสามารถ configuare ที่ google play console เพื่อ disable ได้ครับ)
Expired: state ที่เกิดหลังจาก user ได้ cancelled แล้ว ไม่สามารถเข้าถึงเนื้อหาที่สมัครได้แล้วเพราะหมดอายุแล้ว
Connect to Google Play
Android app จะต้อง Connect กับ Google Play Billing Lib ที่ Google ได้เตรียมไวให้ เมื่อถึงกระบวนการที่จะต้องให้ User ชำระเงินแล้ว จะต้อง Query SKU detail เพื่อ validate state ของ SKU นั้นๆ ว่ามีอยู่ state ไหน เช่นชำระเงินแล้วนะ, รอชำระเงิน รวมถึงเราจะต้องเอา detail ของ SKU นั้นๆ ไปใช้ใน step ต่อไปด้วยครับ
Launch the purchase flow
หากผ่าน Step validate ต่างๆ มาหมดแล้ว ก็จะต้องแสดง Dialog Google In-app ของ Google ขึ้นมา เพื่อให้ User กำหนด Payment method หรือ เลือก Payment Method ที่ต้องการใช้ชำระเงิน
หากผ่าน Step นี้แล้ว App จะได้ Callback กลับมาพร้อมกับ PurchaseToken ซึ่ง PurchaseToken นี้ถือว่าเป็น Value ที่สำคัญมากๆ เพราะคือ Primary Key เลยครับ
กรณี One-time product
PurchaseToken จะเปลี่ยนใหม่ทุกครั้งที่ทำการซื้อใหม่
กรณี Subscription
PurchaseToken จะเปลี่ยนต่อเมื่อซื้อใหม่เท่านั้น เท่ากับว่าทุกครั้งที่เกิดการ renew เราสามารถใช้ purchase token นี้ในการอ้างอิงถึง account ในระบบเราได้ว่าต้องต่ออายุในการเข้าถึงเนื้อหานั้นๆ ที่ account ไหน

Handling purchases made outside your app
สิ่งที่อยากจะบอกไว้ เพราะอาจจะคิดไม่ถึง
กรณี User ได้ Subscribe ครั้งแรกบน App เราไปแล้ว หากเรา Enabled "Resubscribe" ของ SKU นั้นตอน Setup จะทำให้ User สามารถ Subscribe ได้ใหม่อีกครั้งโดยตรงผ่าน Google Play Store ครับ ใช่ครับ ผ่าน Google Play Store นะครับ ไม่ได้ผ่าน App เรา
ดังนั้นการ Implement ทั้งในส่วน Android app และ Backend นั้นเราต้องคำนึงถึงเรื่องนี้ไวด้วยครับ
Reference
Last updated
Was this helpful?