Realtime Notification

บทความก่อนหน้า จะได้เห็นว่าบาง purchase flow เราจำเป็นที่จะต้องรับ Realtime Notification เพื่อมา process ต่อด้วย

บทความนี้เลยอยากมาเล่าถึง life cycle ที่จะเกิดขึ้นเพื่อให้เห็นภาพกันมากขึ้นครับ

เตรียมรับ Realtime Notification

เนื่องจากว่า Realtime Notification ของ Google นั้นส่งมาให้เราผ่าน Google Pub/Sub โดยที่ Google เปิดให้เรากำหนด Topic เองได้เลยว่าจะใช้กับ Topic อะไร เราก็ทำการ Create Topic ขึ้นมาเตรียมไว และทำ Topic มา Config ที่ Google Play Console ของ App เราครับ

config pub/sub topic for google push the messages

Notification มาเมื่อไหร่

Step ต่อมาอยากให้เห็นเป็นภาพเดียวกันก่อนครับว่า Realtime Notification ของ Google นั้นจะเกิดขึ้นเมื่อการซื้อสำเร็จครับ และประเภทของ Notification นั้นจะแบ่งออกเป็น 2 แบบขึ้นอยู่กับ SKU และ Payment method ที่ซื้อครับ

google play billing - reailtime notificaiton

ประเภท OneTimeProductNotification

  • นั้นจะเกิดเมื่อทำรายการซื้อ SKU ประเภท In-app product และจ่ายเงินแบบ pending purchase ครับ (ก็คือ QR promptpay นั้นเอง)

  • Notification type จะมีอยู่ด้วยกัน 2 Type

Notification type
Meaning

(1) ONE_TIME_PRODUCT_PURCHASED

บอกเราว่าเก็บเงินสำเร็จแล้ว

(2) ONE_TIME_PRODUCT_CANCELED

บอกเราว่าการเก็บเงินไม่สำเร็จถูกยกเลิกจาก user

ประเภท SubscriptionNotification

  • Notification type จะมีอยู่ด้วยกัน 13 Type

Notification type
Meaning

(1) SUBSCRIPTION_RECOVERED

รายการ subscribed ที่ถูก hold อยู่ได้รับการแก้ไขแล้ว

(2) SUBSCRIPTION_RENEWED

รายการ subscribed ที่ active อยู่ ได้รับการ renew อีกครั้งแล้ว (ถูกเรียกเก็บเงินสำเร็จ บอกเราให้ต่ออายุ)

(3) SUBSCRIPTION_CANCELED

รายการ subscribed อยู่ถูก cancelled แล้ว เกิดจาก system ก็ได้หรือเกิดจาก user ก็ได้เช่นกัน

(4) SUBSCRIPTION_PURCHASED

รายการ subscribed สำเร็จ (อันนี้เราจะได้รับเมื่อซื้อครั้งแรกและ google สามารถเก็บเงินได้สำเร็จ)

(5) SUBSCRIPTION_ON_HOLD

รายการ subscribed ถูกระงับเนื่องจากเก็บเงินเพื่อ renew ไม่สำเร็จ (รายการ hold จะถูก hold อยู่ 30 วัน)

(6) SUBSCRIPTION_IN_GRACE_PERIOD

รายการ subscribed ไม่สามารถเก็บเงินเพื่อ renew ได้ แต่อยู่ในช่วยระยะเวลาผ่อนผัน

(7) SUBSCRIPTION_RESTARTED

รายการ subscribed ที่ cancelled ไปแล้วนั้นกลับมา active อีกครั้ง ผ่านหน้า Play -> Account -> Subscriptions ด้วย user เอง

(8) SUBSCRIPTION_PRICE_CHANGE_CONFIRMED

รายการที่ subscribed อยู่มีการปรับเปลี่ยนราคาและ user ได้ accept กับราคาใหม่

(9) SUBSCRIPTION_DEFERRED

รายการที่ subscribed ได้ถูกขยายเวลาให้แล้ว

(10) SUBSCRIPTION_PAUSED

รายการที่ subscribed อยู่นั้นได้ขอให้หยุดการ renew ชั่วระยะเวลาหนึ่งจาก user เอง

(11) SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED

รายการ subscribed ที่ได้ paused อยู่นั้นถูกยกเลิกการ paused แล้ว

(12) SUBSCRIPTION_REVOKED

รายการที่ subscribed อยู่นั้นได้ถูกเพิกถอนก่อนที่จะหมดอายุโดย user ร้องขอไปทาง google หรือเกิดจาก google play console

(13) SUBSCRIPTION_EXPIRED

รายการที่ subscribed อยู่นั้น expired แล้ว

สรุปเป็นภาพตอนนี้จะได้แบบนี้ครับ

google play billing - reailtime notificaiton with total notification type

จากรูปด้านบนจะเห็นว่ามีเส้น Retrieve detail ด้วย

เนื่องจากว่า Payload ที่เราได้รับมาจาก Pub/Sub Topic นั้นจะไม่มี detail ของ transaction นั้นๆ มาด้วยนะครับ ดังนั้นหากต้องการ detail เราต้อง request เพิ่มเอง

Life cycle หรือ State ของ SubscriptionNotification

จะเห็นว่ากรณี OneTimeProductNotification นั้นไม่มีอะไรซับซ้อนเลย มันก็คือ result ของการ charge ที่ google ได้รับนั้นเองแล้วส่งมาบอกเรา

แต่ในส่วนของ SubscriptionNotification นั้นมีความซับซ้อนอยู่ไม่น้อยเลย เนื่องจากเป็น Model subscription จำเป็นที่จะต้องมีหลาย Notification type ให้เรา Handle ที่ระบบเรา

Life cycle หรือ State ของ Notification ผมทำสรุปเป็นภาพใหญ่ๆ ให้เข้าใจง่ายๆ ตามนี้

life cycle notification type of SubscriptionNotification

จบไปอีกหัวข้อ หวังว่าท่านใดที่จะต้อง implement กับ Google Play billing Realtime Notification ก็จะได้เห็นภาพว่าเราจะ Design ระบบเรายังไงให้ Support กับสิ่งที่ Google มีไวให้เรามากขึ้นนะครับ

Reference

Last updated

Was this helpful?