การซื้อการสมัครใช้บริการอาจมีสถานะต่างๆ ตลอดวงจรการใช้งาน โดยขึ้นอยู่กับหลายปัจจัย ซึ่งรวมถึงลักษณะการต่ออายุอัตโนมัติ สถานการณ์การชำระเงินถูกปฏิเสธ และการดำเนินการจัดการของนักพัฒนาแอป
จัดการวงจรการสมัครใช้บริการแบบต่ออายุอัตโนมัติ
เมื่อสถานะการสมัครใช้บริการของผู้ใช้เปลี่ยนแปลง เซิร์ฟเวอร์แบ็กเอนด์จะได้รับข้อความ SubscriptionNotification
หากต้องการอัปเดตสถานะในแบ็กเอนด์ ให้เรียกใช้ API
purchases.subscriptionsv2.get
โดยมีโทเค็นการซื้อรวมอยู่ในการแจ้งเตือน ปลายทางนี้จะแสดงสถานะการสมัครใช้บริการล่าสุดเมื่อระบุโทเค็นการซื้อ และถือเป็นแหล่งที่มาของความจริงสำหรับการจัดการการสมัครใช้บริการ
โทเค็นการซื้อจะใช้ได้ตั้งแต่การลงชื่อสมัครใช้จนถึง 60 วันหลังจาก การหมดอายุ หลังจากวันที่ดังกล่าว โทเค็นการซื้อจะใช้เรียก Google Play Developer API ไม่ได้อีกต่อไป
การซื้อการสมัครใช้บริการแบบต่ออายุใหม่อัตโนมัติ
เมื่อผู้ใช้ซื้อการสมัครใช้บริการ ระบบจะส่งข้อความ SubscriptionNotification ที่มี
ประเภท SUBSCRIPTION_PURCHASED ไปยังไคลเอ็นต์ RTDN ของคุณ ไม่ว่าคุณจะได้รับการแจ้งเตือนนี้หรือลงทะเบียนการซื้อใหม่ในแอปผ่าน
PurchasesUpdatedListener
หรือการดึงข้อมูลการซื้อด้วยตนเองในเมธอด onResume() ของแอป คุณควรประมวลผลการซื้อใหม่ในแบ็กเอนด์ที่ปลอดภัย โดยทำตามขั้นตอนต่อไปนี้
- ส่งคำค้นหาไปยังปลายทาง
purchases.subscriptionsv2.getเพื่อรับทรัพยากรการสมัครใช้บริการ ที่มีสถานะการสมัครใช้บริการล่าสุด - ตรวจสอบว่าค่าของฟิลด์
subscriptionStateคือSUBSCRIPTION_STATE_ACTIVE - ยืนยันการซื้อ
- ให้สิทธิ์ผู้ใช้เข้าถึงเนื้อหา ระบบจะระบุบัญชีผู้ใช้ที่เชื่อมโยงกับการซื้อได้ด้วยออบเจ็กต์
ExternalAccountIdentifiersจากทรัพยากรการสมัครใช้บริการ หากมีการตั้งค่าตัวระบุในเวลาที่ซื้อโดยใช้setObfuscatedAccountIdและsetObfuscatedProfileId
ฟิลด์ offerPhase ใน SubscriptionPurchaseLineItem จะให้รายละเอียด
เกี่ยวกับเฟสปัจจุบันของการสมัครใช้บริการ เช่น ช่วงทดลองใช้ฟรีหรือราคา
ช่วงแนะนำ
นอกจากนี้ Play Billing Library ยังมีเมธอดสำหรับรับทราบการสมัครใช้บริการ
acknowledgePurchase()
และเมธอดสำหรับตรวจสอบสถานะการรับทราบ
isAcknowledged()
อย่างไรก็ตาม เราขอแนะนำให้คุณจัดการการประมวลผลการซื้อในแบ็กเอนด์เพื่อความปลอดภัยที่ดียิ่งขึ้น
แหล่งข้อมูลการสมัครใช้บริการสำหรับการซื้อใหม่จะมีลักษณะคล้ายกับตัวอย่างต่อไปนี้
{
"kind": "androidpublisher#subscriptionPurchaseV2",
"startTime": "2022-04-22T18:39:58.270Z",
"regionCode": "US",
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"latestOrderId": "GPA.3333-4137-0319-36762",
"acknowledgementState": "ACKNOWLEDGEMENT_STATE_PENDING", // need to acknowledge new purchases
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
"autoRenewingPlan": {
"autoRenewEnabled": true
},
"offerPhase": {
"freeTrial": {}
}
}
],
}
การต่ออายุการสมัครใช้บริการ
สำหรับการสมัครใช้บริการแบบต่ออายุใหม่อัตโนมัติที่ไม่ใช่แบบผ่อนชำระ ระบบจะส่งSUBSCRIPTION_RENEWED
การแจ้งเตือนเมื่อการสมัครใช้บริการต่ออายุ สำหรับการสมัครใช้บริการแบบผ่อนชำระ ระบบจะส่งการแจ้งเตือน SUBSCRIPTION_RENEWED ทุกครั้งที่มีการเรียกเก็บเงินสำหรับการสมัครใช้บริการในวันที่เรียกเก็บเงิน ตรวจสอบว่าผู้ใช้ยังมีสิทธิ์ใช้การสมัครใช้บริการ แล้วอัปเดตสถานะการสมัครใช้บริการด้วย expiryTime ใหม่ที่ระบุไว้ในทรัพยากรการสมัครใช้บริการที่ส่งคืนจาก Google Play Developer API ทรัพยากรการสมัครใช้บริการจะมีลักษณะคล้ายกับตัวอย่างต่อไปนี้
{
"kind": "androidpublisher#subscriptionPurchaseV2",
"startTime": "2022-04-22T18:39:58.270Z",
"regionCode": "US",
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"latestOrderId": "GPA.3333-4137-0319-36762",
"acknowledgementState": "ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED",
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
"autoRenewingPlan": {
"autoRenewEnabled": true
},
"offerPhase": {
"basePrice": {}
}
}
]
}
คุณไม่จำเป็นต้องรับทราบการต่ออายุการสมัครใช้บริการ
ระยะเวลาผ่อนผัน
หากการต่ออายุการสมัครใช้บริการมีปัญหาเกี่ยวกับการชำระเงิน Google จะแจ้งให้ผู้ใช้ทราบและพยายามต่ออายุการสมัครใช้บริการเป็นระยะๆ สักระยะหนึ่งก่อนที่การสมัครใช้บริการจะหมดอายุ ระยะเวลาการกู้คืนนี้อาจประกอบด้วยระยะเวลาผ่อนผัน ตามด้วยช่วงการระงับบัญชี ในระยะเวลาผ่อนผัน ผู้ใช้ควร ยังคงมีสิทธิ์เข้าถึงสิทธิ์ในการสมัครใช้บริการ
เมธอด
queryPurchasesAsync()
จะยังคงแสดงผลการซื้อที่อยู่ในช่วงผ่อนผัน หากแอปของคุณ
ใช้ queryPurchasesAsync เพียงอย่างเดียวเพื่อตรวจสอบว่าผู้ใช้มีสิทธิ์สมัครใช้บริการหรือไม่
แอปของคุณควรจัดการระยะเวลาผ่อนผันโดยอัตโนมัติ เนื่องจาก
การสมัครใช้บริการเหล่านี้จะแสดงเป็น "ใช้งานอยู่" ผ่าน Play Billing Library
การซิงค์สถานะการสมัครใช้บริการกับแบ็กเอนด์จะช่วยให้คุณทราบถึงการชำระเงินที่ถูกปฏิเสธมากขึ้น และให้บริบทเพิ่มเติมขณะที่คุณพยายามลดการเลิกใช้งานโดยไม่ตั้งใจ รอรับข้อความ SubscriptionNotification
ที่มีประเภท SUBSCRIPTION_IN_GRACE_PERIOD เพื่อรับการแจ้งเตือนเมื่อผู้ใช้เข้าสู่
ระยะเวลาผ่อนผัน ขณะที่ผู้ใช้อยู่ในระยะเวลาผ่อนผัน resource การสมัครใช้บริการ
จะมี autoRenewEnabled = true Google Play จะขยายexpiryTimeค่าแบบไดนามิกจนกว่าระยะเวลาผ่อนผันจะหมดอายุ เนื่องจากสิทธิ์
ควรมีผลจนกว่าผู้ใช้จะยกเลิกหรือระยะเวลาผ่อนผันจะสิ้นสุดตามระยะเวลาสูงสุด
ค่าของฟิลด์ subscriptionState ในช่วงเวลานี้คือ
SUBSCRIPTION_STATE_IN_GRACE_PERIOD แหล่งข้อมูลการสมัครใช้บริการจะมีลักษณะคล้ายกับ
ตัวอย่างต่อไปนี้
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_IN_GRACE_PERIOD",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_future,
"autoRenewingPlan": {
"autoRenewEnabled": true
}
}
],
}
Play จะแจ้งให้ผู้ใช้ที่อยู่ในระยะเวลาผ่อนผันทราบว่าการชำระเงินถูกปฏิเสธ และแจ้งให้ผู้ใช้แก้ไขปัญหาเกี่ยวกับวิธีการชำระเงินใน Play Store เมื่อ ผู้ใช้เข้าสู่ระยะเวลาผ่อนผัน คุณควรสนับสนุนให้ผู้ใช้แก้ไขวิธีการชำระเงินในกรณีที่การชำระเงินไม่สำเร็จโดยไม่ได้ตั้งใจด้วย วิธีที่ตรงไปตรงมาในการทำเช่นนี้คือการใช้ API การรับส่งข้อความในแอป หากคุณเรียกใช้ API นี้ เมื่อผู้ใช้เปิดแอปของคุณ ผู้ใช้จะเห็นข้อความของ Play ใน แถบแสดงข้อความชั่วคราวที่แจ้งให้ผู้ใช้ทราบว่าระบบปฏิเสธการชำระเงิน ข้อความนี้ ยังมี Deep Link ให้ผู้ใช้แก้ไขวิธีการชำระเงินใน Google Play ด้วย
ทันทีที่ผู้ใช้แก้ไขวิธีการชำระเงิน การสมัครใช้บริการจะต่ออายุตามวันที่ต่ออายุเดิม และคุณจะจัดการการต่ออายุได้ตามที่อธิบายไว้ในการต่ออายุ
หากผู้ใช้ไม่แก้ไขวิธีการชำระเงินในช่วงระยะเวลาผ่อนผัน การสมัครใช้บริการจะเข้าสู่การระงับบัญชีและผู้ใช้จะเสียสิทธิ์
การเข้าถึงและการกู้คืนในช่วงระยะเวลาผ่อนผัน
รูปที่ 2 แสดงไทม์ไลน์ของการสมัครใช้บริการที่เข้าสู่ระยะเวลาผ่อนผันและ จากนั้นจะกลับมาทำงานอีกครั้งเมื่อผู้ใช้แก้ไขวิธีการชำระเงิน หลังจากระยะเวลาผ่อนผันสิ้นสุดลง ผู้ใช้จะเสียสิทธิประโยชน์จากการสมัครใช้บริการและเข้าสู่การระงับบัญชี
สิ่งสำคัญที่ควรทราบมีดังนี้
- ในระยะเวลาผ่อนผัน ผู้ใช้ควรยังคงมีสิทธิ์เข้าถึงสิทธิประโยชน์ของการสมัครใช้บริการ
- เมื่อการสมัครใช้บริการกลับมาทำงานได้อีกครั้งในช่วงระยะเวลาผ่อนผัน วันที่ต่ออายุจะไม่รีเซ็ต
- หากคุณเปลี่ยนระยะเวลาผ่อนผัน ผู้ใช้ที่อยู่ในระยะเวลาผ่อนผันในปัจจุบันจะไม่ได้รับผลกระทบ การต่ออายุการสมัครใช้บริการที่เข้าสู่ระยะเวลาผ่อนผันหลังการเปลี่ยนแปลงจะ แสดงระยะเวลาผ่อนผันใหม่ เช่น หากคุณเปลี่ยนระยะเวลาผ่อนผันจาก 7 วันเป็น 14 วัน ผู้ใช้ที่เข้าสู่ระยะเวลาผ่อนผันหลังจากการเปลี่ยนแปลง จะมีระยะเวลาผ่อนผันใหม่ 14 วัน
- การสมัครใช้บริการจะยังคงมีสถานะใช้งานอยู่ และคุณจะไม่ได้รับ RTDN ระยะผ่อนผัน จนกว่าระยะผ่อนผันแบบเงียบจะสิ้นสุดลง
ระยะเวลาผ่อนผันแบบเงียบ
คุณตั้งค่าระยะเวลาผ่อนผันเป็น 0 วันได้ แต่ Play จะรออย่างน้อย 1 วันเพื่อให้มีเวลาเพียงพอสำหรับการลองชำระเงินอีกครั้ง ระยะเวลาผ่อนผันแบบเงียบนี้เป็น
ตาข่ายนิรภัยสำหรับการประมวลผลการชำระเงิน ในช่วง 24 ชั่วโมงนี้ การสมัครใช้บริการจะยังคงอยู่ในสถานะACTIVE
วิธีที่ดีที่สุดในการติดตามการเปลี่ยนแปลงสถานะการสมัครใช้บริการคือการ
รับฟังและตอบสนองต่อการแจ้งเตือนแบบเรียลไทม์สำหรับนักพัฒนาแอป (RTDN) เรียกใช้เมธอด
purchases.subscriptionsv2.get()
ที่เวลา RTDN แทนเวลาหมดอายุเพื่อรับสถานะการสมัครใช้บริการที่แม่นยำยิ่งขึ้น
คุณควรได้รับการแจ้งเตือนอย่างใดอย่างหนึ่งต่อไปนี้ ทั้งนี้ขึ้นอยู่กับสถานะการสมัครใช้บริการหลังจากช่วงผ่อนผันแบบเงียบ 24 ชั่วโมง
SUBSCRIPTION_ON_HOLD(หากเปิดใช้)SUBSCRIPTION_CANCELED(หากยกเลิก)SUBSCRIPTION_EXPIRED(หากหมดอายุ)SUBSCRIPTION_RENEWED(หากต่ออายุสำเร็จ)
นอกจากนี้ คุณยังเรียกใช้เมธอด subscriptionV2.get() ได้ทุกเมื่อหลังจากระยะเวลาผ่อนผันแบบเงียบ 24 ชั่วโมงเพื่อดูสถานะล่าสุดของการสมัครใช้บริการ
การระงับบัญชี
หากการต่ออายุการสมัครใช้บริการมีปัญหาเกี่ยวกับการชำระเงิน หลังจากระยะเวลาผ่อนผันสิ้นสุดลง ช่วงการระงับบัญชีจะเริ่มขึ้น เมื่อการสมัครใช้บริการเข้าสู่การระงับบัญชี คุณควรบล็อกการเข้าถึงสิทธิ์ ของการสมัครใช้บริการ
ในระหว่างการระงับบัญชี คุณควรจัดการการยกเลิก การคืนค่า หรือการซื้อการสมัครใช้บริการซ้ำตามที่จำเป็น เนื่องจากผู้ใช้อาจทำการเปลี่ยนแปลงเหล่านี้ได้ในขณะที่การสมัครใช้บริการ ถูกระงับ
RTDN จะแจ้งให้คุณทราบเมื่อผู้ใช้เข้าสู่ระยะเวลาการระงับบัญชี เพื่อให้คุณแจ้งให้ผู้ใช้ทราบโดยเร็วที่สุดว่าเหตุใดสิทธิ์เข้าถึงการสมัครใช้บริการจึงถูกระงับ วิธีที่ตรงไปตรงมาในการดำเนินการนี้คือการใช้ API การรับส่งข้อความในแอป การเรียกใช้ API นี้เมื่อ ผู้ใช้เปิดแอปจะแสดงข้อความในแถบแสดงข้อความชั่วคราว เพื่อแจ้งให้ผู้ใช้ทราบว่าระบบปฏิเสธการชำระเงิน ข้อความนี้ยังมี Deep Link สำหรับให้ผู้ใช้แก้ไขวิธีการชำระเงินใน Google Play ด้วย
หากผู้ใช้เข้าถึงเนื้อหาการสมัครใช้บริการนอกแอปได้ ผู้ใช้อาจ พบว่าตนเองเสียสิทธิ์เข้าถึงในแพลตฟอร์มต่างๆ คุณอาจต้อง ส่งการแจ้งเตือนแบบพุชหรืออีเมลถึงผู้ใช้เพื่อแจ้งให้ทราบว่า การสมัครใช้บริการของผู้ใช้ไม่ทำงานอีกต่อไปเนื่องจากการชำระเงินถูกปฏิเสธ
วิธี
queryPurchasesAsync()
จะไม่แสดงการสมัครใช้บริการที่คืนแล้วในระหว่างที่บัญชีถูกระงับ ดังนั้นหากแอปของคุณใช้วิธีนี้เพื่อแสดง
การซื้อที่มีอยู่ คุณควรสนับสนุนการระงับบัญชีโดยค่าเริ่มต้น
เมื่อใช้การแจ้งเตือนแบบเรียลไทม์สำหรับนักพัฒนาแอป คุณจะได้รับข้อความ SubscriptionNotification
ที่มีประเภท SUBSCRIPTION_ON_HOLD เมื่อการสมัครใช้บริการเข้าสู่การระงับบัญชี เรียกใช้เมธอด
purchases.subscriptionsv2.get
จากเซิร์ฟเวอร์แบ็กเอนด์ที่ปลอดภัยเพื่อดึงข้อมูลการสมัครใช้บริการใหม่
ในระหว่างการระงับบัญชี ระบบจะตั้งค่าฟิลด์ expiryTime ของทรัพยากร
การสมัครใช้บริการ
เป็นการประทับเวลาในอดีต และตั้งค่าฟิลด์ subscriptionState เป็น
SUBSCRIPTION_STATE_ON_HOLD
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ON_HOLD",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_past,
...
}
],
}
หากต้องการกู้คืนสิทธิ์เข้าถึง ผู้ใช้ต้องแก้ไขวิธีการชำระเงิน Play จะแจ้งให้ผู้ใช้ที่บัญชีถูกระงับทราบว่าการชำระเงินถูกปฏิเสธ และคุณควรสนับสนุนให้ผู้ใช้แก้ไขวิธีการชำระเงินด้วย
หลังจากที่ผู้ใช้แก้ไขวิธีการชำระเงินแล้ว การสมัครใช้บริการจะกลับมาอยู่ในสถานะใช้งานอยู่
และคุณจะต้องคืนค่าสิทธิ์เข้าถึงเนื้อหาที่สมัครใช้บริการ ในกรณีนี้
โทเค็นการซื้อจะเหมือนกับก่อนที่ระบบจะระงับบัญชีเนื่องจาก
ระบบกำลังกู้คืนการซื้อเดียวกัน และคุณจะได้รับ RTDN ที่มีประเภท
SUBSCRIPTION_RECOVERED
สำหรับการสมัครใช้บริการแบบผ่อนชำระ การชำระเงินอาจถูกปฏิเสธและมีการเรียกเก็บเงินอีกครั้ง เมื่อมีการพยายามชำระเงินแต่ละครั้ง
หลังจากกู้คืนแล้ว Play Billing Library จะส่งคืนการสมัครใช้บริการอีกครั้งผ่านเมธอด queryPurchasesAsync() หากคุณใช้วิธีนี้เพื่อพิจารณาว่าผู้ใช้มีสิทธิ์สมัครใช้บริการหรือไม่ แอปควรจัดการการกู้คืนการสมัครใช้บริการจากการระงับบัญชีโดยอัตโนมัติ
รอข้อความ
SubscriptionNotification
ที่มีประเภท SUBSCRIPTION_RECOVERED เพื่อรับการแจ้งเตือนเมื่อมีการกู้คืนการสมัครใช้บริการ
และผู้ใช้ควรได้รับสิทธิ์เข้าถึงอีกครั้ง หากคุณค้นหาการสมัครใช้บริการ
หลังจากได้รับการแจ้งเตือนนี้ ระบบจะตั้งค่าฟิลด์ expiryTime เป็นการประทับเวลา
ในอนาคต และตั้งค่าฟิลด์ subscriptionState เป็น SUBSCRIPTION_STATE_ACTIVE อีกครั้ง
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
...
}
],
}
หากผู้ใช้ไม่แก้ไขวิธีการชำระเงินก่อนสิ้นสุดระยะเวลาการระงับบัญชี
คุณจะได้รับ RTDN ที่มีประเภท SUBSCRIPTION_CANCELED แทน ดูวิธีการจัดการการยกเลิกได้ที่การยกเลิก เมื่อคุณ
ค้นหาการสมัครใช้บริการที่ยกเลิกด้วยวิธีนี้ ระบบจะตั้งค่าฟิลด์
expiryTimeที่แสดงผลเป็นการประทับเวลาในอดีต
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_CANCELED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_past,
...
}
],
}
หลังจากได้รับการแจ้งเตือนการยกเลิกในระหว่างการระงับบัญชี คุณจะได้รับ RTDN ที่มีประเภท SUBSCRIPTION_EXPIRED ด้วย เนื่องจากผู้ใช้ไม่มีสิทธิ์แบบชำระเงินแล้ว และการสมัครใช้บริการได้หยุดให้บริการเนื่องจากการยกเลิก
คุณจัดการการหมดอายุนี้ได้ตามปกติ
ผู้ใช้จะได้รับสิทธิ์เข้าถึงอีกครั้งโดยการซื้อแพ็กเกจการสมัครใช้บริการเดิมซ้ำ หรือแพ็กเกจอื่นๆ ที่คุณเสนอผ่านแอปในช่วงที่ระบบระงับบัญชีจากการซื้อครั้งแรก ในกรณีดังกล่าว ระบบจะออกโทเค็นการซื้อใหม่และแสดง
ค่าใหม่เป็นส่วนหนึ่งของเหตุการณ์ SUBSCRIPTION_PURCHASED ที่
แสดงอินสแตนซ์ใหม่นี้
สิทธิ์เข้าถึงและการกู้คืนการระงับบัญชี
รูปที่ 3 แสดงไทม์ไลน์ของการสมัครใช้บริการที่เข้าสู่การระงับบัญชีและ กู้คืนเมื่อผู้ใช้แก้ไขวิธีการชำระเงิน
เช่นเดียวกับตัวอย่างก่อนหน้า รูปที่ 4 แสดงไทม์ไลน์ของการสมัครใช้บริการ ที่เข้าสู่ระยะเวลาผ่อนผันก่อนที่จะเข้าสู่การระงับบัญชี จากนั้น จะกู้คืนได้ขณะที่ถูกระงับ
สิ่งสำคัญที่ควรทราบมีดังนี้
- ก่อนที่การสมัครใช้บริการจะเข้าสู่การระงับบัญชี Google Play จะพยายามเรียกเก็บเงินจากวิธีการชำระเงินอีกครั้งเป็นเวลาสูงสุด 48 ชั่วโมง ผู้ใช้จะยังคงได้รับสิทธิประโยชน์จากการสมัครใช้บริการในช่วงนี้ หลังจากช่วงเวลาลองอีกครั้งนี้ผ่านไป การสมัครใช้บริการจะเข้าสู่การระงับบัญชี และผู้ใช้จะเสีย สิทธิ์เข้าถึงสิทธิประโยชน์จากการสมัครใช้บริการ
- การสมัครใช้บริการจะเข้าสู่การระงับบัญชีโดยตรงเมื่อการสมัครใช้บริการ กลับมาทำงานต่อจากสถานะหยุดชั่วคราวด้วยรูปแบบการชำระเงินที่ไม่สำเร็จ
- เมื่อการสมัครใช้บริการกู้คืนจากการระงับบัญชี ระบบจะรีเซ็ตวันที่ต่ออายุ
วันหมดอายุ
เมื่อการสมัครใช้บริการหมดอายุแล้ว ผู้ใช้ควรเสียสิทธิ์เข้าถึงการสมัครใช้บริการ ในกรณีดังกล่าว ระบบจะส่งข้อความ SubscriptionNotification ที่มีประเภท SUBSCRIPTION_EXPIRED
เมื่อได้รับการแจ้งเตือนนี้ ให้ค้นหา Google Play Developer
API เพื่อรับแหล่งข้อมูลการสมัครใช้บริการล่าสุด
หลังจากยืนยันว่า subscriptionState เป็น SUBSCRIPTION_STATE_EXPIRED
ให้นำสิทธิ์ออกและลงทะเบียนสถานะการซื้อเป็นไม่ถูกต้องในแบ็กเอนด์
ทรัพยากรการสมัครใช้บริการจะมีลักษณะคล้ายกับตัวอย่างต่อไปนี้
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_EXPIRED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": expiration_time_in_past,
...
}
],
}
การยกเลิก
ผู้ใช้สามารถยกเลิกการสมัครใช้บริการจากศูนย์การสมัครใช้บริการของ Play ได้ด้วยตนเอง
หรือระบบจะยกเลิกการสมัครใช้บริการโดยอัตโนมัติหากผู้ใช้ไม่กู้คืนหลังจาก
ถูกระงับบัญชี นักพัฒนาแอปยังทริกเกอร์การยกเลิกด้วย
purchases.subscriptionsv2.cancel ได้ด้วย
เมื่อมีการยกเลิกการสมัครใช้บริการ ผู้ใช้จะยังคงเข้าถึงเนื้อหาได้จนกว่าจะ
สิ้นสุดรอบการเรียกเก็บเงินปัจจุบัน เมื่อรอบการเรียกเก็บเงินสิ้นสุดลง ระบบควรเพิกถอนสิทธิ์เข้าถึง
การยกเลิกการสมัครใช้บริการแบบต่ออายุอัตโนมัติที่ไม่ได้เป็นการผ่อนชำระจะทริกเกอร์SUBSCRIPTION_CANCELEDการแจ้งเตือน
เมื่อคุณได้รับการแจ้งเตือนนี้ แหล่งข้อมูลการสมัครใช้บริการที่ Google Play Developer API ส่งคืนจะมีฟิลด์ subscriptionState
ตั้งค่าเป็น SUBSCRIPTION_STATE_CANCELED และฟิลด์ expiryTime จะมีวันที่ที่ผู้ใช้ควรสูญเสียสิทธิ์เข้าถึงการสมัครใช้บริการ หากวันที่ดังกล่าวอยู่ในอดีต ผู้ใช้ควรเสียสิทธิ์ทันที กรณีนี้อาจเกิดขึ้นได้ เช่น หากผู้ใช้ยกเลิกการสมัครใช้บริการขณะที่บัญชีถูกระงับชั่วคราวเนื่องจากระบบปฏิเสธการชำระเงิน
แหล่งข้อมูลการสมัครใช้บริการสำหรับการซื้อที่ยกเลิกจะมีลักษณะคล้ายกับตัวอย่างต่อไปนี้
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_CANCELED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": expiration_time,
...
}
],
}
สำหรับการสมัครใช้บริการแบบผ่อนชำระ ระบบจะส่งSUBSCRIPTION_CANCELLATION_SCHEDULED
การแจ้งเตือนเมื่อผู้ใช้ยกเลิกการสมัครใช้บริการในกรณีที่ยังมีการชำระเงิน
ในช่วงระยะเวลาผูกมัด การยกเลิกอยู่ระหว่างรอการดำเนินการและจะมีผลเมื่อ
สิ้นสุดระยะเวลาสัญญาปัจจุบัน เมื่อคุณได้รับการแจ้งเตือนนี้ แหล่งข้อมูลการสมัครใช้บริการที่ส่งคืนจาก Google Play Developer API จะมีฟิลด์
subscriptionState ตั้งค่าเป็น SUBSCRIPTION_STATE_ACTIVE เนื่องจาก
การสมัครใช้บริการแบบผ่อนชำระยังคงใช้งานได้จนกว่าจะสิ้นสุดระยะเวลาผูกมัด
อย่างไรก็ตาม มีออบเจ็กต์ pendingCancellation ที่ว่างเปล่าอยู่
ระบบจะส่งSUBSCRIPTION_CANCELEDการแจ้งเตือนตามด้วยSUBSCRIPTION_EXPIREDเมื่อสิ้นสุดระยะเวลาผูกมัด
แหล่งข้อมูลการสมัครใช้บริการสำหรับการซื้อการสมัครใช้บริการแบบผ่อนชำระที่ รอการยกเลิกจะมีลักษณะคล้ายกับตัวอย่างต่อไปนี้
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_plan01",
"expiryTime": expiration_time,
"autoRenewingPlan": {
"autoRenewEnabled": true,
"recurringPrice": {
"currencyCode": "USD",
"units": "1",
"nanos": 990000000
},
"installmentDetails": {
"initialCommittedPaymentsCount": 6,
"remainingCommittedPaymentsCount": 5,
"pendingCancellation": {}
...
}
}
}
],
}
คุณสามารถดูฟิลด์ canceledStateContext ในแหล่งข้อมูลการสมัครใช้บริการเพื่อ
ดูสาเหตุที่การสมัครใช้บริการถูกยกเลิก (เช่น การสมัครใช้บริการถูกยกเลิกโดยผู้ใช้ ระบบ หรือคุณ) หากผู้ใช้ยกเลิกการสมัครใช้บริการ คุณสามารถดูฟิลด์ userInitiatedCancellation เพื่อดูเหตุผลที่ผู้ใช้ยกเลิกการสมัครใช้บริการได้ ซึ่งจะช่วยในการกำหนดกลยุทธ์การสื่อสารได้
เมื่อมีการยกเลิกการสมัครใช้บริการแต่ยังไม่หมดอายุ ระบบจะยังคงแสดงผลการสมัครใช้บริการดังกล่าวจาก queryPurchasesAsync()
คุณอาจต้องการแสดงข้อความในแอปเพื่อแจ้งให้ผู้ใช้ทราบว่าการสมัครใช้บริการถูกยกเลิกแล้วและระบุวันที่หมดอายุ
การเพิกถอน
การสมัครใช้บริการอาจถูกเพิกถอนได้ด้วยเหตุผลหลายประการ ซึ่งรวมถึงแบ็กเอนด์ของคุณ
เพิกถอนการสมัครใช้บริการโดยใช้
purchases.subscriptionsv2.revoke
หรือการซื้อถูกเรียกเก็บเงินคืน ในกรณีนี้ ให้เพิกถอนสิทธิ์ของผู้ใช้ทันที ระบบจะส่งSubscriptionNotificationข้อความที่มีประเภท
SUBSCRIPTION_REVOKEDเมื่อเกิดเหตุการณ์นี้ขึ้น เมื่อคุณได้รับการแจ้งเตือนนี้ Subscription
resource
ที่ส่งคืนจาก Google Play Developer API จะมีฟิลด์ subscriptionState
ตั้งค่าเป็น SUBSCRIPTION_STATE_EXPIRED
แหล่งข้อมูลการสมัครใช้บริการสำหรับการซื้อที่ถูกเพิกถอนจะมีลักษณะคล้ายกับตัวอย่างต่อไปนี้
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_EXPIRED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": expiration_time,
...
}
]
}
การสมัครใช้บริการที่เลื่อนออกไป
มีสาเหตุหลายประการที่คุณอาจต้องการขยายสิทธิ์ของผู้ใช้ เช่น คุณอาจต้องการเสนอสิทธิ์เข้าถึงฟรีแก่ผู้ใช้เป็นโปรโมชันพิเศษ เช่น ให้สิทธิ์เข้าถึงฟรี 1 สัปดาห์เมื่อซื้อภาพยนตร์ หรือให้สิทธิ์เข้าถึงฟรี แก่ลูกค้าเพื่อแสดงความปรารถนาดี
คุณสามารถใช้
purchases.subscriptionsv2.defer API เพื่อเลื่อนวันที่เรียกเก็บเงินสำหรับการสมัครใช้บริการ (รวมถึงการสมัครใช้บริการที่มีส่วนเสริม) เมื่อเลื่อนการสมัครใช้บริการที่มีส่วนเสริม ระบบจะเลื่อนรายการทั้งหมดในการสมัครใช้บริการตามระยะเวลาเดียวกัน
เมื่อเลื่อนการสมัครใช้บริการ ระบบจะส่งSubscriptionNotification
ข้อความที่มีประเภท SUBSCRIPTION_DEFERRED ในระหว่างระยะเวลาที่เลื่อนออกไป
ผู้ใช้จะยังคงติดตามเนื้อหาของคุณและมีสิทธิ์เข้าถึงแบบเต็ม แต่จะไม่มีการเรียกเก็บเงิน ระบบจะอัปเดตวันที่ต่ออายุการสมัครใช้บริการเพื่อให้ตรงกับวันที่ใหม่
สำหรับแพ็กเกจแบบชำระเงินล่วงหน้า คุณสามารถใช้ API การเลื่อนการเรียกเก็บเงินเพื่อเลื่อนเวลาหมดอายุได้
ทรัพยากรการสมัครใช้บริการสำหรับการสมัครใช้บริการที่เลื่อนการชำระเงินจะมีลักษณะคล้ายกับ ตัวอย่างต่อไปนี้
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_future,
...
}
],
}
การสมัครใช้บริการที่หยุดชั่วคราว
คุณสามารถลดการเลิกใช้งานโดยตั้งใจได้ด้วยการอนุญาตให้ผู้ใช้หยุดการสมัครใช้บริการไว้ชั่วคราว เมื่อเปิดใช้ฟีเจอร์หยุดชั่วคราว ผู้ใช้สามารถเลือกหยุดการสมัครใช้บริการไว้ชั่วคราวเป็นระยะเวลาระหว่าง 1 สัปดาห์ไปจนถึง 3 เดือน โดยขึ้นอยู่กับระยะเวลาตามรอบ การดำเนินการนี้จะระงับการสมัครใช้บริการชั่วคราว
| การสมัครใช้บริการแบบตามรอบ | รายสัปดาห์ | รายเดือน | 3 เดือน | 6 เดือน | รายปี |
|---|---|---|---|---|---|
| ระยะเวลาหยุดชั่วคราวที่ใช้ได้* | 1 สัปดาห์ 2 สัปดาห์ 3 สัปดาห์ 4 สัปดาห์ |
1 เดือน 2 เดือน 3 เดือน |
1 เดือน 2 เดือน 3 เดือน |
1 เดือน 2 เดือน 3 เดือน |
1 เดือน 2 เดือน 3 เดือน |
การหยุดสมัครใช้บริการไว้ชั่วคราวจะมีผลเมื่อสิ้นสุดช่วงเวลาที่เรียกเก็บเงินปัจจุบันไปแล้วเท่านั้น โดยผู้ใช้จะไม่มีสิทธิ์เข้าถึงเนื้อหาที่สมัครใช้บริการขณะที่หยุดการสมัครใช้บริการไว้ชั่วคราว และจะไม่ชำระราคาต่ออายุ เมื่อสิ้นสุดระยะเวลาการหยุดชั่วคราว การสมัครใช้บริการจะกลับมาทำงานอีกครั้ง และ Google จะพยายามต่ออายุการสมัครใช้บริการ หากกลับมาทำงานอีกครั้งได้สำเร็จ การสมัครใช้บริการก็จะใช้งานได้ใหม่ หากการ กลับมาทำงานต่อล้มเหลวเนื่องจากปัญหาการชำระเงิน ผู้ใช้จะเข้าสู่สถานะพักบัญชีตามที่ แสดงในรูปที่ 5 และ 6
นอกจากนี้ ผู้ใช้ยังเลือกกลับมาสมัครใช้บริการต่อด้วยตนเองได้ทุกเมื่อในระหว่าง ช่วงหยุดชั่วคราว ดังที่แสดงในรูปที่ 6 เมื่อผู้ใช้กลับมาใช้บริการด้วยตนเอง วันที่เรียกเก็บเงิน จะเปลี่ยนเป็นวันที่กลับมาใช้บริการด้วยตนเอง
เมื่อหยุดการสมัครใช้บริการของผู้ใช้ชั่วคราว Play Billing Library จะไม่แสดงการสมัครใช้บริการผ่านเมธอด queryPurchasesAsync() เว้นแต่จะตั้งค่าพารามิเตอร์ includeSuspendedSubscriptions เป็น true ใน QueryPurchasesParams หากกลับมาสมัครใช้บริการอีกครั้ง
queryPurchasesAsync() จะส่งคืนวิธีการชำระเงินนั้นอีกครั้ง
รอรับ RTDN เพื่อให้ทราบเมื่อผู้ใช้หยุดการสมัครใช้บริการชั่วคราว การแจ้งเตือนเหล่านี้ยังช่วยให้คุณแจ้งเตือนผู้ใช้ในแอปว่าได้หยุดการสมัครใช้บริการชั่วคราวและไม่มีสิทธิ์เข้าถึงได้ด้วย นอกจากนี้ คุณควรระบุวิธีให้ผู้ใช้กลับมาสมัครใช้บริการด้วยตนเองได้ทุกเมื่อโดยใช้Deep Link ไปยัง Google Play
ระบบจะส่งข้อความ SubscriptionNotification
ที่มีประเภท SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED เมื่อผู้ใช้เริ่ม
หยุดการสมัครใช้บริการชั่วคราว ในตอนนี้ ผู้ใช้ควรมีสิทธิ์เข้าถึงการสมัครใช้บริการจนถึงวันที่ต่ออายุครั้งถัดไป และแหล่งข้อมูลการสมัครใช้บริการ
มี autoRenewEnabled = true ค่าของฟิลด์ subscriptionState
คือ SUBSCRIPTION_STATE_ACTIVE ในตอนนี้
ระบบจะส่งSubscriptionNotificationข้อความที่มีประเภท SUBSCRIPTION_PAUSED เมื่อการหยุดชั่วคราวมีผล
เมื่อเกิดกรณีนี้ ผู้ใช้ควรเสียสิทธิ์เข้าถึงการสมัครใช้บริการ และทรัพยากรการสมัครใช้บริการจะมี autoRenewEnabled = true
และฟิลด์ subscriptionState จะตั้งค่าเป็น SUBSCRIPTION_STATE_PAUSED คุณดูได้ว่าระบบคาดว่าจะต่ออายุการสมัครใช้บริการอีกครั้งเมื่อใดโดยตรวจสอบออบเจ็กต์
PausedStateContext
ระบบจะส่งSubscriptionNotificationข้อความที่มีประเภท SUBSCRIPTION_RECOVERED ในกรณีต่อไปนี้
การสมัครใช้บริการกลับมาทำงานต่อโดยอัตโนมัติเมื่อสิ้นสุดระยะเวลาหยุดชั่วคราว
หรือหากผู้ใช้เลือกที่จะกลับมาสมัครใช้บริการด้วยตนเอง
ระบบจะส่งข้อความ SubscriptionNotification ที่มีประเภท SUBSCRIPTION_ON_HOLD ในกรณีต่อไปนี้
การชำระเงินไม่สำเร็จขณะพยายามกลับมาสมัครใช้บริการอีกครั้งหลังจากหยุดชั่วคราว
ทั้ง 2 กรณีควรได้รับการจัดการตามที่อธิบายไว้ในการระงับบัญชี
สมัครอีกครั้ง
สำหรับแพ็กเกจเริ่มต้นของการสมัครใช้บริการแบบต่ออายุใหม่อัตโนมัติ Google Play Store อาจแสดงปุ่มสมัครอีกครั้ง ปุ่มนี้ช่วยให้ผู้ใช้ได้รับสิทธิ์เข้าถึงการสมัครใช้บริการอีกครั้ง โดยอาจไม่ปรากฏด้วยเหตุผลหลายประการ เช่น เมื่อการสมัครใช้บริการหมดอายุไปนานแล้ว
แม้ว่าปุ่มจะมีป้ายกำกับเป็นสมัครใช้บริการอีกครั้งเสมอ แต่ฟังก์ชันการทำงานจะขึ้นอยู่กับ สถานะการสมัครใช้บริการ
ในขณะที่การสมัครใช้บริการถูกยกเลิกแต่ยังไม่หมดอายุ ผู้ใช้จะยังคง สมัครใช้บริการและรับสิทธิประโยชน์จากการสมัครใช้บริการได้ หากผู้ใช้แตะ "สมัครใช้บริการอีกครั้ง" การยกเลิกจะถือว่าไม่มีผล และการสมัครใช้บริการจะต่ออายุต่อไป การดำเนินการนี้เรียกว่ากู้คืนในเอกสารประกอบสำหรับนักพัฒนาแอป Play และ API
หลังจากที่การสมัครใช้บริการแบบต่ออายุใหม่อัตโนมัติหมดอายุแล้ว คุณสามารถอนุญาตให้ผู้ใช้ซื้อ แพ็กเกจเริ่มต้นของการสมัครใช้บริการเดียวกันได้ การดำเนินการนี้เรียกว่าสมัครใช้บริการอีกครั้งใน เอกสารประกอบสำหรับนักพัฒนาแอป Play และ API คุณสามารถกำหนดค่าตัวเลือกนี้ สำหรับแต่ละแพ็กเกจเริ่มต้นใน Play Console หรือใช้ API
กู้คืนก่อนหมดอายุ
หากแอปของคุณใช้เฉพาะเมธอด
queryPurchasesAsync()
เพื่อพิจารณาว่าผู้ใช้มีสิทธิ์สมัครใช้บริการหรือไม่ แอปของคุณ
ควรจัดการการคืนค่าโดยอัตโนมัติเนื่องจากเมธอด queryPurchasesAsync()
จะยังคงแสดงผลการซื้อที่ยกเลิกไปแล้วก่อนวันที่หมดอายุ การสมัครใช้บริการที่กู้คืนจะต่ออายุต่อไปราวกับว่าไม่มีการยกเลิก
หากแอปซิงโครไนซ์สถานะการสมัครใช้บริการกับแบ็กเอนด์ คุณควรฟังข้อความ SubscriptionNotification
ที่มีประเภท SUBSCRIPTION_RESTARTED หลังจากได้รับ RTDN นี้
แอปจะตอบกลับการแจ้งเตือน บันทึกว่าตอนนี้ระบบได้ตั้งค่าการสมัครใช้บริการให้ต่ออายุแล้ว
และหยุดแสดงข้อความการคืนค่าในแอปได้ โดย
ทรัพยากรการสมัครใช้บริการจะมีลักษณะคล้ายกับตัวอย่างต่อไปนี้
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date
...
}
],
}
การกู้คืนการสมัครใช้บริการจะไม่สร้างคำสั่งซื้อใหม่ หากคุณเห็นคำสั่งซื้อ $0.00 สำหรับการสมัครใช้บริการที่ผู้ใช้ยกเลิกไปก่อนหน้านี้ แสดงว่าผู้ใช้มีแนวโน้มที่จะลงชื่อสมัครใช้ อีกครั้งจากแอปของคุณก่อนที่การสมัครใช้บริการจะหมดอายุ ดูข้อมูลเพิ่มเติมได้ที่การอัปเกรด การดาวน์เกรด และการสมัครใช้บริการอีกครั้ง
สมัครใช้บริการอีกครั้งหลังจากหมดอายุ
หากกำหนดค่าแพ็กเกจเริ่มต้นแบบต่ออายุใหม่อัตโนมัติโดยใช้ Google Play Console หรือ API เพื่ออนุญาตให้สมัครอีกครั้ง ผู้ใช้จะซื้อการสมัครใช้บริการที่หมดอายุไปแล้วอีกครั้งได้ใน Google Play Store
การซื้อเหล่านี้เป็นการซื้อใหม่ Google Play จะออกโทเค็นการซื้อใหม่ และแบ็กเอนด์ของคุณจะได้รับ RTDN ที่มีประเภท SUBSCRIPTION_PURCHASED สถานะการซื้อ
สำหรับการซื้อนอกแอปประเภทนี้จะไม่มี linkedPurchaseToken
ที่เชื่อมโยงกับการซื้อเดิมในกรณีดังกล่าว เนื่องจาก
การสมัครใช้บริการเดิมหมดอายุไปแล้ว
หากต้องการให้มั่นใจว่าการเชื่อมโยงผู้ใช้สำหรับการสมัครใช้บริการที่ซื้อซ้ำนั้นถูกต้อง และป้องกันการคืนเงินอัตโนมัติสำหรับการซื้อที่ยังไม่ได้ตอบรับ คุณต้องตอบรับการซื้อซ้ำในเซิร์ฟเวอร์แบ็กเอนด์
เรียกใช้
purchases.subscriptionsv2.getด้วยโทเค็นการซื้อใหม่จาก RTDN การตอบกลับสำหรับการซื้อนอกแอปประเภทนี้จะมีฟิลด์outOfAppPurchaseContextซึ่งมีไว้สำหรับการซื้อการสมัครใช้บริการอีกครั้งที่ยังไม่ได้ตอบรับโดยเฉพาะ ฟิลด์นี้มีข้อมูลต่อไปนี้expiredExternalAccountIdentifiers: ออบเจ็กต์ExternalAccountIdentifiersที่มีช่องobfuscatedAccountIdและobfuscatedProfileIdที่กำหนดค่าไว้สำหรับการสมัครใช้บริการที่หมดอายุก่อนหน้า หากมีการตั้งค่าไว้expiredPurchaseToken: โทเค็นการซื้อของการสมัครใช้บริการล่าสุดที่หมดอายุ
ใช้ตัวระบุใดก็ได้เพื่อค้นหาและลิงก์การซื้อใหม่กับบัญชีผู้ใช้ที่ถูกต้องในแบ็กเอนด์
โทรหา
purchases.subscriptions.acknowledgeเพื่อรับทราบการซื้อ- คุณจะส่ง
obfuscatedAccountIdและobfuscatedProfileIdของผู้ใช้ก็ได้ หากได้กำหนดค่าไว้โดยใช้setObfuscatedAccountIdและsetObfuscatedProfileIdในระหว่างขั้นตอนโฟลว์การเรียกเก็บเงินในแอป
- คุณจะส่ง
แนวทางฝั่งเซิร์ฟเวอร์นี้ช่วยให้คุณตอบรับการซื้อได้ภายใน 3 วันนับจากวันที่ซื้อ แม้ว่าผู้ใช้จะไม่ได้เปิดแอปก็ตาม
อัปเกรด ดาวน์เกรด และสมัครใช้บริการอีกครั้ง
เมื่อผู้ใช้อัปเกรด ดาวน์เกรด หรือลงชื่อสมัครใช้หลังจาก ยกเลิกจากแอปก่อนที่การสมัครใช้บริการจะหมดอายุ ระบบจะทำให้การสมัครใช้บริการเดิม ไม่ถูกต้องและสร้างการสมัครใช้บริการใหม่พร้อม โทเค็นการซื้อใหม่
นอกจากนี้ แหล่งข้อมูลการสมัครใช้บริการ
ที่ส่งคืนจาก Google Play Developer API ยังมีฟิลด์ linkedPurchaseToken
ที่ระบุการซื้อเดิมซึ่งผู้ใช้ได้อัปเกรด ดาวน์เกรด
หรือสมัครใช้บริการอีกครั้ง คุณสามารถใช้โทเค็นการซื้อในช่องนั้นเพื่อค้นหาการสมัครใช้บริการเก่า
และระบุบัญชีผู้ใช้ที่มีอยู่ เพื่อให้คุณเชื่อมโยง
การซื้อใหม่กับบัญชีเดียวกันได้
เมื่อผู้ใช้ลงชื่อสมัครใช้อีกครั้งจากแอปของคุณสำหรับแพ็กเกจเริ่มต้นเดียวกันก่อนที่การสมัครใช้บริการจะหมดอายุ Google Play จะสร้างคำสั่งซื้อในราคา $0.00 สำหรับการซื้อใหม่ ระบบจะไม่เรียกเก็บเงินจากผู้ใช้เมื่อลงชื่อสมัครใช้ เนื่องจากผู้ใช้ได้ชำระเงินสำหรับช่วงเวลาที่เรียกเก็บเงินปัจจุบันแล้ว การเรียกเก็บเงินตามปกติจะกลับมาทำงานอีกครั้งในวันที่ต่ออายุเดิม คำสั่งซื้อที่ราคา $0.00 จะปรากฏในการจัดการคำสั่งซื้อใน Play Console และใน รายงานทางการเงิน แต่ไม่ได้หมายความว่าผู้ใช้ได้รับช่วงทดลองใช้ฟรีหรือ ส่วนลดโปรโมชัน
ก่อนที่จะเสนอตัวเลือกการอัปเกรด ดาวน์เกรด หรือสมัครใช้บริการอีกครั้งแก่ผู้ใช้ในแอป คุณต้องรับทราบการสมัครใช้บริการที่มีอยู่ ระบบจะบล็อกการเปลี่ยนแพ็กเกจหรือการสมัครใช้บริการอีกครั้ง หากการสมัครใช้บริการที่มีอยู่ยังรอการรับทราบ
หากผู้ใช้ซื้อการอัปเกรด ดาวน์เกรด หรือสมัครใช้บริการอีกครั้งสำเร็จ นี่คือการซื้อใหม่ที่คุณต้องรับทราบ วิธีที่แนะนำ ในการดำเนินการนี้คือการใช้ Google Play Developer API ทรัพยากรการสมัครใช้บริการจะมีลักษณะคล้ายกับตัวอย่างต่อไปนี้
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"linkedPurchaseToken": old_purchase_token,
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
"autoRenewingPlan": {
"autoRenewEnabled": true
}
}
],
}
การเปลี่ยนแปลงราคา
ดูข้อมูลเกี่ยวกับการเปลี่ยนราคาการสมัครใช้บริการแบบต่ออายุใหม่อัตโนมัติและการแจ้งให้ผู้ใช้ทราบ เมื่อเหมาะสมได้ที่คู่มือแนวทางปฏิบัติแนะนำในการเปลี่ยนแปลงราคา
เมื่อมีการเพิ่มการเปลี่ยนแปลงราคาและมีการอัปเดตสถานะการเปลี่ยนแปลงราคา คุณจะได้รับ SUBSCRIPTION_PRICE_CHANGE_UPDATED RTDN คุณสามารถค้นหาข้อมูล
ปลายทาง purchases.subscriptionsv2.get เพื่อรับ
แหล่งข้อมูลการสมัครใช้บริการซึ่งจะมีรายละเอียดการเปลี่ยนแปลงราคาของแต่ละรายการ
ในการสมัครใช้บริการ
เมื่อมีการใช้การเปลี่ยนแปลงราคากับสมาชิกเดิมในรูปแบบการเลือกใช้ คุณจะได้รับ RTDN หากผู้ใช้ดำเนินการเพื่อยืนยันหรือปฏิเสธราคาใหม่
จัดการการยืนยันของผู้ใช้เกี่ยวกับการเปลี่ยนแปลงราคาแบบเลือกรับ
เมื่อผู้ใช้ยอมรับการขึ้นราคาค่าสมัครใช้บริการ คุณจะได้รับข้อความ SubscriptionNotification ที่มีประเภท
SUBSCRIPTION_PRICE_CHANGE_UPDATED
จัดการการต่ออายุหลังจากใช้การเปลี่ยนแปลงราคา
เมื่อมีการลดราคาหรือเมื่อการต่ออายุการสมัครใช้บริการมีการปรับขึ้นราคา
คุณจะได้รับข้อความ SubscriptionNotification ที่มีประเภท
SUBSCRIPTION_RENEWED ถือว่าการแจ้งเตือนนี้เป็นการต่ออายุอื่นๆ
จัดการกรณีที่ไม่มีการยอมรับการปรับขึ้นราคาแบบขอให้ผู้ใช้ยินยอม
หากผู้ใช้ไม่ยอมรับการขึ้นราคาแบบขอให้ผู้ใช้ยินยอมก่อนที่จะต้องต่ออายุในราคาที่สูงขึ้น ระบบจะยกเลิกการสมัครใช้บริการของผู้ใช้โดยอัตโนมัติ และคุณจะได้รับข้อความ SubscriptionNotification ที่มีประเภท SUBSCRIPTION_CANCELED จัดการเหตุการณ์นี้ตามที่อธิบายไว้ในส่วนการยกเลิก
นอกจากนี้ ผู้ใช้ยังยกเลิกการสมัครใช้บริการสำหรับการขึ้นราคาแบบไม่ได้ขอให้ผู้ใช้ยินยอมได้ โดยใช้กลไกเดียวกัน
ความยินยอมในการปรับขึ้นราคา (ใช้ได้กับภูมิภาคเกาหลีเท่านั้น)
เนื่องจากกฎระเบียบใหม่ของเกาหลีใต้ (KR) ผู้ใช้การสมัครใช้บริการในภูมิภาค KR ต้องยินยอมการปรับขึ้นราคาที่จะเกิดขึ้นหลังจากช่วงทดลองใช้ฟรี หรือช่วงแนะนำสิ้นสุดลง
Play จะแจ้งให้ผู้ใช้ในภูมิภาคเกาหลีทราบถึงข้อกำหนดด้านความยินยอมและจะจัดเก็บการตอบกลับความยินยอมจากผู้ใช้ด้วย เพื่อช่วยให้คุณปฏิบัติตามกฎระเบียบ ระบบจะยกเลิกการสมัครใช้บริการโดยอัตโนมัติสำหรับผู้ใช้ ที่ไม่ได้ให้ความยินยอมก่อนที่ราคาที่สูงขึ้นจะมีผล นอกจาก การแจ้งเตือนที่ส่งจาก Play แล้ว คุณยังส่งการแจ้งเตือนการปรับราคาที่กำหนดเอง ให้ผู้ใช้ และระบุลิงก์ไปยัง หน้าการจัดการที่เฉพาะเจาะจงในการแจ้งเตือนได้ด้วย
เมื่อระยะเวลาขอความยินยอมเริ่มต้นขึ้นหรือผู้ใช้ให้
ความยินยอมแล้ว คุณจะได้รับข้อความ SubscriptionNotification ที่มีประเภท
SUBSCRIPTION_PRICE_STEP_UP_CONSENT_UPDATED
ความแตกต่างระหว่างการเพิ่มราคาและการเปลี่ยนแปลงราคา
price step-up หมายถึงการขึ้นราคาการสมัครใช้บริการเนื่องจากมีการเปลี่ยนจากระยะข้อเสนอหนึ่งไปอีกระยะหนึ่ง
เช่น การสมัครใช้บริการที่เปลี่ยนจากช่วงทดลองใช้ฟรีเป็นราคาปกติ คุณใช้ฟิลด์ offerPhase ในทรัพยากรการสมัครใช้บริการเพื่อระบุระยะปัจจุบัน
ของการสมัครใช้บริการได้
อย่างไรก็ตาม price change หมายถึงการอัปเดตราคาที่คุณ (นักพัฒนาแอป) เป็นผู้เริ่ม
สำหรับราคาแพ็กเกจเริ่มต้นของการสมัครใช้บริการ เช่น
การขึ้นราคาแบบขอให้ผู้ใช้ยินยอมหรือการขึ้นราคาแบบไม่ได้ขอให้ผู้ใช้ยินยอม
จัดการวงจรของแพ็กเกจแบบชำระเงินล่วงหน้า
เช่นเดียวกับการสมัครใช้บริการต่ออายุใหม่อัตโนมัติ คุณต้องรับทราบแพ็กเกจแบบชำระเงินล่วงหน้าหลังจากการซื้อใหม่แต่ละครั้ง ในกรณีของแพ็กเกจแบบชำระเงินล่วงหน้า คุณต้อง ประมวลผลทั้งการซื้อครั้งแรกและการเติมเงินทั้งหมดให้เสร็จสมบูรณ์ เนื่องจากผู้ใช้ต้อง ผ่านขั้นตอนการซื้อทุกครั้ง
เนื่องจากแพ็กเกจแบบชำระล่วงหน้าอาจมีระยะเวลาสั้น จึงเป็นสิ่งสำคัญที่ต้อง รับทราบการซื้อโดยเร็วที่สุด คุณต้องรับทราบแพ็กเกจแบบชำระล่วงหน้าที่มีระยะเวลาตั้งแต่ 1 สัปดาห์ขึ้นไปภายใน 3 วัน คุณต้องรับทราบแพ็กเกจแบบชำระล่วงหน้าที่มี ระยะเวลาสั้นกว่า 1 สัปดาห์ภายในครึ่งหนึ่งของระยะเวลา แพ็กเกจ ตัวอย่างเช่น นักพัฒนาแอปมีเวลา 1.5 วันในการรับทราบการซื้อแพ็กเกจแบบชำระล่วงหน้า 3 วัน
ระบบจะส่งข้อความ SubscriptionNotification
ที่มีประเภท SUBSCRIPTION_PURCHASED ไปยังไคลเอ็นต์ RTDN ทุกครั้งที่มีการซื้อการสมัครใช้บริการแพ็กเกจแบบชำระเงินล่วงหน้า รวมถึงการเติมเงินทุกครั้ง เรียกใช้เมธอด
purchases.subscriptionsv2.get
เพื่อตรวจสอบสถานะการสมัครใช้บริการแพ็กเกจแบบชำระเงินล่วงหน้าล่าสุด
ระบบจะออกโทเค็นการซื้อใหม่สำหรับการซื้อการเติมเงิน และคุณจะได้รับโทเค็นการซื้อก่อนหน้าในฟิลด์ linkedPurchaseToken ซึ่งเป็นส่วนหนึ่งของสถานะการซื้อการสมัครใช้บริการใหม่
โทเค็นการซื้อจะใช้ได้ตั้งแต่การลงชื่อสมัครใช้
จนถึง 60 วันหลังจากการสมัครใช้บริการหมดอายุ หลังจากวันที่ดังกล่าว โทเค็นการซื้อจะใช้เรียก Google Play Developer API ไม่ได้อีกต่อไป
แหล่งข้อมูลการสมัครใช้บริการสำหรับการซื้อแพ็กเกจแบบชำระเงินล่วงหน้าจะมีลักษณะคล้ายกับ ตัวอย่างต่อไปนี้
{
"kind": "androidpublisher#subscriptionPurchaseV2",
"startTime": "2022-04-22T18:39:58.270Z",
"regionCode": "US",
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"latestOrderId": "GPA.3333-4137-0319-36762",
"acknowledgementState": "ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED",
"lineItems": [
{
"productId": "prepaid_plan01",
"expiryTime": expiry_date,
"prepaidPlan": {
"allowExtendAfterTime": timestamp_after_which_topups_are_allowed
}
}
]
}
คุณจะเห็นวันที่สิ้นสุดการให้สิทธิ์ในช่อง expiryTime การซื้อการเติมเงินจะเพิ่มเวลาการให้สิทธิ์โดยการสะสมเวลา ซึ่งหมายความว่าหากผู้ใช้เติมเงินก่อนสิทธิ์เดิมจะสิ้นสุดลง ระบบจะเพิ่มเวลาใหม่
ต่อจากวันที่หมดอายุก่อนหน้า
คุณอาจต้องการแสดงข้อความในแอปเพื่อแจ้งให้ผู้ใช้ทราบว่าสามารถขยายระยะเวลาการสมัครใช้บริการแบบชำระล่วงหน้าได้ด้วยการเติมเงิน
หากต้องการทราบว่าเมื่อใดที่ผู้ใช้จะเติมเงินได้ ให้ตรวจสอบฟิลด์ allowExtendAfterTime ในทรัพยากรการสมัครใช้บริการ
แพ็กเกจแบบชำระเงินล่วงหน้าจะไม่ต่ออายุอัตโนมัติ จึงไม่สามารถยกเลิกได้ หากผู้ใช้ต้องการ ยกเลิกแพ็กเกจแบบชำระเงินล่วงหน้า ผู้ใช้สามารถปล่อยให้แพ็กเกจหมดอายุได้
ฟิลด์ SubscriptionPurchaseV2 สำหรับแพ็กเกจแบบชำระเงินล่วงหน้า
เราได้เพิ่มฟิลด์ใหม่เพื่อรองรับแพ็กเกจแบบชำระล่วงหน้า ซึ่งผู้ใช้จะเป็นผู้ขยายเวลาแทนที่จะต่ออายุโดยอัตโนมัติ ฟิลด์ทั้งหมดใช้ได้กับแพ็กเกจแบบชำระเงินล่วงหน้าเช่นเดียวกับการสมัครใช้บริการแบบต่ออายุใหม่อัตโนมัติ โดยมีข้อยกเว้นดังนี้
- [ฟิลด์ใหม่] lineItems[0].prepaid_plan.allowExtendAfterTime: ระบุ เวลาที่ระบบจะอนุญาตให้ผู้ใช้ซื้อการเติมเงินอีกครั้งเพื่อขยายแพ็กเกจแบบชำระเงินล่วงหน้า เนื่องจากระบบอนุญาตให้ผู้ใช้มีการเติมเงินที่ยังไม่ได้ใช้เพียงครั้งละ 1 รายการ
- [ฟิลด์ใหม่] SubscriptionState: ระบุสถานะออบเจ็กต์การสมัครใช้บริการ
สำหรับแพ็กเกจแบบชำระเงินล่วงหน้า ค่านี้จะเป็น
ACTIVE,PENDINGหรือCANCELEDเสมอ - lineItems[0].expiryTime: ฟิลด์นี้จะแสดงเสมอสำหรับแพ็กเกจแบบชำระล่วงหน้า
- paused_state_context: ฟิลด์นี้จะไม่ปรากฏเนื่องจากแพ็กเกจแบบชำระล่วงหน้า หยุดชั่วคราวไม่ได้
- lineItems[0].auto_renewing_plan: ไม่มีสำหรับแพ็กเกจแบบชำระเงินล่วงหน้า
- canceled_state_context: ไม่มีสำหรับแพ็กเกจแบบชำระล่วงหน้า เนื่องจากฟิลด์นี้ ใช้ได้กับผู้ใช้ที่ยกเลิกการสมัครใช้บริการอย่างแข็งขันเท่านั้น
- lineItems[0].productId: ฟิลด์นี้จะแทนที่
subscriptionIdจาก เวอร์ชันก่อนหน้า