[Dev] Google Play In-app Billing สำหรับ Android : Part 3 การนำ Utility มาใช้ในการเขียนคำสั่ง

จากตอนที่แล้ว Google Play In-app Billing สำหรับ Android : Part 2 การเขียนคำสั่งขั้นพื้นฐาน นั้น จะเห็นว่า เราต้องเขียนคำสั่งเยอะแยะมากมาย ซึ่งการที่จะขายของใน App ไม่ว่าจะขายแบบไหน ล้วนมี Flow แทบจะเหมือนกันหมด ต่างกันแค่ Product ID หรือแม้กระทั่งความยุ่งยากในการตรวจสอบความถูกต้องของการสั่งซื้อ

in-app-billing-android

สำหรับตอนนี้ จะเป็นการแนะนำการใช้งาน Utility ซึ่งเป็นกลุ่มของ Class ที่อยู่ใน Project ตัวอย่าง ที่ทาง Google แถมมาให้

พร้อมกันรึยังครับ ถ้าพร้อมแล้ว มาเริ่มกันเล้ยยยย!!

 

List of contents

 

Prepare

เริ่มต้นด้วยการสร้าง Project ใหม่ ตามขั้นตอนใน Google Play In-app Billing สำหรับ Android : Part 1 เตรียมความพร้อม เช่นเดิม

สำหรับใครที่ทำตาม Part 2 มาแล้ว ผมแนะนำว่า สร้าง Project ใหม่กันนะครับ Code จะได้ไม่ปะปนกัน จนทำให้เกิดความสับสน

ต่อจากนั้น ให้ทำการ Add New Package ใหม่ ตั้งชื่อเป็น <app package name>.util

สร้าง Project ใหม่ และ Add In-app Billing Library ให้เรียบร้อย
สร้าง Project ใหม่ และ Add In-app Billing Library ให้เรียบร้อย
เพิ่ม Package ใหม่
เพิ่ม Package ใหม่
Package ใหม่
Package ใหม่

ทำการ Import Project ตัวอย่าง ที่ Google แถมมาให้ ซึ่งอยู่ที่ Folder <sdk>/extras/google/play_billing/samples

เมนู Import...
เมนู Import…
หน้าต่าง Import
หน้าต่าง Import
เลือก Project TrivialDrive จากตัวอย่างที่ Google แถมมา
เลือก Project TrivialDrive จากตัวอย่างที่ Google แถมมา

ใน Project ตัวอย่าง จะมีไฟล์ที่อยู่ใน src/com.example.android.trivialdrivesample.util ทั้งหมด 9 ไฟล์ ให้เลือกไฟล์ทั้ง 9 แล้วลากไปใส่ที่ <app package name>.util ของ Project เรา

Utility Class ทั้ง 9 ไฟล์ จาก Project ตัวอย่าง
Utility Class ทั้ง 9 ไฟล์ จาก Project ตัวอย่าง
ทำการลาก Utility Class ทั้ง 9 ไฟล์ มาใช้ใน Project เรา
ทำการลาก Utility Class ทั้ง 9 ไฟล์ มาใช้ใน Project เรา

หลังจากนั้น ให้เปิดไฟล์ Security.java ขึ้นมา มองหา Method verifyPurchase() แล้วแก้ไขเป็นดังนี้

  • จาก Code ด้านบน คือเพิ่ม Code ในบรรทัดที่ 5 เข้าไป เพื่อที่จะใช้ในการ Run ทดสอบ ด้วยการเช็คค่า BuildConfig.DEBUG

เท่านี้เราก็พร้อมที่จะลุย Code กันแล้ว

ใน Part นี้ จะไม่อธิบายรายละเอียดของคำสั่งที่ทำงานเช่นเดียวกับใน Part 2 (ใครยังไม่ได้อ่าน ไปอ่าน Part 2 ก่อนนะ) เพื่อไม่ให้บทความยาวมากและซ้ำซ้อนกับตอนที่แล้ว แต่ในบางจุดจะใส่เป็น Comment ไว้ ให้ผู้อ่านได้เห็นว่าทำอะไรได้บ้าง และไปทดลองดูข้อมูลต่าง ๆ ด้วยตัวเอง

 

Declare variable

เริ่มต้นด้วยการประกาศตัวแปรใน Class MainActivity

  • ตัวแปร mHelper เป็นชนิด IabHelper ซึ่งอยู่ใน util ที่เรานำมาใช้นั้นเอง
  • ตัวแปร base64PublicKey นั้น จะเป็น License Key ของ App นี้ โดยค่าที่จะต้องกำหนดให้ตัวแปร จะต้องนำมาจาก Google play Developer Console ที่ App ที่ต้องการ (หากยังไม่เคย Upload สามารถสร้างขึ้นมาก่อนได้) แล้วไปที่เมนู Services & APIs (หรือ การบริการและ API) ในส่วนของ LICENSING & IN-APP BILLING (หรือ การให้สัญญาอนุญาตและการเรียกเก็บเงินในแอปฯ) จะเห็นค่า Base64-encoded RSA public key (หรือ คีย์สาธารณะ Base64-encoded RSA) อยู่ ให้ Copy มาใส่ได้เลย
Base64-encoded RSA public key จาก Google play Developer Console
Base64-encoded RSA public key จาก Google play Developer Console

หลังจากนั้น ก็ทำการกำหนดค่าให้ตัวแปร mHelper ใน Method onCreate()

หลังจากกำหนดค่าให้ตัวแปร mHelper แล้ว หากต้องการดูผลการ Debug เพื่อดูผลการทำงานของ mHelper ทาง LogCat สามารถกำหนดฟีเจอร์เพิ่มเติม ด้วยคำสั่งต่อไปนี้

 

In-app Setup

ก่อนจะใช้งาน mHelper ต้องทำการ Setup ก่อน ด้วย Method startSetup() ใน onCreate ต่อเลย

และที่ Method onDestroy() ก็ต้องเขียนคำสั่งเพื่อทำลาย mHelper ด้วย

 

Design User Interface

ต่อไปเราจะออกแบบหน้าจอกัน โดยในบทความนี้ ให้สร้างปุ่มขึ้นมา 3 ปุ่ม ดังนี้ (เพื่อความรวดเร็ว สามารถ Download layout_main.xml ไปใช้ได้เลย)

ออกแบบหน้าจอให้มีปุ่ม 3 ปุ่ม
ออกแบบหน้าจอให้มีปุ่ม 3 ปุ่ม

ทำการประกาศตัวแปรที่ Class MainActivity

แล้วทำการกำหนดค่าให้อ้างอิงไปที่ปุ่มทั้ง 3 ที่ Method onCreate

และทำการดักจับ Event Click ของทั้ง 3 ปุ่ม

 

In-app Query Inventory

สำหรับการกดปุ่ม btnQuery เราจะเขียนคำสั่งสำหรับตรวจสอบรายการสินค้าที่เคยซื้อมาแล้ว และ User ยังเป็นเจ้าของอยู่ ด้วย Method queryInventoryAsync() ดังนี้ ทำการประกาศตัวแปรที่ Class MainActivity

แล้วเขียนคำสั่งใน Event Click ของปุ่ม btnQuery ดังนี้

เมื่อพบสินค้าที่เคยซื้อ จะทำการเก็บข้อมูลไว้ในตัวแปร purchaseOwned ไว้ใช้ต่อไป…

 

In-app Launch Purchase Flow

สำหรับการกดปุ่ม btnPurchase เราจะเขียนคำสั่งสำหรับการซื้อ ด้วย Method launchPurchaseFlow() ดังนี้

และต้องเขียนคำสั่งใน Method onActivityResult() ของ Class MainActivity เพื่อตรวจสอบผลการซื้อ ดังนี้

เท่านี้เราก็สามารถขายของใน App ได้แล้ว

 

In-app Consume

สำหรับการกดปุ่ม btnConsume เราจะเขียนคำสั่งสำหรับการกำหนดว่าสินค้าเป็นชนิดสิ้นเปลือง ด้วย Method consumeAsync() ดังนี้

เพียงเท่านี้ เราก็สามารถที่จะใช้ Utility Class ช่วยในการเขียนคำสั่งที่ยุ่งยาก อย่างที่เห็นใน Google Play In-app Billing สำหรับ Android : Part 2 การเขียนคำสั่งขั้นพื้นฐาน แล้ว Utility Class นั้น มีจุดที่โดดเด่นกว่าการเขียนคำสั่งแบบพื้นฐาน อยู่หลายจุด เช่น

  • ทำให้แต่ละเรื่องที่ต้องทำนั้น เขียนคำสั่งได้สั้นลง
  • ใช้แนวคิด Callback ในการส่งข้อมูลกลับ
  • ทำงานในลักษณะของ Asynchronous ทำให้สามารถควบคุมการลื่นไหลของ App ได้อย่างดี
  • มีการใส่ Security มาใช้ตรวจสอบความถูกต้อง โดยนำ License Key ของ App มาใช้ร่วมด้วย

ถ้าหากมีข้อสงสัยในจุดไหน สามารถโพสสอบถามได้นะครับ

สำหรับ Source code ในบทความนี้ สามารถ Download ได้ที่ Link ด้านล่างนี้เลยครับ

Download MainActivity.java

หรือจะลองโหลด App ที่ Compile แล้ว ได้ที่ Google Play Store

Ref.1 Selling In-app Products

Ref.2 Integrating Google Play In-app Billing into an Android Application – A Tutorial


ในตอนต่อไป Google Play In-app Billing สำหรับ Android : Part 4 ถึงเวลาขายจริง ตามไปอ่านกันได้เลยครับ

Leave a Reply

Your email address will not be published. Required fields are marked *

 

This site uses Akismet to reduce spam. Learn how your comment data is processed.