ใช้ Google Play Billing Library กับ Unity

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

ตั้งค่าปลั๊กอิน Google Play Billing

หากต้องการตั้งค่าปลั๊กอิน ให้ทำตามขั้นตอนในแต่ละส่วนที่ลิงก์ไว้ต่อไปนี้

  1. เปิดใช้เลเยอร์การแยกรายละเอียด IAP ของ Unity
  2. ดาวน์โหลดและนำเข้าปลั๊กอิน
  3. กำหนดการตั้งค่าบิลด์ของปลั๊กอิน
  4. เปิดใช้ปลั๊กอิน

เปิดใช้เลเยอร์การแยกรายละเอียด IAP ของ Unity

ปลั๊กอินการเรียกเก็บเงินของ Google Play สร้างขึ้นบนเลเยอร์การแยกส่วนที่รวมอยู่ใน Unity IAP ดังนั้นคุณต้องเปิดใช้เลเยอร์การแยกส่วนนี้ก่อนที่จะดาวน์โหลด และนำเข้าปลั๊กอิน หากต้องการเปิดใช้เลเยอร์การแยกรายละเอียด IAP ของ Unity ให้ทำ ดังนี้

  1. ทำตามขั้นตอนทั้งหมดในบทแนะนำ Unity ต่อไปนี้ ตั้งค่าโปรเจ็กต์ สำหรับบริการของ Unity
  2. ทำตามขั้นตอนทั้งหมดในบทแนะนำ Unity ต่อไปนี้: เปิดใช้บริการ IAP ของ Unity

ดาวน์โหลดและนำเข้าปลั๊กอิน

ปลั๊กอินจะจัดส่งเป็นแพ็กเกจ Unity ในรูปแบบ .unitypackage หากต้องการดาวน์โหลดและนำเข้าปลั๊กอิน ให้ทำตามขั้นตอนต่อไปนี้

  1. ดาวน์โหลดปลั๊กอินของ Google Play สำหรับ Unity รุ่นล่าสุดจาก หน้าการเผยแพร่ใน GitHub ของที่เก็บ
  2. จากแถบเมนู Unity ให้คลิกชิ้นงาน > นำเข้าแพ็กเกจ > แพ็กเกจที่กำหนดเอง

  3. ค้นหาตำแหน่งที่คุณดาวน์โหลดไฟล์ .unitypackage แล้วเลือกไฟล์

  4. ในกล่องโต้ตอบนำเข้าแพ็กเกจ Unity ให้เลือกชิ้นงานทั้งหมดไว้ แล้วคลิกนำเข้า

หลังจากนำเข้าแพ็กเกจแล้ว ระบบจะเพิ่มโฟลเดอร์ใหม่ชื่อ GooglePlayPlugins (ที่รูทของโฟลเดอร์ Assets) ลงในชิ้นงานของโปรเจ็กต์ โฟลเดอร์นี้ มีชิ้นส่วนทั้งหมดของ Google Play Billing Library สำหรับปลั๊กอิน

กำหนดการตั้งค่าบิลด์

เนื่องจากปลั๊กอินขยาย Unity IAP ดังนั้น Unity จะพบข้อขัดแย้งและสร้าง APK ของ Android ไม่ได้ เว้นแต่จะนำการอ้างอิงที่เก่ากว่าและทับซ้อนกันใน Unity IAP ออกจากบิลด์ ปลั๊กอินมีวิธีอัตโนมัติในการนำไลบรารีที่ขัดแย้งกันออกจากโปรเจ็กต์ หากต้องการแก้ไขความขัดแย้งเหล่านี้ ให้ทำตาม ขั้นตอนต่อไปนี้

  1. จากแถบเมนู Unity ให้เลือก Google > Play Billing > Build Settings

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

เปิดใช้ปลั๊กอิน

หากต้องการเปิดใช้ปลั๊กอิน ให้แทนที่การติดตั้งใช้งาน Google Play ของ Unity IAP ด้วยปลั๊กอินการเรียกเก็บเงินของ Google Play ตัวอย่างเช่น เมื่อใช้ Unity IAP Purchaser Script คุณจะต้องเปลี่ยน StandardPurchaseModule ที่ส่งไปยัง IAP Builder เพื่อใช้ Google.Play.Billing.GooglePlayStoreModule ดังนี้

// Create a builder using the GooglePlayStoreModule.
var configurationBuilder =
    ConfigurationBuilder.Instance(Google.Play.Billing.GooglePlayStoreModule.Instance());

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

ConfigurationBuilder builder;
if (Application.platform == RuntimePlatform.Android)
{
  builder = ConfigurationBuilder.Instance(
      Google.Play.Billing.GooglePlayStoreModule.Instance());
}
else
{
  builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
}

หากคุณเผยแพร่เกมใน App Store อื่นๆ ของ Android นอกเหนือจาก Google Play Store คุณควรแทนที่การติดตั้งใช้งาน Unity IAP เริ่มต้นเฉพาะเมื่อ เลือก Google Play Store เท่านั้น

ConfigurationBuilder builder;
if (Application.platform == RuntimePlatform.Android
       && SelectedAndoidAppStore == AppStore.GooglePlay)
{
  builder = ConfigurationBuilder.Instance(
      Google.Play.Billing.GooglePlayStoreModule.Instance());
}
else
{
  builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
}

ใช้ฟีเจอร์ของ Google Play Billing Library ในเกม

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

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

เปิดใช้การซื้อที่เลื่อนออกไป

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

หากต้องการเปิดใช้การซื้อที่เลื่อนเวลาไว้ ให้ใช้เครื่องมือสร้าง IAP เพื่อแก้ไขการกำหนดค่าของโมดูลโดยเรียกใช้เมธอด EnableDeferredPurchase()

// Create a builder using a GooglePlayStoreModule.
var configurationBuilder =
    ConfigurationBuilder.Instance(Google.Play.Billing.GooglePlayStoreModule.Instance());
// Enable deferred purchases
configurationBuilder.Configure<Google.Play.Billing.IGooglePlayConfiguration>()
    .EnableDeferredPurchase();

จากนั้นใช้การเรียกกลับของการซื้อที่รอดำเนินการโดยใช้ส่วนขยาย Play Store ดังนี้

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

// Set the deferred purchases callback.
_playStoreExtensions.SetDeferredPurchaseListener(
    delegate(Product product)
    {
        // Do not grant the item here. Instead, record the purchase and remind
        // the user to complete the transaction in the Play Store.
    });

ส่งรหัสบัญชีที่ผ่านการปกปิดไปยัง Google Play

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

หากต้องการส่งรหัสบัญชีที่ผ่านการปกปิด ให้เรียกใช้เมธอด SetObfuscatedAccountId() จาก Extensions API ดังนี้

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

// Pass an obfuscated account ID.
_playStoreExtensions.SetObfuscatedAccountId(obfuscatedAccountId);

ส่งรหัสโปรไฟล์ที่ปรับให้ยากต่อการอ่าน (Obfuscate) ไปยัง Google Play

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

หากต้องการส่งรหัสโปรไฟล์ที่ผ่านการปกปิด ให้ใช้ เครื่องมือสร้าง IAP เพื่อแก้ไขการกำหนดค่าของโมดูลโดยเรียกใช้เมธอด SetObfuscatedProfileId()

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

// Pass an obfuscated profile ID.
_playStoreExtensions.SetObfuscatedProfileId(obfuscatedProfileId);

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

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

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

_playStoreExtensions.ConfirmSubscriptionPriceChange(productId,
    delegate (bool success)
    {
        // Returns whether the user has accepted the new price or not.
    });

การเปลี่ยนแปลงลักษณะการทำงานของ Unity API

เมื่อใช้ปลั๊กอินการเรียกเก็บเงินของ Google Play API ส่วนใหญ่จะทํางานในลักษณะเดียวกับการติดตั้งใช้งาน IAP มาตรฐานของ Unity สําหรับ App Store อื่นๆ อย่างไรก็ตาม ในบางกรณี API จะทำงานแตกต่างออกไป ส่วนนี้ จะอธิบายความแตกต่างของลักษณะการทำงานเหล่านี้

ไม่รองรับเพย์โหลดของนักพัฒนาแอป

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

คุณยังคงใช้อินเทอร์เฟซเดียวกันกับที่กำหนดโดยการติดตั้งใช้งาน IAP มาตรฐานของ Unity สำหรับ App Store อื่นๆ รวมถึง IStoreController ได้ เมื่อเริ่มการซื้อ คุณจะยังคงใช้ IStoreController และเรียกใช้เมธอด InitiatePurchase() ได้

public void InitiatePurchase(Purchasing.Product product, string payload);

อย่างไรก็ตาม เพย์โหลดที่คุณส่งจะไม่ส่งผล (จะไม่ปรากฏในใบเสร็จสุดท้าย)

ไม่รองรับ SubscriptionManager

Unity IAP มีคลาส SubscriptionManager สำหรับการจัดการการสมัครใช้บริการ เนื่องจากการติดตั้งใช้งาน IAP มาตรฐานของ Unity ใน คลาสนี้ใช้เพย์โหลดของนักพัฒนาแอป ระบบจึงไม่รองรับคลาสนี้ คุณยังคง สร้างคลาสนี้ได้ แต่คุณอาจได้รับข้อมูลที่ไม่น่าเชื่อถือเมื่อใช้เมธอด Getter ของ คลาส

UpdateSubscription มีการเปลี่ยนแปลง API เล็กน้อย

ปลั๊กอินการเรียกเก็บเงินของ Google Play ไม่รองรับการใช้วิธีการ SubscriptionManager.UpdateSubscription() และ SubscriptionManager.UpdateSubscriptionInGooglePlayStore()เพื่ออัปเกรด และดาวน์เกรดการสมัครใช้บริการ หากเกมเรียกใช้เมธอดเหล่านี้ ระบบจะส่งGooglePlayStoreUnsupportedException

Google Play Billing Library มี API อื่นให้ใช้แทนเมธอดเหล่านี้ หากต้องการอัปเกรดหรือดาวน์เกรดการสมัครใช้บริการ ให้เรียกใช้เมธอด UpdateSubscription() โดยใช้โหมดการปันส่วนตามสัดส่วน

void UpdateSubscription(Product oldProduct, Product newProduct,
           GooglePlayStoreProrationMode prorationMode = GooglePlayStoreProrationMode.Unknown);

คุณจะห่อหุ้มการเรียกเมธอดนี้ด้วยการตรวจสอบแพลตฟอร์มหรือในบล็อก catch ก็ได้ เมื่อตรวจพบ GooglePlayStoreUnsupportedException

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