ย้ายข้อมูลจากเวอร์ชัน 4 หรือ 5 ไปยัง Google Play Billing Library 6

หัวข้อนี้จะอธิบายวิธีย้ายข้อมูลจาก Google Play Billing Library 4 หรือ 5 ไปยัง Google Play Billing Library 6 และวิธีใช้ความสามารถใหม่ๆ ของการสมัครใช้บริการ

หากต้องการดูรายการการเปลี่ยนแปลงทั้งหมดในเวอร์ชัน 6.0.0 โปรดดูที่รุ่น หมายเหตุ

ภาพรวม

Google Play Billing Library 6 สร้างขึ้นมาจากฟีเจอร์การสมัครใช้บริการใหม่ ในเวอร์ชัน 5 และเพิ่มการปรับปรุงอีกเล็กน้อย คุณลักษณะเหล่านี้ช่วยให้คุณสามารถขาย การสมัครใช้บริการในรูปแบบที่หลากหลายขึ้น ซึ่งช่วยลดค่าใช้จ่ายในการดำเนินงานโดยตัดความจำเป็น ในการสร้างและจัดการ SKU ที่มีจำนวนเพิ่มขึ้นเรื่อยๆ

ดูข้อมูลเพิ่มเติมเกี่ยวกับฟีเจอร์ใหม่ๆ ที่เปิดตัวใน Play Billing Library 5 ดูการเปลี่ยนแปลงล่าสุดในการสมัครใช้บริการใน Play Google Play

การอัปเกรด Play Billing Library ที่เข้ากันได้กับย้อนหลัง

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

แอปเวอร์ชันเก่ายังใช้งานได้อยู่

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

เวอร์ชันของแอปที่ใช้วิธีที่เลิกใช้งานแล้ว (เช่น querySkuDetailsAsync()) จะไม่สามารถขายแพ็กเกจเริ่มต้นหรือข้อเสนอที่ย้อนหลังไม่ได้ ที่เข้ากันได้ คุณสามารถอ่านเกี่ยวกับข้อเสนอที่ใช้งานย้อนหลังได้ใน Play ที่เกี่ยวข้อง ศูนย์ช่วยเหลือของ Console บทความ

อัปเกรดเป็น Play Billing Library 5 หรือ 6

Play Billing Library 5 และ 6 รวมวิธีการที่เลิกใช้งานแล้ว querySkuDetailsAsync และ BillingFlowParams.Builder.setSkuDetails ที่ใช้เวลา SkuDetails เป็นการเรียกเก็บเงิน พารามิเตอร์โฟลว์ ซึ่งหมายความว่าคุณสามารถค่อยๆ ย้ายไปยัง Play Billing Library 6 ได้ โดยการวางแผนระยะต่างๆ ในการย้ายข้อมูล

สำหรับขั้นตอนแรกในการย้ายข้อมูล คุณสามารถอัปเดตไลบรารี เวอร์ชัน ปล่อยแคตตาล็อกและแบ็กเอนด์ไว้ตามเดิม แล้วทดสอบ แอปของคุณในขณะที่ยังคงใช้วิธีการที่เลิกใช้งานแล้ว หากคุณไม่ได้ใช้ queryPurchases, launchPriceChangeFlow หรือ setVrPurchaseFlow ยังคงทำงานได้ตามที่ตั้งใจไว้ หลังจากนั้น คุณสามารถปรับใช้ แบบใหม่ ฟีเจอร์การสมัครใช้บริการที่เปิดตัวในเดือนพฤษภาคม 2022

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

ขั้นตอนการย้ายข้อมูลเต็มรูปแบบ

สร้างการสมัครใช้บริการใหม่ในแคตตาล็อกผลิตภัณฑ์แบ็กเอนด์

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

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

ขอแนะนำว่าอย่าแก้ไขผลิตภัณฑ์การสมัครใช้บริการที่แปลงแล้วหลังจาก เผยแพร่เดือนพฤษภาคม 2022 คุณควรปล่อยไว้เหมือนเดิมเพื่อขายพร้อมกับ แอปของคุณโดยใช้วิธีการที่เลิกใช้งานแล้ว (เช่น querySkuDetailsAsync()) โดยไม่แสดงการเปลี่ยนแปลงที่ อาจส่งผลต่องานสร้างเก่าเหล่านี้

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

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

  • ในแบ็กเอนด์ หากคุณแก้ไขการสมัครใช้บริการที่แปลงแล้วใน UI ของ Play Console คุณจะไม่สามารถจัดการ UI ด้วย inappproducts ได้ ปลายทาง หากคุณเรียกใช้ปลายทางสำหรับวัตถุประสงค์นี้ คุณควรใช้ ย้ายข้อมูลไปยังปลายทางสถานะการซื้อการสมัครใช้บริการใหม่ (purchases.subscriptionsv2.get) เพื่อจัดการการซื้อ สำหรับการสมัครใช้บริการเหล่านี้ เนื่องจากปลายทางสถานะการซื้อแบบเก่า (purchases.subscriptions.get) จะแสดงเฉพาะ ข้อมูลที่จำเป็นในการจัดการแพ็กเกจเริ่มต้นและข้อเสนอที่เข้ากันได้แบบย้อนหลัง การซื้อ อ่านจัดการสถานะการซื้อการสมัครใช้บริการ สำหรับข้อมูลเพิ่มเติม

จัดการแคตตาล็อกการสมัครใช้บริการแบ็กเอนด์ด้วย API ใหม่

หากคุณจัดการแคตตาล็อกผลิตภัณฑ์ที่ต้องสมัครใช้บริการโดยอัตโนมัติด้วย API สำหรับนักพัฒนาซอฟต์แวร์ Google Play คุณต้องใช้ผลิตภัณฑ์การสมัครใช้บริการใหม่ กำหนดปลายทางเพื่อสร้างและจัดการการสมัครใช้บริการ แพ็กเกจเริ่มต้น และข้อเสนอ อ่านฟีเจอร์การสมัครใช้บริการในเดือนพฤษภาคม 2022 คำแนะนำ เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลง API แคตตาล็อกผลิตภัณฑ์สำหรับรุ่นนี้

วิธีย้ายข้อมูลโมดูลการจัดการแคตตาล็อกผลิตภัณฑ์อัตโนมัติสำหรับ การสมัครใช้บริการ Google Play Billing ให้แทนที่ inappproducts API พร้อมกับ Subscription Publishing API ใหม่เพื่อจัดการและเผยแพร่ แคตตาล็อกการสมัครใช้บริการ มีปลายทางใหม่ 3 รายการ ได้แก่

  • Monetization.subscriptions เพื่อจัดการผลิตภัณฑ์ที่ต้องสมัครใช้บริการ
  • Monetization.basePlans เพื่อจัดการแพ็กเกจเริ่มต้นสำหรับการสมัครใช้บริการ
  • Monetization.offers เพื่อจัดการข้อเสนอสำหรับแพ็กเกจเริ่มต้น

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

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

แอปเวอร์ชันที่ใช้วิธีที่เลิกใช้งานแล้ว (เช่น querySkuDetailsAsync()) จะไม่สามารถขายแพ็กเกจเริ่มต้นหรือข้อเสนอที่เข้ากันแบบย้อนหลังไม่ได้ อ่านข้อมูลเกี่ยวกับข้อเสนอที่เข้ากันได้แบบย้อนหลังได้ที่นี่

อัปเดตไลบรารี Google Play Billing

เมื่อคุณสร้างแคตตาล็อกผลิตภัณฑ์ที่ต้องสมัครใช้บริการใหม่แล้ว คุณสามารถย้ายข้อมูลแอปไปยัง Google Billing Library 5 ได้ แทนที่รายการที่มีอยู่ ทรัพยากร Dependency ของ Play Billing Library ที่มีการอัปเดตเป็น build.gradle ของแอป

dependencies {
    def billingVersion = "6.0.0"

    implementation "com.android.billingclient:billing:$billingVersion"
}

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

เริ่มต้นไคลเอ็นต์การเรียกเก็บเงินและสร้างการเชื่อมต่อกับ Google Play

ขั้นตอนแรกในการเปิดใช้การซื้อจากแอป Android จะยังคงเหมือนเดิม ดังนี้

แสดงผลิตภัณฑ์ที่พร้อมจำหน่าย

หากต้องการรับข้อเสนอทั้งหมดที่ผู้ใช้มีสิทธิ์ซื้อ ให้ทำดังนี้

  • แทนที่ SkuDetailsParams ด้วย QueryProductDetailsParams
  • สลับสายของ BillingClient.querySkuDetailsAsync() เพื่อใช้ BillingClient.queryProductDetailsAsync()

โปรดทราบว่าขณะนี้ผลการค้นหาจะเป็น ProductDetails จากเดิม SkuDetails สินค้า ProductDetails แต่ละรายการมีข้อมูลเกี่ยวกับผลิตภัณฑ์ (รหัส ชื่อ ประเภท และอื่นๆ) สำหรับผลิตภัณฑ์ที่ต้องสมัครใช้บริการ ProductDetails มี List<ProductDetails.SubscriptionOfferDetails> ซึ่งก็คือ รายการรายละเอียดข้อเสนอพิเศษของการสมัครใช้บริการ สำหรับผลิตภัณฑ์แบบซื้อครั้งเดียว ProductDetails มี ProductDetails.OneTimePurchaseOfferDetails เหล่านี้ สามารถใช้เพื่อเลือกข้อเสนอที่จะแสดงต่อผู้ใช้

ตัวอย่างต่อไปนี้แสดงลักษณะของแอปก่อนและหลังใช้งาน ทำการเปลี่ยนแปลงเหล่านี้

ก่อน

Kotlin

val skuList = ArrayList<String>()

skuList.add("up_basic_sub")

val params = SkuDetailsParams.newBuilder()

params.setSkusList(skuList).setType(BillingClient.SkuType.SUBS).build()

billingClient.querySkuDetailsAsync(params) {
    billingResult,
    skuDetailsList ->
    // Process the result
}

Java

List<String> skuList = new ArrayList<>();

skuList.add("up_basic_sub");

SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();

params.setSkusList(skuList).setType(SkuType.SUBS).build();

billingClient.querySkuDetailsAsync(params,
    new SkuDetailsResponseListener() {
        @Override
        public void onSkuDetailsResponse(BillingResult billingResult,
                List<SkuDetails> skuDetailsList) {
            // Process the result.
        }
    }
);

หลัง

Kotlin

val productList =
    listOf(
        QueryProductDetailsParams.Product.newBuilder()
            .setProductId("up_basic_sub")
            .setProductType(BillingClient.ProductType.SUBS)
            .build()
    )

val params = QueryProductDetailsParams.newBuilder().setProductList(productList).build()

billingClient.queryProductDetailsAsync(params) {
    billingResult,
    productDetailsList ->
    // Process the result
}

Java

ImmutableList<Product> productList = ImmutableList.of(Product.newBuilder()
                                            .setProductId("up_basic_sub")
                                            .setProductType(ProductType.SUBS)
                                            .build());

QueryProductDetailsParams params = QueryProductDetailsParams.newBuilder()
    .setProductList(productList)
    .build();

billingClient.queryProductDetailsAsync(
        params,
        new ProductDetailsResponseListener() {
                public void onProductDetailsResponse(BillingResult billingResult, List<ProductDetails> productDetailsList) {
                    // Process the result
                }
        }
);

การเรียกกลับสำหรับ queryProductDetailsAsync แสดงผล List<ProductDetails> สินค้า ProductDetails แต่ละรายการมีข้อมูลเกี่ยวกับผลิตภัณฑ์ (รหัส ชื่อ ประเภท และอื่นๆ) ความแตกต่างหลักๆ ก็คือการสมัครใช้บริการ ผลิตภัณฑ์เหล่านี้มี List<ProductDetails.SubscriptionOfferDetails> ด้วย ที่มีข้อเสนอทั้งหมดที่มีให้ผู้ใช้

เนื่องจาก Play Billing Library เวอร์ชันก่อนหน้าไม่รองรับเวอร์ชันใหม่ ออบเจ็กต์ (การสมัครใช้บริการ แพ็กเกจเริ่มต้น ข้อเสนอ และอื่นๆ) ระบบใหม่ จะแปลง SKU การสมัครใช้บริการแต่ละ SKU เป็นแพ็กเกจเดียวที่เข้ากันได้แบบย้อนหลัง แพ็กเกจเริ่มต้นและข้อเสนอ ผลิตภัณฑ์แบบซื้อครั้งเดียวที่พร้อมจำหน่ายยังมี ย้ายไปยังออบเจ็กต์ ProductDetails แล้ว รายละเอียดข้อเสนอพิเศษสำหรับครั้งเดียว สามารถเข้าถึงผลิตภัณฑ์ที่ซื้อได้ด้วย getOneTimePurchaseOfferDetails() วิธี

บางครั้งอุปกรณ์บางเครื่องไม่รองรับProductDetailsและqueryProductDetailsAsync() มักเกิดจากเวอร์ชันเก่าของ บริการ Google Play เพื่อให้มั่นใจได้ว่า การสนับสนุนที่เหมาะสมสำหรับสถานการณ์นี้ โทร isFeatureSupported() สำหรับ PRODUCT_DETAILS ก่อนที่จะเรียก queryProductDetailsAsync หากคำตอบคือ OK อุปกรณ์รองรับฟีเจอร์นี้และคุณสามารถโทรหา queryProductDetailsAsync() ต่อได้ หากคำตอบคือ FEATURE_NOT_SUPPORTED คุณสามารถขอรายการผลิตภัณฑ์ที่เข้ากันแบบย้อนหลังได้แทนด้วย querySkuDetailsAsync() หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้ความเข้ากันได้แบบย้อนหลัง โปรดดูคู่มือฟีเจอร์การสมัครใช้บริการในเดือนพฤษภาคม 2022

เปิดขั้นตอนการซื้อข้อเสนอ

การเปิดตัวขั้นตอนการซื้อสำหรับข้อเสนอคล้ายกับการเปิดตัวขั้นตอน สำหรับ SKU หากต้องการเริ่มต้นคำขออนุมัติการซื้อโดยใช้เวอร์ชัน 6 ให้ทำดังนี้

  • แทนที่จะใช้ SkuDetails สำหรับ BillingFlowParams ใช้ ProductDetailsParams
  • คุณจะดูรายละเอียดข้อเสนอ เช่น รหัสข้อเสนอ รหัสแพ็กเกจเริ่มต้น และอื่นๆ ได้โดยใช้ SubscriptionOfferDetails ออบเจ็กต์

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

เมื่อสร้างออบเจ็กต์ BillingFlowParams แล้ว การเปิดใช้ขั้นตอนการเรียกเก็บเงิน กับ BillingClient ได้เหมือนเดิม

ตัวอย่างต่อไปนี้แสดงลักษณะของแอปก่อนและหลังใช้งาน ทำการเปลี่ยนแปลงเหล่านี้

ก่อน

Kotlin

// An activity reference from which the billing flow will be launched.
val activity : Activity = ...
// Retrieve a value for "skuDetails" by calling querySkuDetailsAsync().
val billingFlowParams = BillingFlowParams.newBuilder()
                            .setSkuDetails(skuDetails)
                            .build()

val billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)

Java

// An activity reference from which the billing flow will be launched.
Activity activity = ...;
// Retrieve a value for "skuDetails" by calling querySkuDetailsAsync().
BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
        .setSkuDetails(skuDetails)
        .build();

BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)

หลัง

Kotlin

// An activity reference from which the billing flow will be launched.
val activity : Activity = ...;

val productDetailsParamsList = listOf(
    BillingFlowParams.ProductDetailsParams.newBuilder()
        // retrieve a value for "productDetails" by calling queryProductDetailsAsync()
        .setProductDetails(productDetails)
        // For One-time product, "setOfferToken" method shouldn't be called.
        // For subscriptions, to get the offer token corresponding to the selected
        // offer call productDetails.subscriptionOfferDetails?.get(selectedOfferIndex)?.offerToken
        .setOfferToken(selectedOfferToken)
        .build()
)

val billingFlowParams = BillingFlowParams.newBuilder()
    .setProductDetailsParamsList(productDetailsParamsList)
    .build()

// Launch the billing flow
val billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)

Java

// An activity reference from which the billing flow will be launched.
Activity activity = ...;

ImmutableList<ProductDetailsParams> productDetailsParamsList =
    ImmutableList.of(
        ProductDetailsParams.newBuilder()
             // retrieve a value for "productDetails" by calling queryProductDetailsAsync()
            .setProductDetails(productDetails)
            // For one-time products, "setOfferToken" method shouldn't be called.
            // For subscriptions, to get the offer token corresponding to the selected
            // offer call productDetails.getSubscriptionOfferDetails().get(selectedOfferIndex).getOfferToken()
            .setOfferToken(selectedOfferToken)
            .build()
    );

BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
    .setProductDetailsParamsList(productDetailsParamsList)
    .build();

// Launch the billing flow
BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);

ประมวลผลการซื้อ

การดำเนินการซื้อด้วย Google Play Billing Library 6 ยังคงคล้ายคลึงกัน เป็นเวอร์ชันก่อนหน้า

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

  • แทนที่จะส่งค่า BillingClient.SkuType ไปยัง queryPurchasesAsync() ส่งออบเจ็กต์ QueryPurchasesParams ที่มีค่า BillingClient.ProductType

ตัวอย่างต่อไปนี้แสดงลักษณะของแอปก่อนหน้านี้และ หลังจากทำการเปลี่ยนแปลงเหล่านี้

ก่อน

Kotlin

billingClient.queryPurchasesAsync(BillingClient.SkuType.SUBS) {
    billingResult,
    purchaseList -> {
        // Process the result
    }
}

Java

billingClient.queryPurchasesAsync(
    BillingClient.SkuType.SUBS,
    new PurchasesResponseListener() {
        public void onQueryPurchasesResponse(
                BillingResult billingResult,
                ListP<urchase >purchases) {
            // process the result
        }
    }
);

หลัง

Kotlin

billingClient.queryPurchasesAsync(
    QueryPurchasesParams.newBuilder()
        .setProductType(BillingClient.ProductType.SUBS)
        .build()
) { billingResult, purchaseList ->
    // Process the result
}

Java

billingClient.queryPurchasesAsync(
    QueryPurchasesParams.newBuilder().setProductType(ProductType.SUBS).build(),
    new PurchasesResponseListener() {
        public void onQueryPurchasesResponse(
                BillingResult billingResult,
                List<Purchase> purchases) {
            // Process the result
        }
    }
);

ขั้นตอนในการจัดการการซื้อนอกแอป และธุรกรรมที่รอดำเนินการ ไม่เปลี่ยนแปลง

จัดการสถานะการซื้อการสมัครใช้บริการด้วย API ใหม่ในแบ็กเอนด์

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

คุณจำเป็นต้องใช้ Subscription Purchases API ใหม่สำหรับบัญชี โมดูลการจัดการสถานะการซื้อการสมัครใช้บริการ ซึ่งจะตรวจสอบการซื้อ และจัดการการให้สิทธิ์การสมัครใช้บริการ Play Billing ในแบ็กเอนด์ของคุณ API เวอร์ชันเก่าไม่ได้แสดงรายละเอียดที่จำเป็นทั้งหมดในการจัดการ ในแพลตฟอร์มใหม่ ดูรายละเอียดการเปลี่ยนแปลงจากเวอร์ชันก่อนหน้า ดูคู่มือเกี่ยวกับฟีเจอร์การสมัครใช้บริการใหม่ในเดือนพฤษภาคม 2022

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

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

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

ใน Play Billing Library 5 และรุ่นก่อนหน้า ProrationMode ใช้เพื่อทำการเปลี่ยนแปลงกับการซื้อการสมัครใช้บริการของผู้ใช้ เช่น การอัปเกรด หรือดาวน์เกรด ซึ่งเลิกใช้งานแล้วและแทนที่ด้วย ReplacementMode ในเวอร์ชัน 6

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

API launchPriceConfirmationFlow ที่เลิกใช้งานก่อนหน้านี้ได้ถูกนำออกไปใน Play Billing Library 6. โปรดดูตัวเลือกอื่นในการเปลี่ยนแปลงราคา

จัดการข้อผิดพลาด Play Billing Library

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

จัดการธุรกรรมที่รอดำเนินการ

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