Realtime Notification
Last updated
Was this helpful?
Last updated
Was this helpful?
บทความก่อนหน้า จะได้เห็นว่าบาง purchase flow เราจำเป็นที่จะต้องรับ Realtime Notification เพื่อมา process ต่อด้วย
บทความนี้เลยอยากมาเล่าถึง life cycle ที่จะเกิดขึ้นเพื่อให้เห็นภาพกันมากขึ้นครับ
เนื่องจากว่า Realtime Notification ของ Google นั้นส่งมาให้เราผ่าน Google Pub/Sub โดยที่ Google เปิดให้เรากำหนด Topic เองได้เลยว่าจะใช้กับ Topic อะไร เราก็ทำการ Create Topic ขึ้นมาเตรียมไว และทำ Topic มา Config ที่ Google Play Console ของ App เราครับ
Step ต่อมาอยากให้เห็นเป็นภาพเดียวกันก่อนครับว่า Realtime Notification ของ Google นั้นจะเกิดขึ้นเมื่อการซื้อสำเร็จครับ และประเภทของ Notification นั้นจะแบ่งออกเป็น 2 แบบขึ้นอยู่กับ SKU และ Payment method ที่ซื้อครับ
นั้นจะเกิดเมื่อทำรายการซื้อ SKU ประเภท In-app product และจ่ายเงินแบบ pending purchase ครับ (ก็คือ QR promptpay นั้นเอง)
Notification type จะมีอยู่ด้วยกัน 2 Type
(1) ONE_TIME_PRODUCT_PURCHASED
บอกเราว่าเก็บเงินสำเร็จแล้ว
(2) ONE_TIME_PRODUCT_CANCELED
บอกเราว่าการเก็บเงินไม่สำเร็จถูกยกเลิกจาก user
Notification type จะมีอยู่ด้วยกัน 13 Type
(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 แล้ว
จากทั้ง 13 notification type นั้นมี ประเภท (9) SUBSCRIPTION_DEFERRED ที่ผมไม่เคยพบมาก่อนเลย ทำให้ผมไม่สามารถสรุปได้ว่ามันจะเกิดได้ตอนจังหวะไหน
จะเห็นว่ากรณี OneTimeProductNotification นั้นไม่มีอะไรซับซ้อนเลย มันก็คือ result ของการ charge ที่ google ได้รับนั้นเองแล้วส่งมาบอกเรา
แต่ในส่วนของ SubscriptionNotification นั้นมีความซับซ้อนอยู่ไม่น้อยเลย เนื่องจากเป็น Model subscription จำเป็นที่จะต้องมีหลาย Notification type ให้เรา Handle ที่ระบบเรา
Life cycle หรือ State ของ Notification ผมทำสรุปเป็นภาพใหญ่ๆ ให้เข้าใจง่ายๆ ตามนี้
จบไปอีกหัวข้อ หวังว่าท่านใดที่จะต้อง implement กับ Google Play billing Realtime Notification ก็จะได้เห็นภาพว่าเราจะ Design ระบบเรายังไงให้ Support กับสิ่งที่ Google มีไวให้เรามากขึ้นนะครับ
Reference