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

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

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

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

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

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

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

Play Billing Library รองรับการสมัครใช้บริการประเภทต่อไปนี้

  • การสมัครใช้บริการแบบไอเทมเดียว - ในประเภทนี้ ไอเทม 1 รายการจะสอดคล้องกับสิทธิ์ 1 รายการ เช่น การสมัครใช้บริการสตรีมมิงเพลง

  • การสมัครใช้บริการที่มีส่วนเสริม - ในประเภทนี้ การซื้อ 1 ครั้งอาจมีสิทธิ์ที่แตกต่างกันหลายรายการรวมอยู่ในการซื้อครั้งเดียว เช่น การสมัครใช้บริการทั้งบริการสตรีมมิงเพลงและการสมัครใช้บริการวิดีโอ ดูข้อมูลเฉพาะเกี่ยวกับการสมัครใช้บริการที่มีส่วนเสริมได้ที่การสมัครใช้บริการที่มีส่วนเสริม

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • การเรียกเก็บเงินที่พลาด: หากผู้ใช้ไม่ชำระเงินสำหรับการสมัครใช้บริการแบบผ่อนชำระ 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

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

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

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

ดาวน์เกรดเป็นแพ็กเกจที่ราคาถูกกว่า

1

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

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

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

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

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

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

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

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

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

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

ตัวอย่างและการทำงานของการแทนที่

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

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

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

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

WITH_TIME_PRORATION

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

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

CHARGE_PRORATED_PRICE

คุณใช้โหมดนี้ได้เนื่องจากราคาการสมัครใช้บริการระดับ 2 ต่อหน่วยเวลา (360 บาท/ปี = 30 บาท/เดือน) สูงกว่าราคาการสมัครใช้บริการระดับ 1 ต่อหน่วยเวลา (20 บาท/เดือน) การสมัครใช้บริการระดับที่ 1 ของ Samwise จะสิ้นสุดลงทันที เนื่องจากเขา ชำระเงินสำหรับทั้งเดือนแต่ใช้เพียงครึ่งเดือน ระบบจึงนำค่าสมัครใช้บริการครึ่งเดือน ($1) ไปใช้กับการสมัครใช้บริการใหม่ของเขา อย่างไรก็ตาม เนื่องจากค่าสมัครใช้บริการใหม่ อยู่ที่ $36/ปี ดังนั้นค่าสมัครใช้บริการที่เหลืออีก 15 วันจึงอยู่ที่ $1.50 ระบบจึงเรียกเก็บเงินจากเขา ส่วนต่าง $0.50 สำหรับการสมัครใช้บริการใหม่ ในวันที่ 1 พฤษภาคม ระบบจะเรียกเก็บเงินจากแซมไวส์ 1,080 บาท สำหรับระดับการสมัครใช้บริการใหม่ และเรียกเก็บเงินอีก 1,080 บาทในวันที่ 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

การสมัครใช้บริการระดับที่ 1 ของ Samwise จะสิ้นสุดลงทันที การสมัครใช้บริการระดับ 2 เริ่มตั้งแต่วันนี้และระบบจะเรียกเก็บเงิน $36 เนื่องจากเขาชำระเงินสำหรับทั้งเดือน แต่ใช้ไปเพียงครึ่งเดือน ระบบจึงนำค่าสมัครใช้บริการครึ่งเดือน (30 บาท) ไปใช้กับการสมัครใช้บริการใหม่ของเขา เนื่องจากการสมัครใช้บริการใหม่มีค่าใช้จ่าย $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() จะแสดงออบเจ็กต์การซื้อที่มีโทเค็นการซื้อเดิมและสิทธิ์เดิมจนกว่าจะมีการแทนที่เพื่อให้มั่นใจว่าแอปจะให้สิทธิ์ที่ถูกต้อง

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

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

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

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

ทันทีหลังจากขั้นตอนการซื้อสำเร็จ (แบ็กเอนด์)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

แอปที่มี Billing Library 2.0 ขึ้นไป: ได้ นักพัฒนาแอปเลือกไม่ใช้ใน Console ได้

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

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

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

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

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

Deep Link ไปยัง Play Store

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

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

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

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

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

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

  • เริ่มอัปเกรดหรือดาวน์เกรดด้วย SKU อื่น โดยใช้โหมดการแทนที่ WITHOUT_PRORATION
  • การสมัครใช้บริการใหม่จะแทนที่การสมัครใช้บริการเก่าและจะต่ออายุในวันหมดอายุเดียวกัน ระบบจะเรียกเก็บเงินจากผู้ใช้ในราคาของ SKU ใหม่ ซึ่งรวมถึงราคาช่วงแนะนำ (หากมี) ในวันที่การสมัครใช้บริการเดิมหมดอายุ หากการสมัครใช้บริการเดิม สร้างขึ้นโดยใช้รหัสบัญชีที่ผ่านการปกปิด คุณควรส่งรหัสเดียวกันนั้น ไปยัง BillingFlowParams เพื่ออัปเกรดและดาวน์เกรด
  • ตัวอย่างเช่น อคิลลิสสมัครใช้บริการแอป 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 ได้ นอกจากนี้ คุณยัง ให้ตัวเลือกแก่ผู้ใช้ในการยกเลิกในแอปหรือบนเว็บไซต์ได้ด้วย แอปของคุณควรจัดการการยกเลิกเหล่านี้ตามที่อธิบายไว้ในการยกเลิก

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

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

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

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

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

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

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

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

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

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

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

การจัดการการชำระเงินที่ถูกปฏิเสธ

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

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

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

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

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

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

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

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

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