web analytics

Android Code : ทำ In App Billing ซื้อของหรือไอเท็มในแอป

cover

สวัสดีครับ ผมมีโอกาสได้ทำเกี่ยวกับ In App Billing ขอเรียกสั้นๆว่า IAB หรือก็คือ การซื้อของในแอป ซื้อไอเท็ม ซื้อเหรียญในเกม จริงๆคำที่คุ้นหูกว่า คือ In-app Purchase แต่จะซ้ำของ iOS เพราะเขาทำมาก่อน ดังนั้น Google เลยเรียก In-app Billing แทน บทความนี้เลยจะบันทึกการทำ IAB สำหรับ android ซึ่งจริงๆการทำ IAB ปกติตามแบบฉบับจริงๆ จะยุ่งยากมาก แต่ว่าโลกก็งดงามสดใสขึ้นมาได้สักพักแล้ว เพราะมีคนทำไลบรารี่ให้ใช้ ดังนั้นเราจะมาใช้ไลบรารี่กัน

สามารถอ่าน รายละเอียดทั้งหมดได้จากตัว library บน github เลยได้เช่นกัน
https://github.com/anjlab/android-inapp-billing-v3

 

สร้างผลิตภัณฑ์

ก่อนอื่นต้องมี product ให้ซื้อก่อน เข้าไปที่ Developer console (ใครยังไม่มีบัญชี ให้ไปสมัครก่อนนะ)
https://play.google.com/apps/publish/

ไปที่เมนูผลิตภัณฑ์ในแอปพลิเคชัน ถ้ายังไม่มีก็สร้างก่อน

18-1

 

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

19

จัดการตั้งชื่อ ใส่รายละเอียด

21

 

ใส่ราคา โดยมันจะมีการคำนวณราคาของเงินสกุลอื่นให้อัตโนมัติ แถมยังปัดให้เลขสวยในสกุลเงินอื่นๆด้วย

เสร็จแล้วก็ทำการบันทึก แล้วก็กดให้มันเปิดใช้งาน (Active)

22

และจะใช้ 1-2 ชั่วโมง รอให้ active

 

Public key

สิ่งที่ต้องใช้อีกตัวคือ key ที่ระบุว่าเป็นแอปเรา ให้เข้าไปที่ เมนู บริการและ API จะเห็นว่ามี key Base-64 encoded RSA ยาวๆ
ให้ทำการ copy ไว้

 

23

เพิ่ม Dependency

ใน Android Studio อันเชิญไลบรารี่ IAB v3 เข้ามาในโปรเจค ที่ build.gradle

 

เพิ่ม Billing Permission

ที่ AndroidManifest.xml เพิ่ม permission เกี่ยวกับการชำระเงิน

 

เริ่มต้น

ทำการกำหนดค่าตัวแปร global ดังนี้
PRODUCT_ID คือ ไอดี product ที่เราตั้งไว้
LICENSE ก็คือ public key base-64 ยาวๆ
MERCHANT_ID  มันคือ ไอดีพ่อค้าของเรา เอาไว้การป้องกันการปลอมแปลง เผื่อมีคนมาเกรียนปลอม response แกล้งว่าส่งมาจาก Google Play (ไม่ต้องใส่ก็ได้ แต่แนะนำให้ใส่)

วิธีการ หา MERCHANT_ID คือ เข้าไปที่
https://payments.google.com/merchant 

แน่นอนว่าใครยังไม่มีก็ต้องสมัครก่อน
ให้ไปที่ setting แล้วหา merchantId จากนั้นก็ทำมาใส่ในตัวแปร MERCHANT_ID

จะได้ตัวแปรเบื้องต้นดังนี้

 

ก่อนเรียก Billing จริงๆ ให้ตรวจสอบก่อนว่า อุปกรณ์รองรับ IAB หรือไม่ ถ้าไปรันใน google play เก่าๆ หรือใน Emulator ที่ไม่มี Google Play อาจจะแครชได้

 

ที่ onCreate ของ Activity ก็เรียกให้ทำการ initBilling หรือตั้งค่าให้กับ Billing
onProductPurchased() จะถูกเรียกเมื่อ หลังจากกดซื้อของแล้ว
onPurchaseHistoryRestored() จะถูกเรียกทันทีหลังจากโหลดข้อมูลการซื้อจาก Google
onBillingError() จะถูกเรียกเมื่อ เกิดปัญหา เช่น อินเตอร์เน็ตเสีย
onBillingInitalized() จะถูกเรียกเมื่อ พร้อมให้ซื้อแล้ว

 

เมื่อสร้าง instance สำหรับ IAB แล้วก็ทำการเรียกให้โหลดสินค้าของลูกค้าคนนี้มาจาก Google เก็บไว้ใน cache

เมื่อเรียก method นี้ onPurchaseHistoryRestored() ของ bp จะถูกเรียกด้วย พร้อม parameter 2 ตัว เป็น list ของ Product ID ที่เคยซื้อ

 

ผลจากการตรวจสอบการสั่งซื้อ จะถูกส่งมาที่ onActivityResult ของ Activity ก็ให้เรียก method ดังนี้

 

แต่หากใครเอา bp ไปไว้ใน Fragment ก็ต้องใส่ สองที่ โดยโค้ดด้านบนจะใส่ที่ Fragement
และโค้ดด้านล่างนี้ใส่ที่ Activity หรือก็คือ activity ได้รับ result ก็ส่งต่อไปให้ fragment นั่นแหละ

 

แสดงรายละเอียดผลิตภัณฑ์

ต่อมาหลังจากสร้าง Product แล้ว จะลองนำพวกราคา มาแสดงในแอปกัน
มี method get ให้ดึงข้อมูลหลายแบบ

2

 

สิ่งที่ต้องรู้คือ คลาสของข้อมูล รายละเอียด product คือคลาส SkuDetail
ดังนั้นเมื่อเรียก getPurchaseListingDetails() เพื่อดึงข้อมูลมาแสดง จะได้ SkuDetail มา
จะประกอบด้วย ชื่อ ราคา รายละเอียด สกุลเงิน (ตามเครื่องผู้ใช้)

3

 

อีกตัวคือคลาส TransactionDetail อันนี้จะเป็นข้อมูลประเภทการซื้อ
เช่นประวัติการซื้อ ซื้อเมื่อไหร่ orderId อะไรเป็นต้น
ถ้าอยากแสดงประวัติการซื้อก็เรียก getPurchaseTransactionDetails()

ลองเขียนปุ่มที่กดแล้วจะ log ข้อมูลชื่อ ราคา ออกมา

 

การซื้อผลิตภัณฑ์

ซื้อขาด เรียกใช้คำสั่ง purchase และใส่ product id ลงไป

 

ซื้อแบบซื้อได้เรื่อยๆ

 

ซื้อแบบ subscribe และต้องเป็น PRODUCT ของ แบบ subscribtion ด้วย

แบบ subscription คือ จะเก็บเงินรายเดือน / รายปี

 

แน่นอนว่าพอซื้อเสร็จสิ้นแล้ว method onPriductPurchased() ใน bp จะถูกเรียก เราก็ทำส่งสินค้าให้ผู้ใช้ เช่น ถ้าผู้ใช้กดซื้อเพรชก็เพิ่มเพรชให้ โดยสามารถเช็คจาก parameter productId ว่าซื้ออะไรนั่นเอง

 

ทดสอบการซื้อ

ต่อมาก็ต้องมาลองซื้อกันครับ หลักการง่ายๆคือ
อัพโหลด apk Releasedไปที่ ALPHA/BETA channel และจะพบว่ามีลิงค์ URL ให้เข้าร่วม ให้ copy ลิงค์นี้ไว้

4
เอาลิงค์ ส่งให้อีกเครื่อง ที่ไม่ใช่บัญชี Dev ของ IAB นี้
เอาเครื่องนั้น กดเข้าลิงค์ มันจะเปิดเว็บขึ้นมา ให้กดปุ่มเข้าร่วม beta testing ของแอป
แล้วเปิด Store โหลดแอป (beta) มา
ตรงนี้อาจต้องรอสักพัก ถึงจะมีให้โหลด
โหลดแอปได้แล้ว ก็เข้าแอปทดลองกดซื้อ

ย้ำว่า ถ้าเครื่องเป็นบัญชี Dev เดียวกับ IAB จะซื้อไม่ได้
แอปไม่ได้อยู่บน Release หรือ Alpha / Beta channel ก็จะซื้อไม่ได้เช่นกัน
และอย่าลืม Active Product ใน Dev console ด้วย

6

 

ถ้าทำถูกต้องจะสามารถกดซื้อได้

5

 

ดูรายการการสั่งซื้อ

เมื่อมีลูกค้ามาซื้อแล้ว เราสามารถมาดู order ได้ที่ Google Developer Console
ที่หัวข้อ OrderManagementPlace

ถ้าอยากยกเลิก order ก็กดคืนเงินได้ แล้ว Google จะโอนเงินคืนให้เต็มจำนวน

รายได้จากการขาย เราจะได้ 70%  จะถูก Google แบ่งไป 30% ถือว่าเป็นค่าช่องทางการขาย (เสือนอนกินชัดๆ)

7

 

ผู้ใช้เคยซื้ออะไรบ้าง

วิธีก็คือ เรียก method ดังนี้ ก็จะได้ list ของ productId ที่เคยซื้อมาแล้ว

 

การสร้าง Promo code

มีลูกเล่นอีกนิด Google play ให้ Dev สามารถสร้าง code ไปแจกเพื่อนๆได้ด้วย เอาไว้ แลกแอปฟรี หรือ แลก product ฟรี
แต่จะต้องเป็น product แบบซื้อขาด

ไปที่ Developer Console > โปรโมชัน > เพิ่มโปรโมชันใหม่

จากนั้นกรอกข้อมูลให้เรียบร้อย ใส่อายุได้มากที่สุดได้ 1 ปี

8

เสร็จแล้วจะได้ไฟล์ .CSV ที่ข้างในมี Promo code อยู่ตามจำนวนที่ต้องการ

 

การใช้ Promo code

วิธีนี้ง่ายที่สุด คือเข้าไปที่ Google Play > กดเมนูบนซ้าย > แลก แล้วใส่ code
รหัสนี้สามารถแลกได้เฉพาะสินค้าที่ซื้อขาดเท่านั้นนะ

screenshot_20161218-225431 screenshot_20161218-225408

 

ทำที่แลก Promo code ในแอป

เท่าที่ลองดูวิธีที่ง่ายที่สุดคือ ใช้ Intent URL นี่แหละ
อาจจะทำ EditText ให้ใส่ code ในแอป พอกดปุ่มแล้วก็จะเปิด Intent URL นี้ขึ้นมา มันจะเปิด Google Play ตรวจสอบ Promo code ให้

screenshot_20170114-124202

 

จบแล้ว

การทำ IAB ก็เสร็จสิ้นเพียงเท่านี้ ถ้าใช้ BillingProcess หลายที่ ก็สร้างคลาสแยกขึ้นมา แล้วทำ interface ก็จะช่วยให้จัดการง่ายขึ้น ที่เหลือคือ พอขายได้ ก็ไปถอนเงินในเว็บ payment ขั้นต่ำ 1 USD ใครมีเทคนิคการขาย หรือวิธีสะกดจิตให้คนซื้อดีๆก็มาบอกกันด้วยนะ

ขอบคุณครับ

ขอให้รวยขอให้รวย ที่มาช่วยงานบุญวันนี้  

 

Reference

https://developer.android.com/training/in-app-billing/preparing-iab-app.html
https://gist.github.com/SuperThomasLab/6d44b4920dbdc8482a2467d95f66c5df
https://github.com/anjlab/android-inapp-billing-v3/issues

การทำ In-App Billing แบบง่ายๆด้วย Library