วงจรการสมัครใช้บริการ

การซื้อการสมัครใช้บริการอาจผ่านสถานะต่างๆ มากมายตลอดวงจร โดยขึ้นอยู่กับหลายปัจจัย เช่น ลักษณะการต่ออายุใหม่อัตโนมัติ สถานการณ์การปฏิเสธการชำระเงิน และการดำเนินการจัดการของนักพัฒนาแอป

จัดการวงจรการสมัครใช้บริการแบบต่ออายุใหม่อัตโนมัติ

เมื่อสถานะการสมัครใช้บริการของผู้ใช้มีการเปลี่ยนแปลง เซิร์ฟเวอร์แบ็กเอนด์ของคุณจะได้รับข้อความ SubscriptionNotification

รูปที่ 1 สถานะวงจรและเหตุการณ์การเปลี่ยนสถานะสําหรับการซื้อการสมัครใช้บริการแบบต่ออายุใหม่อัตโนมัติ

หากต้องการอัปเดตสถานะในแบ็กเอนด์ ให้เรียกใช้ purchases.subscriptionsv2.get API ที่มีโทเค็นการซื้อที่รวมอยู่ในการแจ้งเตือน ปลายทางนี้จะแสดงสถานะการสมัครใช้บริการล่าสุดโดยพิจารณาจากโทเค็นการซื้อ และถือว่าเป็นแหล่งที่มาของข้อมูลสำหรับการจัดการการสมัครใช้บริการ

โทเค็นการซื้อจะใช้ได้ตั้งแต่การลงชื่อสมัครใช้บริการจนถึง 60 วันหลังจากหมดอายุ หลังจากวันที่ดังกล่าว โทเค็นการซื้อจะใช้เพื่อเรียก API สำหรับนักพัฒนาแอป Google Play ไม่ได้อีกต่อไป

การซื้อการสมัครใช้บริการแบบต่ออายุใหม่อัตโนมัติรายการใหม่

เมื่อผู้ใช้สมัครใช้บริการ ระบบจะส่งข้อความ SubscriptionNotification ที่มีประเภท SUBSCRIPTION_PURCHASED ไปยังไคลเอ็นต์ RTDN ไม่ว่าคุณจะได้รับการแจ้งเตือนนี้หรือลงทะเบียนการซื้อใหม่ในแอปผ่าน PurchasesUpdatedListener หรือดึงข้อมูลการซื้อด้วยตนเองในวิธี onResume() ของแอป คุณควรประมวลผลการซื้อใหม่ในแบ็กเอนด์ที่ปลอดภัย โดยคุณต้องทำตามขั้นตอนต่อไปนี้:

  1. ค้นหาปลายทาง purchases.subscriptionsv2.get เพื่อรับทรัพยากรการสมัครใช้บริการที่มีสถานะการสมัครใช้บริการล่าสุด
  2. ตรวจสอบว่าค่าของช่อง subscriptionState เป็น SUBSCRIPTION_STATE_ACTIVE
  3. ยืนยันการซื้อ
  4. ให้สิทธิ์เข้าถึงเนื้อหาแก่ผู้ใช้ บัญชีผู้ใช้ที่เชื่อมโยงกับการซื้อจะระบุได้ด้วยออบเจ็กต์ ExternalAccountIdentifiers จากทรัพยากรการสมัครใช้บริการ หากตั้งค่าตัวระบุไว้ ณ เวลาซื้อโดยใช้ setObfuscatedAccountId และ setObfuscatedProfileId

นอกจากนี้ Billing Library ของ Play ยังมีวิธีการรับการสมัครใช้บริการ 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
      }
    }
  ],
}

การต่ออายุการสมัครรับข้อมูล

สําหรับการสมัครใช้บริการแบบผ่อนชำระที่ต่ออายุใหม่อัตโนมัติ ระบบจะส่ง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
      }
    }
  ]
}

คุณไม่จำเป็นต้องรับทราบการต่ออายุการสมัครใช้บริการ

ระยะเวลาผ่อนผัน

หากมีปัญหาการชำระเงินเกี่ยวกับการต่ออายุการสมัครใช้บริการ Google จะแจ้งให้ผู้ใช้ทราบและพยายามต่ออายุการสมัครใช้บริการเป็นระยะๆ ก่อนที่การสมัครใช้บริการจะหมดอายุ ระยะเวลาการกู้คืนนี้อาจประกอบด้วยระยะเวลาผ่อนผัน ตามด้วยช่วงการระงับบัญชี ผู้ใช้ควรยังคงเข้าถึงสิทธิ์ต่างๆ ของการสมัครใช้บริการได้ในระหว่างระยะเวลาผ่อนผัน

วิธีการดังกล่าวจะยังคงคืนสินค้าที่ซื้อในช่วงระยะเวลาผ่อนผันต่อไปqueryPurchasesAsync() หากแอปของคุณใช้ queryPurchasesAsync เพียงอย่างเดียวในการตรวจสอบว่าผู้ใช้มีสิทธิ์สมัครใช้บริการหรือไม่ แอปควรจัดการระยะเวลาผ่อนผันโดยอัตโนมัติ เนื่องจากระบบจะแสดงการสมัครใช้บริการเหล่านี้ว่าใช้งานอยู่ผ่าน Play Billing Library

การซิงค์สถานะการสมัครใช้บริการกับแบ็กเอนด์ช่วยให้คุณทราบมากขึ้นเกี่ยวกับการปฏิเสธการชำระเงิน และช่วยให้คุณมีบริบทมากขึ้นเมื่อพยายามลดการเลิกใช้งานโดยไม่ตั้งใจ คอยฟังข้อความ SubscriptionNotification ที่มีประเภท SUBSCRIPTION_IN_GRACE_PERIOD เพื่อรับการแจ้งเตือนเมื่อผู้ใช้เข้าสู่ระยะเวลาผ่อนผัน ขณะที่ผู้ใช้อยู่ในช่วงระยะเวลาผ่อนผัน subscription 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 เมื่อผู้ใช้เข้าสู่ระยะเวลาผ่อนผัน คุณควรแนะนำให้ผู้ใช้แก้ไขวิธีการชำระเงินด้วยในกรณีที่การเรียกเก็บเงินไม่สำเร็จโดยไม่ตั้งใจ วิธีที่ตรงไปตรงมาในการดําเนินการนี้คือการใช้ In-App Messaging API หากคุณเรียกใช้ API นี้เมื่อผู้ใช้เปิดแอป ระบบจะแสดงข้อความ Play ในแถบข้อมูลชั่วคราวเพื่อแจ้งให้ผู้ใช้ทราบว่าการชำระเงินถูกปฏิเสธ ข้อความนี้ยังมี Deep Link ที่ให้ผู้ใช้แก้ไขวิธีการชำระเงินใน Google Play ด้วย

ทันทีที่ผู้ใช้แก้ไขวิธีการชำระเงิน การสมัครใช้บริการจะต่ออายุด้วยวันที่ต่ออายุเดิม และคุณสามารถจัดการการต่ออายุตามที่อธิบายไว้ในการต่ออายุ

หากผู้ใช้ไม่แก้ไขวิธีการชำระเงินในช่วงระยะเวลาผ่อนผัน การสมัครใช้บริการจะเข้าสู่สถานะระงับบัญชี และผู้ใช้จะเสียสิทธิ์

การเข้าถึงและการกู้คืนในระยะเวลาผ่อนผัน

รูปที่ 2 แสดงลำดับเวลาของการสมัครใช้บริการที่เข้าสู่ระยะเวลาผ่อนผัน จากนั้นจะกลับมาทำงานอีกครั้งเมื่อผู้ใช้แก้ไขวิธีการชำระเงิน หลังจากระยะเวลาผ่อนผันสิ้นสุดลง ผู้ใช้ควรเสียสิทธิ์ประโยชน์ของการสมัครใช้บริการและบัญชีจะเข้าสู่สถานะถูกระงับ

รูปที่ 2 ไทม์ไลน์ของการสมัครใช้บริการที่เข้าสู่ระยะเวลาผ่อนผันและกู้คืนได้ก่อนสิ้นสุด

โปรดคำนึงถึงประเด็นต่อไปนี้

  • ผู้ใช้ควรมีสิทธิ์เข้าถึงสิทธิประโยชน์ของการสมัครใช้บริการในระหว่างระยะเวลาผ่อนผัน
  • เมื่อการสมัครใช้บริการได้รับการกู้คืนในช่วงระยะเวลาผ่อนผัน วันที่ต่ออายุจะไม่รีเซ็ต
  • หากคุณเพิ่มระยะเวลาผ่อนผัน เช่น จาก 7 วันเป็น 14 วัน ผู้ใช้ที่อยู่ในระยะเวลาผ่อนผันจะได้รับสิทธิ์เข้าถึงสิทธิประโยชน์ของการสมัครใช้บริการต่อไป
  • หากคุณลดระยะเวลาผ่อนผัน ผู้ใช้ที่อยู่ในระยะเวลาผ่อนผันเดิมนานเกินระยะเวลาผ่อนผันใหม่จะถูกเพิกถอนสิทธิประโยชน์ของการสมัครใช้บริการทันที เช่น หากคุณลดระยะเวลาผ่อนผันจาก 14 วันเป็น 7 วัน ผู้ใช้ที่อยู่ในวันที่ 8-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 จะแจ้งให้คุณทราบเมื่อผู้ใช้เข้าสู่ระยะเวลาการระงับบัญชี เพื่อให้คุณแจ้งผู้ใช้ได้เร็วที่สุดถึงสาเหตุที่การเข้าถึงการสมัครใช้บริการถูกระงับ วิธีง่ายๆ ในการทำเช่นนี้คือการใช้ In-App Messaging API การเรียก API นี้เมื่อผู้ใช้เปิดแอปจะแสดงข้อความในแถบข้อมูลชั่วคราวเพื่อแจ้งให้ผู้ใช้ทราบว่าการชำระเงินถูกปฏิเสธ ข้อความนี้ยังมีไดร์ฟ์ลิงก์เพื่อให้ผู้ใช้แก้ไขวิธีการชำระเงินใน Google Play ด้วย

หากผู้ใช้เข้าถึงเนื้อหาการสมัครใช้บริการนอกแอปได้ ผู้ใช้อาจพบว่าตนเสียสิทธิ์เข้าถึงในแพลตฟอร์มต่างๆ คุณอาจต้องส่งข้อความ Push หรืออีเมลถึงผู้ใช้เพื่อแจ้งให้ทราบว่าการสมัครใช้บริการของผู้ใช้ไม่ทำงานแล้วเนื่องจากการชำระเงินถูกปฏิเสธ

วิธีการ 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 แสดงลำดับเวลาของการสมัครใช้บริการที่เข้าสู่การระงับบัญชีและฟื้นตัวเมื่อผู้ใช้แก้ไขวิธีการชำระเงิน

รูปที่ 3 ไทม์ไลน์ของการสมัครใช้บริการที่เข้าสู่การระงับบัญชีและกู้คืนก่อนสิ้นสุดการระงับ

รูปที่ 4 แสดงลำดับเวลาของการสมัครใช้บริการที่เข้าสู่ระยะเวลาผ่อนผันก่อนเข้าสู่การระงับบัญชี แล้วจึงกลับมาใช้งานได้อีกครั้งขณะถูกระงับ ซึ่งคล้ายกับตัวอย่างก่อนหน้านี้

รูปที่ 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.subscriptions.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 เมื่อเกิดเหตุการณ์นี้ เมื่อคุณได้รับการแจ้งเตือนนี้ ทรัพยากรการสมัครใช้บริการที่แสดงผลจาก 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.subscriptions.defer ของ Play Developer 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 เดือน
ไม่มี
*อาจมีการเปลี่ยนแปลงได้ทุกเมื่อ

การหยุดสมัครใช้บริการไว้ชั่วคราวจะมีผลเมื่อสิ้นสุดช่วงเวลาที่เรียกเก็บเงินปัจจุบันไปแล้วเท่านั้น โดยผู้ใช้จะไม่มีสิทธิ์เข้าถึงเนื้อหาที่สมัครใช้บริการขณะที่หยุดการสมัครใช้บริการไว้ชั่วคราว และไม่ต้องจ่ายค่าสมัครใช้บริการอีกครั้ง เมื่อสิ้นสุดระยะเวลาการหยุดชั่วคราว การสมัครใช้บริการจะกลับมาทำงานอีกครั้ง และ Google จะพยายามต่ออายุการสมัครใช้บริการ หากกลับมาทำงานอีกครั้งได้สำเร็จ การสมัครใช้บริการก็จะใช้งานได้ใหม่ หากการกลับมาดำเนินการต่อไม่สำเร็จเนื่องจากปัญหาการชำระเงิน ผู้ใช้จะเข้าสู่สถานะการระงับบัญชีดังที่แสดงในรูปที่ 5 และ 6

รูปที่ 5 ผู้ใช้หยุดสมัครใช้บริการชั่วคราวแล้วกลับมาสมัครใช้บริการต่อ
รูปที่ 6 ผู้ใช้หยุดการสมัครใช้บริการไว้ชั่วคราวแล้วเข้าสู่สถานะการระงับบัญชี

นอกจากนี้ ผู้ใช้ยังเลือกกลับมาสมัครใช้บริการอีกครั้งด้วยตนเองได้ทุกเมื่อในระหว่างที่หยุดชั่วคราว ดังที่แสดงในรูปที่ 6 เมื่อผู้ใช้กลับมาสมัครใช้บริการอีกครั้งด้วยตนเอง วันที่เรียกเก็บเงินจะเปลี่ยนเป็นวันที่กลับมาสมัครใช้บริการด้วยตนเอง

เมื่อมีการหยุดการสมัครใช้บริการของผู้ใช้ไว้ชั่วคราว คลังการเรียกเก็บเงินของ Play จะไม่แสดงการสมัครใช้บริการผ่านวิธี queryPurchasesAsync() หากการสมัครใช้บริการกลับมาทำงานอีกครั้ง 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_RENEWED หากการสมัครใช้บริการกลับมาทำงานอีกครั้งโดยอัตโนมัติเมื่อสิ้นสุดระยะเวลาหยุดชั่วคราว หรือหากผู้ใช้เลือกที่จะกลับมาสมัครใช้บริการอีกครั้งด้วยตนเอง การดำเนินการนี้ควรทำตามที่อธิบายไว้ในการต่ออายุ

ระบบจะส่งข้อความ SubscriptionNotification ที่มีประเภท SUBSCRIPTION_ON_HOLD หากการชำระเงินไม่สำเร็จขณะพยายามสมัครใช้บริการอีกครั้งหลังจากหยุดชั่วคราว ปัญหานี้ควรได้รับการแก้ไขตามที่อธิบายไว้ในการระงับบัญชี

สมัครอีกครั้ง

สำหรับแพ็กเกจเริ่มต้นของการสมัครใช้บริการแบบต่ออายุใหม่อัตโนมัติ Google Play Store อาจแสดงปุ่มสมัครใช้บริการอีกครั้ง ปุ่มนี้ช่วยให้ผู้ใช้ได้รับสิทธิ์เข้าถึงการสมัครใช้บริการอีกครั้ง ข้อมูลนี้อาจไม่ปรากฏด้วยเหตุผลหลายประการ เช่น เมื่อการสมัครใช้บริการหมดอายุไปนานแล้ว

รูปที่ 7 ส่วนบัญชี > การสมัครใช้บริการของแอป Google Play Store ที่แสดงการสมัครใช้บริการที่ยกเลิกแล้วพร้อมปุ่มสมัครใช้บริการอีกครั้ง

แม้ว่าปุ่มจะมีป้ายกำกับว่าสมัครใช้บริการอีกครั้งเสมอ แต่ฟังก์ชันการทำงานจะขึ้นอยู่กับสถานะการสมัครใช้บริการ

ขณะยกเลิกการสมัครใช้บริการแต่ยังไม่หมดอายุ ผู้ใช้จะยังคงสมัครใช้บริการอยู่และรับสิทธิประโยชน์ของการสมัครใช้บริการ หากผู้ใช้แตะ "สมัครใช้บริการอีกครั้ง" ระบบจะยกเลิกการยกเลิกและต่ออายุการสมัครใช้บริการต่อไป การดำเนินการนี้เรียกว่ากู้คืนในเอกสารประกอบและ API สำหรับนักพัฒนาแอป Play

หลังจากการสมัครใช้บริการแบบต่ออายุใหม่อัตโนมัติหมดอายุแล้ว คุณสามารถอนุญาตให้ผู้ใช้ซื้อแพ็กเกจเริ่มต้นของการสมัครใช้บริการเดียวกันได้ การดำเนินการนี้เรียกว่าสมัครใช้บริการอีกครั้งในเอกสารประกอบและ API สำหรับนักพัฒนาแอป Play คุณสามารถกําหนดค่าตัวเลือกนี้สำหรับแพ็กเกจเริ่มต้นแต่ละรายการใน 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
      ...
    }
  ],
}

สมัครใช้บริการอีกครั้งหลังจากหมดอายุ

หากกำหนดค่าแพ็กเกจเริ่มต้นแบบต่ออายุใหม่อัตโนมัติโดยใช้ Google Play Console หรือ API เพื่ออนุญาตให้สมัครใช้บริการอีกครั้ง ผู้ใช้จะซื้อการสมัครใช้บริการที่หมดอายุแล้วอีกครั้งใน Google Play Store ได้

รายการเหล่านี้เป็นการซื้อใหม่ Google Play จะออกโทเค็นการซื้อใหม่ และแบ็กเอนด์ของคุณจะได้รับ RTDN ประเภท SUBSCRIPTION_PURCHASED สถานะการซื้อสำหรับการซื้อนอกแอปประเภทนี้จะไม่รวม linkedPurchaseToken ที่เชื่อมโยงกับการซื้อครั้งแรกในกรณีนี้ เนื่องจากการสมัครใช้บริการครั้งแรกหมดอายุแล้ว รายการเหล่านี้คือการซื้อใหม่ซึ่งแบ็กเอนด์ต้องดำเนินการและรับทราบเช่นเดียวกับการซื้ออื่นๆ

การอัปเกรด ดาวน์เกรด และการสมัครใช้บริการอีกครั้ง

เมื่อผู้ใช้อัปเกรด ดาวน์เกรด หรือลงชื่อสมัครใช้หลังจากการยกเลิกจากแอปของคุณก่อนที่การสมัครใช้บริการจะหมดอายุ ระบบจะยกเลิกการสมัครใช้บริการเดิมและสร้างการสมัครใช้บริการใหม่ด้วยโทเค็นการซื้อใหม่

นอกจากนี้ ทรัพยากรการสมัครใช้บริการที่แสดงผลจาก Google Play Developer API จะมีlinkedPurchaseToken ช่องที่ระบุการซื้อเก่าซึ่งผู้ใช้ได้อัปเกรด ดาวน์เกรด หรือสมัครใช้บริการอีกครั้ง คุณสามารถใช้โทเค็นการซื้อในช่องดังกล่าวเพื่อค้นหาการสมัครใช้บริการเก่าและระบุบัญชีผู้ใช้ที่มีอยู่เพื่อให้เชื่อมโยงการซื้อใหม่กับบัญชีเดียวกันได้

คุณต้องยอมรับการสมัครใช้บริการที่มีอยู่ก่อนจึงจะเสนอตัวเลือกการอัปเกรด ดาวน์เกรด หรือสมัครใช้บริการอีกครั้งให้แก่ผู้ใช้ในแอปได้ ระบบจะบล็อกการเปลี่ยนแปลงแพ็กเกจหรือการสมัครใช้บริการอีกครั้งหากการสมัครใช้บริการที่มีอยู่ยังรอการยืนยัน

หากผู้ใช้ซื้อการอัปเกรด ดาวน์เกรด หรือสมัครใช้บริการอีกครั้งสำเร็จ การดำเนินการนี้ถือเป็นการซื้อใหม่ซึ่งคุณต้องรับทราบ วิธีที่เราแนะนำในการดำเนินการนี้คือการใช้ 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
      }
    }
  ],
}

การเปลี่ยนแปลงราคา

ดูคู่มือแนวทางปฏิบัติแนะนำสำหรับการเปลี่ยนแปลงราคาเพื่อดูข้อมูลเกี่ยวกับการเปลี่ยนแปลงราคาการสมัครใช้บริการแบบต่ออายุใหม่อัตโนมัติและการแจ้งให้ผู้ใช้ทราบตามความเหมาะสม

เมื่อการเปลี่ยนแปลงราคามีผลกับสมาชิกปัจจุบันในลักษณะเลือกใช้ คุณจะได้รับ RTDN หากผู้ใช้ดำเนินการเพื่อยืนยันหรือปฏิเสธราคาใหม่

จัดการการยืนยันของผู้ใช้เกี่ยวกับการเปลี่ยนแปลงราคาแบบเลือกใช้

เมื่อผู้ใช้ยอมรับการขึ้นราคาค่าสมัครใช้บริการ คุณจะได้รับข้อความ SubscriptionNotification ประเภท SUBSCRIPTION_PRICE_CHANGED_CONFIRMED เมื่อมีการลดราคาแบบไม่ได้ขอให้ผู้ใช้ยินยอม หรือเมื่อมีการขึ้นราคาการสมัครใช้บริการอีกครั้ง คุณจะได้รับSubscriptionNotificationข้อความประเภท SUBSCRIPTION_RENEWED โปรดถือว่าการแจ้งเตือนนี้เหมือนกับการต่ออายุอื่นๆ

จัดการกรณีที่ผู้ใช้ไม่ยอมรับการขึ้นราคาแบบขอให้ผู้ใช้ยินยอม

หากผู้ใช้ไม่ยอมรับการขึ้นราคาแบบขอให้ผู้ใช้ยินยอมก่อนที่ผู้ใช้จะต้องต่ออายุในราคาที่สูงขึ้น ระบบจะยกเลิกการสมัครใช้บริการของผู้ใช้โดยอัตโนมัติและคุณจะได้รับข้อความ SubscriptionNotification ที่มีประเภท SUBSCRIPTION_CANCELED จัดการเหตุการณ์นี้ตามที่อธิบายไว้ในการยกเลิก

นอกจากนี้ ผู้ใช้ยังยกเลิกการสมัครใช้บริการสำหรับการขึ้นราคาแบบไม่ได้ขอให้ผู้ใช้ยินยอมได้โดยทำตามกลไกเดียวกัน

จัดการวงจรของแพ็กเกจแบบชำระเงินล่วงหน้า

คุณต้องรับทราบแพ็กเกจแบบชำระเงินล่วงหน้าหลังจากการซื้อใหม่แต่ละครั้ง เช่นเดียวกับการสมัครใช้บริการแบบต่ออายุใหม่อัตโนมัติ ในกรณีของแพ็กเกจแบบชำระเงินล่วงหน้า คุณต้องดำเนินการทั้งการซื้อครั้งแรกและการเติมเงินให้เสร็จสมบูรณ์ เนื่องจากผู้ใช้ต้องดำเนินการตามขั้นตอนการซื้อทุกครั้ง

เนื่องจากแพ็กเกจแบบชำระเงินล่วงหน้าอาจมีระยะเวลาสั้น คุณจึงควรรับทราบการซื้อโดยเร็วที่สุด แพ็กเกจแบบชำระเงินล่วงหน้าที่มีระยะเวลาตั้งแต่ 1 สัปดาห์ขึ้นไปต้องได้รับการตอบรับภายใน 3 วัน แพ็กเกจแบบชำระเงินล่วงหน้าที่มีระยะเวลาน้อยกว่า 1 สัปดาห์ต้องได้รับการยอมรับภายในครึ่งหนึ่งของระยะเวลาแพ็กเกจ ตัวอย่างเช่น นักพัฒนาแอปมีเวลา 1.5 วันในการตอบรับการซื้อแพ็กเกจแบบชำระเงินล่วงหน้า 3 วัน

รูปที่ 8 สถานะวงจรของลูกค้าและเหตุการณ์การเปลี่ยนสถานะสําหรับการซื้อการสมัครใช้บริการ

ระบบจะส่งข้อความ 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 ในแหล่งข้อมูลการสมัครใช้บริการ

แพ็กเกจแบบชำระเงินล่วงหน้าจะไม่ต่ออายุใหม่อัตโนมัติ จึงยกเลิกไม่ได้ หากต้องการยกเลิกแพ็กเกจแบบชำระเงินล่วงหน้า ผู้ใช้สามารถปล่อยให้แพ็กเกจหมดอายุได้