เกี่ยวกับการสมัครใช้บริการ

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

หากยังไม่ได้กำหนดค่าผลิตภัณฑ์ที่ต้องสมัครใช้บริการสำหรับแอป โปรดดูหัวข้อสร้างและกำหนดค่าผลิตภัณฑ์

ภาพรวมการสมัครใช้บริการ

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

คุณมีการสมัครใช้บริการหลายรายการภายในแอปเดียวกันได้ เพื่อแสดงชุดสิทธิประโยชน์ที่แตกต่างกัน หรือเพื่อแสดงชุดสิทธิประโยชน์เดียวที่มีระดับต่างกัน (เช่น ระดับ "Silver" และ "Gold")

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

ดูภาพรวมโดยละเอียดของผลิตภัณฑ์ที่ต้องสมัครใช้บริการ แพ็กเกจพื้นฐาน และข้อเสนอได้ที่เอกสารประกอบในศูนย์ช่วยเหลือของ Play Console

การผสานรวมแพ็กเกจแบบชำระเงินล่วงหน้า

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

หากต้องการเติมเงิน ให้เปิดขั้นตอนการเรียกเก็บเงินเช่นเดียวกับการซื้อครั้งแรก คุณไม่จำเป็นต้องระบุว่าการซื้อเป็นการเติมเงิน

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

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

  • รหัสคำสั่งซื้อ
  • เวลาที่ซื้อ
  • ลายเซ็น
  • โทเค็นการซื้อ
  • รับทราบแล้ว

ฟิลด์ Purchase ต่อไปนี้จะมีข้อมูลเดียวกันกับที่พบในการซื้อครั้งแรกเสมอ

  • ชื่อแพ็กเกจ
  • สถานะการซื้อ
  • ผลิตภัณฑ์
  • การต่ออายุใหม่อัตโนมัติ

การตอบรับการซื้อแบบชำระล่วงหน้า

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

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

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

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

การผสานรวมการสมัครใช้บริการแบบผ่อนชำระ

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

ข้อควรพิจารณาเพิ่มเติมสำหรับการสมัครใช้บริการแบบผ่อนชำระ

  • ประเทศที่พร้อมให้บริการ: ฟีเจอร์การสมัครใช้บริการแบบผ่อนชำระพร้อมให้บริการในบราซิล ฝรั่งเศส อิตาลี และสเปนเท่านั้น (โปรดตรวจสอบความพร้อมให้บริการล่าสุดในคอนโซล)
  • การกำหนดราคา: เมื่อกำหนดราคาสำหรับการสมัครใช้บริการแบบผ่อนชำระใน Console ราคาจะแสดงถึงจำนวนเงินที่ชำระรายเดือน ซึ่งเมื่อรวมกับระยะเวลาผูกมัดที่ตั้งไว้ ก็จะเป็นยอดรวมสำหรับการสมัครใช้บริการในหน้าจอการซื้อ
  • ระยะเวลาผูกมัด: ระยะเวลาทั้งหมดของการสมัครใช้บริการครั้งแรกที่ผูกมัด ซึ่งจะต้องชําระเงินรายเดือน ตัวอย่างเช่น หากแพ็กเกจเริ่มต้นมีระยะเวลาผูกมัด 15 เดือน ผู้ใช้จะต้องชำระเงินรายเดือน 15 ครั้งในช่วงระยะเวลาดังกล่าว
  • การต่ออายุ: ในบริบทของการสมัครใช้บริการแบบผ่อนชำระ "การต่ออายุ" หมายถึงการสิ้นสุดระยะเวลาผูกมัด ไม่ว่าจะเป็นระยะเวลาผูกมัดเริ่มต้นหรือระยะเวลาผูกมัดต่อๆ ไป หลังจากลงชื่อสมัครใช้ครั้งแรกแล้ว การต่ออายุครั้งแรกจะเกิดขึ้นเมื่อครบระยะเวลาผูกมัดเริ่มต้น การต่ออายุครั้งต่อๆ ไปจะเกิดขึ้นหลังจากผ่านระยะเวลาการปฏิบัติตามข้อกำหนดแต่ละครั้ง ประเภทการต่ออายุสำหรับการสมัครใช้บริการแบบผ่อนชำระอาจเป็น "ต่ออายุใหม่อัตโนมัติแบบรายเดือน" หรือ "ต่ออายุใหม่อัตโนมัติในระยะเวลาเดิม" สำหรับ "ต่ออายุใหม่อัตโนมัติทุกเดือน" จะไม่มีภาระผูกมัดเพิ่มเติมและแพ็กเกจจะทำงานเหมือนการสมัครใช้บริการรายเดือนที่การเรียกเก็บเงินค่าสมัครใช้บริการรายเดือนแต่ละครั้งเป็นการต่ออายุ
  • ระยะเวลาที่เรียกเก็บเงิน: ในบริบทของการสมัครใช้บริการแบบผ่อนชำระ หมายถึงช่วงเวลาที่เกิดซ้ำซึ่งมีการชําระเงินแต่ละครั้งตามที่ระบุไว้ในแพ็กเกจเริ่มต้น
  • ลักษณะการทํางานของการเปลี่ยนแปลงแพ็กเกจเทียบกับการเปลี่ยนแปลงราคา: การเปลี่ยนแปลงราคาและการยกเลิกจะถือเป็นความมุ่งมั่นที่แน่วแน่ ซึ่งหมายความว่าหากผู้ใช้ต้องการยกเลิกหรือนักพัฒนาแอปต้องการเปลี่ยนราคา การเปลี่ยนแปลงจะมีผลเมื่อสิ้นสุดระยะเวลาผูกมัด สำหรับการเปลี่ยนแปลงแพ็กเกจ สัญญาผูกมัดจะไม่ถือเป็นสัญญาที่แน่นอน ซึ่งหมายความว่าคุณไม่จำเป็นต้องรอจนกว่าจะสิ้นสุดระยะเวลาการผูกมัดเพื่อเปลี่ยนแพ็กเกจ การเปลี่ยนแปลงจะมีผลทันทีหรือในวันที่ชำระเงินครั้งถัดไปโดยขึ้นอยู่กับโหมดการเปลี่ยนทดแทนที่ตั้งไว้
  • การเปลี่ยนแปลงแพ็กเกจการสมัครใช้บริการเดียวกัน: ไม่อนุญาตให้เปลี่ยนแปลงแพ็กเกจจากแพ็กเกจเริ่มต้นแบบผ่อนชำระเป็นแพ็กเกจเริ่มต้นแบบไม่ผ่อนชำระของผลิตภัณฑ์การสมัครใช้บริการเดียวกัน
  • การแจ้งเตือนแบบเรียลไทม์สำหรับนักพัฒนาแอป (RTDN): ระบบจะส่งSUBSCRIPTION_CANCELLATION_SCHEDULED RTDN ทันทีที่ผู้ใช้เริ่มยกเลิกเมื่อยังมีการชำระเงินเหลืออยู่ในช่วงระยะเวลาผูกมัด การยกเลิกจะอยู่ระหว่างรอดำเนินการและจะมีผลเมื่อสิ้นสุดระยะเวลาผูกมัดเท่านั้น จากนั้น หากผู้ใช้ไม่กู้คืน ระบบจะส่ง SUBSCRIPTION_CANCELED และ SUBSCRIPTION_EXPIRED RTDN เมื่อสิ้นสุดระยะเวลาผูกมัด

  • การชำระคืน / การสร้างรายได้: การชำระคืนให้แก่นักพัฒนาแอปจะเกิดขึ้นเมื่อผู้ใช้ชำระเงินรายเดือน โดยขึ้นอยู่กับข้อกำหนดเดียวกันกับการสมัครใช้บริการอื่นๆ ทั้งหมด นักพัฒนาแอปจะไม่ได้รับการชำระเงินล่วงหน้าเมื่อผู้ใช้ลงชื่อสมัครใช้บริการแบบผ่อนชำระ

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

  • ความพร้อมให้บริการของ Play Billing Library: ช่อง installmentDetails ใช้ได้กับ PBL 7 ขึ้นไปเท่านั้น สำหรับ PBL 5 ขึ้นไป ระบบจะแสดงการสมัครใช้บริการแบบผ่อนชำระโดยใช้ queryProductDetails() แต่การสมัครใช้บริการจะไม่รวมข้อมูลการผ่อนชำระโดยละเอียด เช่น จํานวนการชําระเงินตามสัญญาของแพ็กเกจ

ใช้ Deep Link เพื่ออนุญาตให้ผู้ใช้จัดการการสมัครใช้บริการ

แอปควรมีลิงก์ในหน้าจอการตั้งค่าหรือค่ากําหนดที่อนุญาตให้ผู้ใช้จัดการการติดตาม ซึ่งคุณรวมไว้ในรูปลักษณ์ที่ดูเป็นธรรมชาติของแอปได้

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

ใช้ URL ต่อไปนี้เพื่อนำผู้ใช้ไปยังหน้าที่แสดงการติดตามทั้งหมด ดังที่แสดงในรูปภาพ 1 และ 2

https://play.google.com/store/account/subscriptions
หน้าจอการสมัครใช้บริการของ Play Store จะแสดงสถานะของการสมัครใช้บริการทั้งหมดที่เรียกเก็บเงินจาก Google Play ของผู้ใช้
รูปที่ 1 หน้าจอการสมัครใช้บริการของ Play Store จะแสดงสถานะของการสมัครใช้บริการทั้งหมดที่เรียกเก็บเงินจาก Google Play ของผู้ใช้


แตะการสมัครใช้บริการเพื่อดูรายละเอียดเพิ่มเติม
รูปที่ 2 แตะการสมัครใช้บริการเพื่อดูรายละเอียดเพิ่มเติม

Deep Link นี้อาจมีประโยชน์ในการช่วยผู้ใช้กู้คืนการสมัครใช้บริการที่ยกเลิกไปแล้วจากศูนย์การสมัครใช้บริการของ Play Store

หากต้องการลิงก์ไปยังหน้าการจัดการของการสมัครใช้บริการที่ยังไม่หมดอายุโดยตรง ให้ระบุชื่อแพ็กเกจและ productId ที่เชื่อมโยงกับการสมัครใช้บริการที่ซื้อ หากต้องการระบุ productId ของการสมัครใช้บริการที่มีอยู่แบบเป็นโปรแกรม ให้ค้นหาแบ็กเอนด์ของแอปหรือเรียกใช้ BillingClient.queryPurchasesAsync() เพื่อดูรายการการสมัครใช้บริการที่เชื่อมโยงกับผู้ใช้รายใดรายหนึ่ง การสมัครใช้บริการแต่ละรายการจะมีproductIdที่เกี่ยวข้องเป็นส่วนหนึ่งของข้อมูลสถานะการสมัครใช้บริการ ออบเจ็กต์ SubscriptionPurchaseLineItem แต่ละรายการที่เชื่อมโยงกับการซื้อการสมัครใช้บริการจะมีค่า productId ที่เชื่อมโยงกับการสมัครใช้บริการที่ผู้ใช้ซื้อในรายการโฆษณานั้น

ใช้ URL ต่อไปนี้เพื่อนำผู้ใช้ไปยังหน้าจอการจัดการการสมัครใช้บริการที่เฉพาะเจาะจง โดยแทนที่ "your-sub-product-id" และ "your-app-package" ด้วย productId และชื่อแพ็กเกจแอปตามลำดับ

https://play.google.com/store/account/subscriptions?sku=your-sub-product-id&package=your-app-package

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

อนุญาตให้ผู้ใช้อัปเกรด ดาวน์เกรด หรือเปลี่ยนการสมัครใช้บริการ

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

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

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

รูปที่ 3 แสดงตัวอย่างแอปที่มี 3 แพ็กเกจ ได้แก่

แอปนี้มีแพ็กเกจการสมัครใช้บริการ 3 ระดับ
รูปที่ 3 แอปนี้มีแพ็กเกจการสมัครใช้บริการ 3 ระดับ

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

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

โหมดการเปลี่ยนทดแทน

ตารางต่อไปนี้แสดงโหมดการเปลี่ยนทดแทนที่ใช้ได้และตัวอย่างการใช้งาน รวมถึงจำนวนการชำระเงินที่ถือว่าชำระแล้ว

โหมดการเปลี่ยนทดแทน

คำอธิบาย

ตัวอย่างการใช้งาน

การชำระเงินตามสัญญาที่บันทึกว่าชำระแล้ว (สำหรับการแทนที่การสมัครใช้บริการแบบผ่อนชำระ)

WITH_TIME_PRORATION

การสมัครใช้บริการจะอัปเกรดหรือดาวน์เกรดทันที ระบบจะปรับเวลาที่เหลือตามส่วนต่างของราคา และนำไปเป็นเครดิตสำหรับการสมัครใช้บริการใหม่โดยเลื่อนวันที่เรียกเก็บเงินครั้งถัดไปไปข้างหน้า นี่คือลักษณะการทำงานเริ่มต้น

อัปเกรดเป็นแพ็กเกจที่ราคาแพงขึ้นโดยไม่ต้องชำระเงินเพิ่มเติมในทันที

0

CHARGE_PRORATED_PRICE

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

หมายเหตุ: ตัวเลือกนี้ใช้ได้กับการอัปเกรดการสมัครใช้บริการเท่านั้น โดยที่ราคาต่อหน่วยเวลาจะเพิ่มขึ้น

อัปเกรดเป็นแพ็กเกจที่ราคาแพงขึ้นโดยไม่มีการเปลี่ยนแปลงวันที่เรียกเก็บเงิน

1

CHARGE_FULL_PRICE

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

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

อัปเกรดจากระยะเวลาการเรียกเก็บเงินที่สั้นลงเป็นระยะเวลาที่นานขึ้น

1 (หมายเหตุ: 0 หากการสมัครใช้บริการใหม่มีช่วงทดลองใช้ฟรี)

WITHOUT_PRORATION

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

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

0

DEFERRED

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

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

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

ดาวน์เกรดเป็นแพ็กเกจที่ราคาไม่แพง

1

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

ตั้งค่าโหมดการเปลี่ยนทดแทนสำหรับการซื้อ

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

สมัครใช้บริการอีกครั้งหรือเปลี่ยนแพ็กเกจภายในการสมัครใช้บริการเดียวกัน

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

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

เปลี่ยนแพ็กเกจสำหรับการสมัครใช้บริการต่างๆ หรือลบล้างโหมดการเปลี่ยนทดแทนเริ่มต้น

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

โปรดคำนึงถึงข้อจำกัดต่อไปนี้เพื่อให้ระบุ SubscriptionUpdateParams เป็นส่วนหนึ่งของการกำหนดค่าขั้นตอนการซื้อรันไทม์ได้อย่างถูกต้อง

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

ตัวอย่างและลักษณะการทํางานของการเปลี่ยนทดแทน

โปรดลองดูสถานการณ์ต่อไปนี้เพื่อให้เข้าใจวิธีการทำงานของโหมดการแบ่งตามสัดส่วนแต่ละโหมด

Samwise สมัครใช้บริการเนื้อหาออนไลน์จากแอป Country Gardener โดยสมัครใช้บริการเนื้อหาเวอร์ชัน Tier 1 แบบรายเดือน ซึ่งเป็นเนื้อหาที่เป็นข้อความเท่านั้น การสมัครใช้บริการนี้คิดค่าบริการ $2 ต่อเดือน และจะต่ออายุในวันแรกของเดือน

ในวันที่ 15 เมษายน Samwise เลือกที่จะอัปเกรดการสมัครใช้บริการระดับ 2 เป็นเวอร์ชันรายปี ซึ่งรวมการอัปเดตวิดีโอและมีค่าใช้จ่าย $36 ต่อปี

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

WITH_TIME_PRORATION

การสมัครใช้บริการ Tier 1 ของ Samwise จะสิ้นสุดลงทันที เนื่องจากเขาชำระเงินเต็มเดือน (1-30 เมษายน) แต่อัปเกรดในช่วงกลางระยะเวลาการสมัครใช้บริการ ระบบจึงหักค่าสมัครใช้บริการครึ่งเดือน ($1) ไปใช้กับการสมัครใช้บริการใหม่ อย่างไรก็ตาม เนื่องจากค่าสมัครใช้บริการใหม่อยู่ที่ $36 ต่อปี ยอดคงเหลือเครดิต $1 จึงจ่ายได้เพียง 10 วัน (16-25 เมษายน) ดังนั้นในวันที่ 26 เมษายน ระบบจะเรียกเก็บเงิน $36 สำหรับค่าสมัครใช้บริการใหม่ และอีก $36 ในวันที่ 26 เมษายนของทุกปีต่อจากนี้

คุณควรเรียกใช้ PurchasesUpdatedListener ของแอปทันทีที่การซื้อสำเร็จ และคุณจะเรียกข้อมูลการซื้อใหม่เป็นส่วนหนึ่งของการเรียกใช้ queryPurchasesAsync() ได้ ระบบแบ็กเอนด์ของคุณจะได้รับSUBSCRIPTION_PURCHASEDการแจ้งเตือนแบบเรียลไทม์สำหรับนักพัฒนาแอปทันที

CHARGE_PRORATED_PRICE

คุณใช้โหมดนี้ได้เนื่องจากราคาการสมัครใช้บริการระดับ 2 ต่อหน่วยเวลา ($36/ปี = $3/เดือน) สูงกว่าราคาการสมัครใช้บริการระดับ 1 ต่อหน่วยเวลา ($2/เดือน) การสมัครใช้บริการ Tier 1 ของ Samwise จะสิ้นสุดลงทันที เนื่องจากเขาชำระเงินสำหรับทั้งเดือนแต่ใช้เพียงครึ่งเดือน ระบบจึงหักค่าสมัครใช้บริการครึ่งเดือน ($1) ไปใช้กับการสมัครใช้บริการใหม่ อย่างไรก็ตาม เนื่องจากการสมัครใช้บริการใหม่มีค่าใช้จ่าย $36/ปี 15 วันที่เหลือจึงมีค่าใช้จ่าย $1.50 ระบบจึงเรียกเก็บเงินส่วนต่าง $0.50 สำหรับการสมัครใช้บริการใหม่ ในวันที่ 1 พฤษภาคม ระบบจะเรียกเก็บเงิน Samwise 360 บาทสำหรับแพ็กเกจการสมัครใช้บริการใหม่ และเรียกเก็บอีก 360 บาทในวันที่ 1 พฤษภาคมของทุกปีหลังจากนั้น

คุณควรเรียกใช้ PurchasesUpdatedListener ของแอปทันทีที่การซื้อสำเร็จ และคุณจะเรียกข้อมูลการซื้อใหม่เป็นส่วนหนึ่งของการเรียกใช้ queryPurchasesAsync() ได้ ระบบแบ็กเอนด์ของคุณจะได้รับSUBSCRIPTION_PURCHASEDการแจ้งเตือนแบบเรียลไทม์สำหรับนักพัฒนาแอปทันที

WITHOUT_PRORATION

ระบบจะอัปเกรดการสมัครใช้บริการระดับ 1 ของ Samwise เป็นระดับ 2 ทันทีโดยไม่มีค่าใช้จ่ายเพิ่มเติม และในวันที่ 1 พฤษภาคม ระบบจะเรียกเก็บเงิน $36 สำหรับระดับการสมัครใช้บริการใหม่และอีก $36 ในวันที่ 1 พฤษภาคมของทุกปีต่อจากนี้

คุณควรเรียกใช้ PurchasesUpdatedListener ของแอปทันทีที่การซื้อสำเร็จ และคุณจะเรียกข้อมูลการซื้อใหม่เป็นส่วนหนึ่งของการเรียกใช้ queryPurchasesAsync() ได้ ระบบแบ็กเอนด์ของคุณจะได้รับSUBSCRIPTION_PURCHASEDการแจ้งเตือนแบบเรียลไทม์สำหรับนักพัฒนาแอปทันที

DEFERRED

การสมัครใช้บริการระดับ 1 ของ Samwise จะยังคงดำเนินต่อไปจนกว่าจะหมดอายุในวันที่ 30 เมษายน ในวันที่ 1 พฤษภาคม การสมัครใช้บริการระดับ 2 จะมีผล และระบบจะเรียกเก็บเงิน Samwise เป็นจำนวน $36 สำหรับแพ็กเกจการสมัครใช้บริการใหม่

คุณควรเรียกใช้ PurchasesUpdatedListener ของแอปทันทีที่การซื้อสำเร็จ และคุณจะเรียกข้อมูลการซื้อใหม่เป็นส่วนหนึ่งของการเรียกใช้ queryPurchasesAsync() ได้ ระบบแบ็กเอนด์ของคุณจะได้รับSUBSCRIPTION_PURCHASEDการแจ้งเตือนแบบเรียลไทม์สำหรับนักพัฒนาแอปทันที คุณควรดำเนินการซื้อในลักษณะเดียวกับที่ดำเนินการซื้อใหม่อื่นๆ ทั้งหมด ณ จุดนั้น โดยเฉพาะอย่างยิ่ง โปรดตรวจสอบว่าคุณรับทราบการซื้อใหม่ โปรดทราบว่าstartTimeของการสมัครใช้บริการใหม่จะสร้างขึ้นทันทีที่การแทนที่มีผล ซึ่งจะเกิดขึ้นเมื่อการสมัครใช้บริการเก่าหมดอายุ เมื่อถึงจุดนั้น คุณจะได้รับ SUBSCRIPTION_RENEWED RTDN สำหรับแพ็กเกจการสมัครใช้บริการใหม่ อ่านเพิ่มเติมเกี่ยวกับลักษณะการทํางานของ ReplacementMode.DEFERRED ในจัดการการเปลี่ยนทดแทนที่เลื่อน

CHARGE_FULL_PRICE

การสมัครใช้บริการ Tier 1 ของ Samwise จะสิ้นสุดลงทันที การสมัครใช้บริการระดับ 2 ของเขาจึงเริ่มต้นขึ้นในวันนี้และระบบเรียกเก็บเงินจากเขาเป็นจำนวน $36 เนื่องจากเขาชำระเงินสำหรับทั้งเดือนแต่ใช้ไปเพียงครึ่งเดือน ระบบจึงหักค่าสมัครใช้บริการครึ่งเดือน ($1) ไปใช้กับการสมัครใช้บริการใหม่ เนื่องจากการสมัครใช้บริการใหม่มีค่าใช้จ่าย $36/ปี เขาจะได้รับเวลาเพิ่ม 1/36 ของปีในระยะเวลาการสมัครใช้บริการ (~10 วัน) ดังนั้น การเรียกเก็บเงินครั้งถัดไปของ Samwise จะเป็น 1 ปีและ 10 วันนับจากวันนี้ในราคา $36 หลังจากนั้น ระบบจะเรียกเก็บเงินจากเขาปีละ $36

เมื่อเลือกโหมดการแบ่งตามสัดส่วน โปรดอ่านคำแนะนำในการเปลี่ยนทดแทน

ทริกเกอร์การเปลี่ยนแปลงการสมัครใช้บริการในแอป

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

Kotlin

val offerToken = productDetails
        .getSubscriptionOfferDetails(selectedOfferIndex)
        .getOfferToken()

val billingParams = BillingFlowParams.newBuilder().setProductDetailsParamsList(
       listOf(
           BillingFlowParams.ProductDetailsParams.newBuilder()
               .setProductDetails(productDetails)
               .setOfferToken(offerToken)
               .build()
       )
       ).setSubscriptionUpdateParams(
           BillingFlowParams.SubscriptionUpdateParams.newBuilder()
               .setOldPurchaseToken("old_purchase_token")
               .setSubscriptionReplacementMode(
                 BillingFlowParams.ReplacementMode.CHARGE_FULL_PRICE
               )
               .build()
       ).build()

billingClient.launchBillingFlow(
    activity,
    billingParams
   )
// ...

Java

String offerToken = productDetails
    .getSubscriptionOfferDetails(selectedOfferIndex)
    .getOfferToken();

BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
    .setProductDetailsParamsList(
        ImmuableList.of(
            ProductDetailsParams.newBuilder()
                // fetched via queryProductDetailsAsync
                .setProductDetails(productDetails)
                // offerToken can be found in
                // ProductDetails=>SubscriptionOfferDetails
                .setOfferToken(offerToken)
                .build()))
    .setSubscriptionUpdateParams(
        SubscriptionUpdateParams.newBuilder()
            // purchaseToken can be found in Purchase#getPurchaseToken
            .setOldPurchaseToken("old_purchase_token")
            .setSubscriptionReplacementMode(ReplacementMode.CHARGE_FULL_PRICE)
            .build())
    .build();

BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
// ...

คำแนะนำในการเปลี่ยนทดแทน

ตารางต่อไปนี้แสดงสถานการณ์การแบ่งตามสัดส่วนที่แตกต่างกันพร้อมกับสิ่งที่เราแนะนำสำหรับแต่ละสถานการณ์

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

จัดการการซื้อการเปลี่ยนแปลงการสมัครใช้บริการ

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

ลักษณะการทํางานในแอปจะเหมือนกับการซื้อใหม่ แอปของคุณจะได้รับผลลัพธ์ของการซื้อใหม่ใน PurchasesUpdatedListener และการซื้อใหม่จะพร้อมใช้งานใน queryPurchasesAsync

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

เมื่อได้รับโทเค็นการซื้อใหม่ ให้ทำตามกระบวนการยืนยันเดียวกับการยืนยันโทเค็นการซื้อใหม่ อย่าลืมรับทราบการซื้อเหล่านี้ด้วย BillingClient.acknowledgePurchase() จาก Google Play Billing Library หรือ Purchases.subscriptions:acknowledge จาก Google Play Developer API

จัดการการเปลี่ยนทดแทนที่เลื่อนออกไป

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

เมื่อคุณใช้ ReplacementMode.DEFERRED สำหรับการซื้อใหม่ queryPurchasesAsync() จะแสดงโทเค็นการซื้อใหม่หลังจากขั้นตอนการซื้อซึ่งจะยังคงเชื่อมโยงกับผลิตภัณฑ์เก่าจนกว่าการเปลี่ยนทดแทนแบบเลื่อนเวลาจะเกิดขึ้นในวันที่ต่ออายุครั้งถัดไป หลังจากนั้นจะมีการส่งคืนผลิตภัณฑ์ใหม่

ก่อนหน้านี้คุณสร้างประสบการณ์ของผู้ใช้แบบนี้ได้โดยใช้ ProrationMode.DEFERRED ที่เลิกใช้งานแล้ว แต่ ProrationMode.DEFERRED เลิกใช้งานแล้วใน Play Billing Library 6 ดูตารางต่อไปนี้เพื่อทำความเข้าใจความแตกต่างของลักษณะการทำงาน

เวลา

ProrationMode.DEFERRED (เลิกใช้งานแล้ว)

ReplacementMode.DEFERRED

ทันทีที่ขั้นตอนการซื้อเสร็จสมบูรณ์ (แอป)

PurchasesUpdatedListener จะเรียกใช้หลังจากการซื้อพร้อมสถานะว่าอัปเกรดหรือดาวน์เกรดสำเร็จหรือไม่

สิทธิ์ในแพ็กเกจเดิมจะยังคงอยู่จนถึงวันที่ต่ออายุครั้งถัดไป queryPurchasesAsync() จะแสดงผลออบเจ็กต์ Purchase ที่มีโทเค็นการซื้อเดิมและสิทธิ์เดิมจนกว่าจะมีการแทนที่

โทเค็นการซื้อใหม่ไม่แสดงขึ้น จึงดำเนินการไม่ได้ในขณะนี้

PurchasesUpdatedListener จะเรียกใช้หลังจากการซื้อพร้อมสถานะของการอัปเกรดหรือดาวน์เกรดว่าสำเร็จหรือไม่

queryPurchasesAsync() จะแสดงรายการที่ซื้อพร้อมโทเค็นการซื้อใหม่ทันที และการให้สิทธิ์เดิมที่เชื่อมโยงอยู่

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

ทันทีที่ขั้นตอนการซื้อเสร็จสมบูรณ์ (แบ็กเอนด์)

ระบบไม่ส่ง RTDN ของ SUBSCRIPTION_PURCHASED หลังจากขั้นตอนการซื้อ แบ็กเอนด์ยังไม่ทราบเกี่ยวกับการซื้อใหม่

ระบบจะส่ง RTDN ประเภท SUBSCRIPTION_PURCHASED ที่มี product_id เดิมทันทีหลังจากขั้นตอนการซื้อสําหรับโทเค็นการซื้อใหม่

การเรียกใช้เมธอด purchases.subscriptionsv2.get ด้วยโทเค็นการซื้อใหม่จะแสดงผลการซื้อที่มี "startTime" ซึ่งระบุเวลาซื้อพร้อมรายการโฆษณา 2 รายการ ดังนี้

  • รายการหนึ่งแสดงถึงการให้สิทธิ์เก่าและมี "expiryTime" ในอนาคต การให้สิทธิ์เดิมจะไม่ได้รับการต่ออายุและมี DeferredItemReplacement ที่มีผลิตภัณฑ์ของการให้สิทธิ์ใหม่ สถานะนี้บ่งบอกว่ามีการรอเปลี่ยนสิทธิ์เก่าเมื่อสิทธิ์ดังกล่าวหมดอายุ
  • 1 รายการแสดงสิทธิ์ที่ซื้อใหม่ ไม่ได้ตั้งค่า "expiryTime"

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

ในการเปลี่ยนทดแทน - การต่ออายุครั้งแรกหลังจากขั้นตอนการซื้อ (แอป)

queryPurchasesAsync() จะแสดงผลออบเจ็กต์การซื้อใหม่ที่มีโทเค็นการซื้อและสิทธิ์ใหม่

ตอนนี้ระบบแสดงโทเค็นการซื้อใหม่แล้ว จึงควรประมวลผล

queryPurchasesAsync() จะแสดงรายการที่ซื้อพร้อมโทเค็นการซื้อใหม่ทันที และการให้สิทธิ์ใหม่ที่เชื่อมโยงกับรายการดังกล่าว

การซื้อใหม่ควรได้รับการประมวลผลแล้วเมื่อขั้นตอนการซื้อเสร็จสมบูรณ์ ดังนั้นแอปไม่ควรดำเนินการพิเศษใดๆ นอกเหนือจากการตรวจสอบว่าได้ให้สิทธิ์ที่เหมาะสมแล้ว

ในการขออุปกรณ์เปลี่ยนทดแทน - การต่ออายุครั้งแรกหลังจากขั้นตอนการซื้อ (แบ็กเอนด์)

ตอนนี้ระบบจะประมวลผลและรับทราบการซื้อใหม่ได้เมื่อมีการส่ง RTDN รายการแรกที่มีสถานะ SUBSCRIPTION_RENEWED

linkedPurchaseToken ในทรัพยากรการสมัครใช้บริการสามารถใช้เพื่อระบุว่าผู้ใช้รายใดในแบ็กเอนด์การสมัครใช้บริการ (หากมี) ควรได้รับการอัปเดตสิทธิ์ใหม่

ระบบประมวลผลและรับทราบการซื้อใหม่เมื่อมีการส่ง RTDN ของ SUBSCRIPTION_PURCHASED สำหรับโทเค็นการซื้อใหม่และบันทึกเป็น "startTime"

เมื่อใช้ ReplacementMode.DEFERRED การต่ออายุครั้งแรกจะเป็นไปตามลักษณะการทํางานมาตรฐานของการต่ออายุอื่นๆ และคุณไม่จําเป็นต้องจัดการตรรกะพิเศษสําหรับการเปลี่ยนทดแทนเมื่อเกิดเหตุการณ์นี้

เมื่อเรียกใช้เมธอด purchases.subscriptionsv2.get ด้วยโทเค็นการซื้อใหม่ ระบบจะแสดงการซื้อที่มีรายการโฆษณา 2 รายการ ดังนี้

  • รายการหนึ่งแสดงถึงสิทธิ์เก่าซึ่งมี "expiryTime" อยู่ในอดีตและไม่มีการตั้งค่าสำหรับ DeferredItemReplacement
  • รายการหนึ่งแสดงถึงการให้สิทธิ์ใหม่ โดยมี `expiryTime` ในอนาคตและเปิดใช้ Flag auto_renewing_enabled

คุณควรใช้ ReplacementMode.DEFERRED ตั้งแต่นี้เป็นต้นไปแทน ProrationMode.DEFERRED ที่เลิกใช้งานแล้ว เนื่องจากมีการทำงานแบบเดียวกันเกี่ยวกับการเปลี่ยนแปลงการให้สิทธิ์ แต่มีวิธีจัดการการซื้อที่สอดคล้องกับลักษณะการทำงานสำหรับการซื้อใหม่อื่นๆ มากกว่า

การจัดการลูกค้า

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

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

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

แอปที่ไม่มี Billing Library 2.0 ขึ้นไป: ไม่

แอปที่มี Billing Library 2.0 ขึ้นไป: ได้ นักพัฒนาแอปสามารถเลือกไม่ใช้ในคอนโซลได้

เมื่อมีการเรียกเก็บเงินจากผู้ใช้

หากใช้ SKU เดียวกัน: สิ้นสุดช่วงเวลาที่เรียกเก็บเงินปัจจุบัน

หากใช้ SKU อื่น: ขึ้นอยู่กับโหมดการแบ่งตามสัดส่วน

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

ตรวจหาการเปลี่ยนแปลงสถานะการสมัครใช้บริการ

Deep Link ไปยัง Play Store

มี UI การลงชื่อสมัครใช้อีกครั้งในแอป จัดการการซื้อนอกแอป

ก่อนการสมัครใช้บริการจะหมดอายุ - ในแอป

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

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

  • เริ่มการซื้อการสมัครใช้บริการใหม่ด้วย SKU เดียวกัน
  • การสมัครใช้บริการใหม่จะแทนที่การสมัครใช้บริการเดิมและต่ออายุในวันที่หมดอายุเดียวกัน ระบบจะทำเครื่องหมายการสมัครใช้บริการเดิมว่าหมดอายุทันที
  • ตัวอย่างเช่น Achilles สมัครใช้บริการแอป Example Music และการสมัครใช้บริการจะหมดอายุในวันที่ 1 สิงหาคม ในวันที่ 10 กรกฎาคม เขาสมัครใช้บริการแบบ 1 เดือนอีกครั้งในราคาเดิมต่อเดือน การสมัครใช้บริการใหม่จะคิดค่าบริการตามเครดิตที่เหลืออยู่ ใช้งานได้ทันที และยังคงต่ออายุในวันที่ 1 สิงหาคม

หากต้องการเสนอราคาอื่น เช่น ช่วงทดลองใช้ฟรีใหม่หรือส่วนลดเพื่อดึงดูดผู้ใช้กลับมา คุณสามารถเสนอ SKU อื่นให้กับผู้ใช้แทนได้ โดยทำดังนี้

  • เริ่มอัปเกรดหรือดาวน์เกรดด้วย SKU อื่นโดยใช้โหมดการเปลี่ยนทดแทน WITHOUT_PRORATION
  • การสมัครใช้บริการใหม่จะแทนที่การสมัครใช้บริการเดิมและต่ออายุในวันที่หมดอายุเดียวกัน ระบบจะเรียกเก็บเงินจากผู้ใช้ในราคาของ SKU ใหม่ ซึ่งรวมถึงราคาช่วงแนะนำ (หากมี) ในวันที่หมดอายุเดิม หากการสมัครใช้บริการเดิมสร้างขึ้นโดยใช้รหัสบัญชีที่มีการสร้างความสับสน คุณควรส่งรหัสเดียวกันนั้นให้กับ BillingFlowParams เพื่ออัปเกรดและดาวน์เกรด
  • ตัวอย่างเช่น Achilles สมัครใช้บริการแอป Example Music และการสมัครใช้บริการจะหมดอายุในวันที่ 1 สิงหาคม ในวันที่ 10 กรกฎาคม เขาสมัครใช้บริการแบบรายปีในราคาช่วงแนะนำอีกครั้ง การสมัครใช้บริการใหม่จะใช้งานได้ทันที และระบบจะเรียกเก็บเงินจากผู้ใช้ในราคาช่วงแนะนำในวันที่ 1 สิงหาคม
  • หากคุณตัดสินใจที่จะรวมช่วงทดลองใช้ฟรีหรือราคาช่วงแนะนำไว้ใน SKU สำหรับการดึงดูดผู้ใช้ให้กลับมา ให้ตรวจสอบว่าผู้ใช้มีสิทธิ์โดยยกเลิกการเลือกช่องอนุญาตให้ทดลองใช้ฟรีได้ 1 ครั้งต่อแอปใน Google Play Console ซึ่งจะจำกัดให้ผู้ใช้ทดลองใช้ฟรีได้ 1 ครั้งต่อแอป

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

ก่อนการสมัครใช้บริการจะหมดอายุ - ใน Play Store

ขณะยกเลิกการสมัครใช้บริการแล้วแต่ยังใช้งานอยู่ ผู้ใช้สามารถคืนค่าการสมัครใช้บริการในศูนย์การสมัครใช้บริการของ Google Play ได้โดยคลิกสมัครใช้บริการอีกครั้ง (ก่อนหน้านี้คือกู้คืน) ซึ่งจะทำให้การสมัครใช้บริการและโทเค็นการซื้อเดิมอยู่เหมือนเดิม

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

ดูข้อมูลเพิ่มเติมเกี่ยวกับการคืนค่าการสมัครใช้บริการได้ที่การคืนค่า

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

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

  • หากต้องการมอบส่วนลดให้ผู้ใช้ คุณอาจต้องระบุรหัสผลิตภัณฑ์ที่มีราคาพิเศษสำหรับการสมัครใช้บริการ ซึ่งเรียกอีกอย่างว่า SKU สำหรับการดึงดูดผู้ใช้กลับมา คุณสามารถแสดงข้อเสนอในแอป หรือแจ้งให้ผู้ใช้ทราบเกี่ยวกับข้อเสนอนอกแอป เช่น ในอีเมล
  • หากต้องการเริ่มการสมัครใช้บริการเพื่อดึงดูดผู้ใช้ที่เลิกใช้งานให้กลับมา ให้เปิดขั้นตอนการซื้อในแอป Android โดยใช้ Google Play Billing Library กระบวนการนี้เหมือนกับการสมัครใช้บริการใหม่ แต่คุณกำหนด SKU ที่พร้อมให้บริการแก่ผู้ใช้ได้
  • หากตัดสินใจที่จะรวมช่วงทดลองใช้ฟรีหรือราคาช่วงแนะนำไว้ใน SKU สำหรับการดึงดูดผู้ใช้กลับมา โปรดตรวจสอบว่าผู้ใช้มีสิทธิ์โดยยกเลิกการเลือกช่องอนุญาตให้ทดลองใช้ฟรีได้ 1 ครั้งต่อแอปใน Google Play Console ซึ่งจะจำกัดให้ผู้ใช้ทดลองใช้ฟรีได้ 1 ครั้งต่อแอป
  • หากผู้ใช้สมัครใช้บริการ SKU เดียวกันอีกครั้ง ก็จะไม่มีสิทธิ์รับช่วงทดลองใช้ฟรีหรือราคาช่วงแนะนำอีกต่อไป ตรวจสอบว่า UI ของคุณแสดงข้อมูลนี้

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

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

หากเปิดใช้ ผู้ใช้จะสมัครใช้บริการ SKU เดิมอีกครั้งได้นานถึง 1 ปีหลังจากหมดอายุโดยคลิกสมัครใช้บริการอีกครั้งในศูนย์การสมัครใช้บริการของ Google Play ซึ่งจะสร้างโทเค็นการสมัครใช้บริการและการซื้อใหม่

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

การสมัครใช้บริการอีกครั้งถือเป็นการซื้อนอกแอป ดังนั้นโปรดปฏิบัติตามแนวทางปฏิบัติแนะนำสำหรับการจัดการการซื้อที่ดำเนินการนอกแอป

โปรโมตการสมัครใช้บริการ

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

สำหรับช่วงทดลองใช้ฟรี Google Play จะตรวจสอบว่าผู้ใช้มีวิธีการชำระเงินที่ถูกต้องก่อนที่จะเริ่มช่วงทดลองใช้ฟรี ผู้ใช้บางรายอาจเห็นการยืนยันนี้เป็นการกันวงเงินหรือมีการเรียกเก็บเงินในวิธีการชำระเงิน การกันวงเงินบัตรเครดิต/บัตรเดบิตหรือการเรียกเก็บเงินนี้เป็นการกันวงเงินบัตรเครดิต/บัตรเดบิตชั่วคราวและจะมีการดึงเงินคืนหรือคืนเงินในภายหลัง

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

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

ยกเลิก คืนเงิน หรือเพิกถอน

คุณสามารถใช้ Google Play Developer API เพื่อยกเลิก คืนเงิน หรือเพิกถอนการสมัครใช้บริการ ฟังก์ชันการทำงานนี้ยังใช้ได้ใน Google Play Console ด้วย

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

ตารางต่อไปนี้แสดงความแตกต่างระหว่างการยกเลิก การคืนเงิน และการเพิกถอน

หยุดการต่ออายุ คืนเงิน เพิกถอนสิทธิ์เข้าถึง
ยกเลิก มี ไม่ได้ ไม่
คืนเงิน ไม่ มี ไม่
เพิกถอน มี มี มี

เลื่อนการเรียกเก็บเงินสำหรับผู้สมัครใช้บริการ

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

สำหรับแพ็กเกจแบบชำระเงินล่วงหน้า คุณสามารถใช้การเรียกเก็บเงินที่รอตัดบัญชี API เพื่อเลื่อนเวลาหมดอายุ

การเรียกเก็บเงินที่เลื่อนเวลาช่วยให้คุณทำสิ่งต่อไปนี้ได้

  • ให้สิทธิ์เข้าถึงฟรีแก่ผู้ใช้เป็นข้อเสนอพิเศษ เช่น ให้สิทธิ์เข้าถึงฟรี 1 สัปดาห์สำหรับการซื้อภาพยนตร์
  • ให้สิทธิ์เข้าถึงฟรีแก่ลูกค้าเพื่อเป็นการแสดงความมีน้ำใจ

การเรียกเก็บเงินสามารถเลื่อนได้ตั้งแต่ 1 วันไปจนถึง 1 ปีต่อการเรียก API 1 ครั้ง หากต้องการเลื่อนการเรียกเก็บเงินออกไปอีก ให้เรียก API อีกครั้งก่อนวันที่เรียกเก็บเงินใหม่

ตัวอย่างเช่น Darcy สมัครใช้บริการเนื้อหาออนไลน์สำหรับแอป Fishing Quarterly รายเดือน โดยปกติระบบจะเรียกเก็บเงินจากเธอเป็นจำนวน £1.25 ในวันแรกของเดือน ในเดือนมีนาคม เธอได้เข้าร่วมแบบสํารวจออนไลน์สําหรับผู้เผยแพร่โฆษณาแอป ผู้เผยแพร่โฆษณาจึงตอบแทนเธอด้วยการให้สิทธิ์ใช้ฟรี 6 สัปดาห์โดยเลื่อนการชำระเงินครั้งถัดไปไปจนถึงวันที่ 15 พฤษภาคม ซึ่งเป็นเวลา 6 สัปดาห์หลังจากวันที่เรียกเก็บเงินที่กำหนดไว้ก่อนหน้านี้ของวันที่ 1 เมษายน ระบบจะไม่เรียกเก็บเงินจาก Darcy สำหรับเดือนเมษายนหรือต้นเดือนพฤษภาคม และ Darcy จะยังคงเข้าถึงเนื้อหาได้ ในวันที่ 15 พฤษภาคม ระบบจะเรียกเก็บค่าสมัครใช้บริการตามปกติเป็นจํานวนเงิน ฿40.00 ของเดือนนั้น วันที่ต่ออายุครั้งถัดไปของเธอคือวันที่ 15 มิถุนายน

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

การจัดการการปฏิเสธการชำระเงิน

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

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

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

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

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

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

การรับส่งข้อความในแอป

หากคุณเปิดใช้การรับส่งข้อความในแอปด้วย InAppMessageCategoryId.TRANSACTIONAL Google Play จะแสดงการรับส่งข้อความแก่ผู้ใช้ในช่วงระยะเวลาผ่อนผันและช่วงที่มีการระงับบัญชี 1 ครั้งต่อวัน รวมถึงให้โอกาสผู้ใช้แก้ไขการชำระเงินโดยไม่ต้องออกจากแอป

แซนบาร์แจ้งให้ผู้ใช้แก้ไขการชําระเงิน
รูปที่ 20 แบนเนอร์แจ้งเตือนที่แจ้งให้ผู้ใช้แก้ไขการชำระเงิน

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

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

ผสานรวมการรับส่งข้อความในแอป

หากต้องการแสดงการรับส่งข้อความในแอปต่อผู้ใช้ ให้ใช้ BillingClient.showInAppMessages()

ต่อไปนี้เป็นตัวอย่างการเรียกใช้ขั้นตอนการรับส่งข้อความในแอป

Kotlin

val inAppMessageParams = InAppMessageParams.newBuilder()
        .addInAppMessageCategoryToShow(InAppMessageCategoryId.TRANSACTIONAL)
        .build()

billingClient.showInAppMessages(activity,
        inAppMessageParams,
        object : InAppMessageResponseListener() {
            override fun onInAppMessageResponse(inAppMessageResult: InAppMessageResult) {
                if (inAppMessageResult.responseCode == InAppMessageResponseCode.NO_ACTION_NEEDED) {
                    // The flow has finished and there is no action needed from developers.
                } else if (inAppMessageResult.responseCode
                        == InAppMessageResponseCode.SUBSCRIPTION_STATUS_UPDATED) {
                    // The subscription status changed. For example, a subscription
                    // has been recovered from a suspend state. Developers should
                    // expect the purchase token to be returned with this response
                    // code and use the purchase token with the Google Play
                    // Developer API.
                }
            }
        })

Java

InAppMessageParams inAppMessageParams = InAppMessageParams.newBuilder()
        .addInAppMessageCategoryToShow(InAppMessageCategoryId.TRANSACTIONAL)
        .build();

billingClient.showInAppMessages(activity,
        inAppMessageParams,
        new InAppMessageResponseListener() {
            @Override
            public void onInAppMessageResponse(InAppMessageResult inAppMessageResult) {
                if (inAppMessageResult.responseCode
                        == InAppMessageResponseCode.NO_ACTION_NEEDED) {
                    // The flow has finished and there is no action needed from developers.
                } else if (inAppMessageResult.responseCode
                        == InAppMessageResponseCode.SUBSCRIPTION_STATUS_UPDATED) {
                    // The subscription status changed. For example, a subscription
                    // has been recovered from a suspend state. Developers should
                    // expect the purchase token to be returned with this response
                    // code and use the purchase token with the Google Play
                    // Developer API.
                }
            }
        });

จัดการธุรกรรมการสมัครใช้บริการที่รอดำเนินการ

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

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

การเติมเงิน อัปเกรด หรือดาวน์เกรดที่มีธุรกรรมที่รอดำเนินการจะเกี่ยวข้องกับการเปลี่ยนแปลงสถานะทั้งสำหรับการสมัครใช้บริการแบบเก่าและแบบใหม่ เมื่อผู้ใช้เริ่มธุรกรรมยอดเงินที่รอดําเนินการ อัปเกรด หรือดาวน์เกรด แอปของคุณจะได้รับ Purchase สําหรับการสมัครใช้บริการเดิมที่มีออบเจ็กต์ PendingPurchaseUpdate ขณะนี้ผู้ใช้ยังคงเป็นเจ้าของการสมัครใช้บริการเดิมและยังไม่ได้รับสิทธิ์การสมัครใช้บริการใหม่ การเรียกใช้ getProducts() และ getPurchaseToken() ในออบเจ็กต์ PendingPurchaseUpdate จะแสดงรหัสผลิตภัณฑ์และโทเค็นการซื้อของการสมัครใช้บริการใหม่ เมื่อธุรกรรมเสร็จสมบูรณ์ แอปของคุณจะได้รับ Purchase ที่มีการตั้งค่าโทเค็นการซื้อระดับบนสุดสำหรับการสมัครใช้บริการใหม่และตั้งค่าสถานะเป็น PURCHASED ระบบจะส่งข้อความ SubscriptionNotification ที่มีประเภท SUBSCRIPTION_PURCHASED ไปยังไคลเอ็นต์ RTDN เฉพาะในกรณีนี้เท่านั้นที่คุณควรแทนที่โทเค็นการซื้อเดิมด้วยโทเค็นการซื้อใหม่และอัปเดตสิทธิ์เข้าถึงเนื้อหาของผู้ใช้ หากธุรกรรมหมดอายุหรือถูกยกเลิก ระบบจะส่งข้อความ SubscriptionNotification ที่มีประเภท SUBSCRIPTION_PENDING_PURCHASE_CANCELED ไปยังไคลเอ็นต์ RTDN ในกรณีเช่นนี้ ผู้ใช้ควรยังคงเข้าถึงเนื้อหาของการสมัครใช้บริการเดิมได้