ใช้ Google Play Billing Library กับ Unity

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

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

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

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

เปิดใช้เลเยอร์ Unity IAP Abtraction

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

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

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

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

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

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

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

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

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

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

  1. จากแถบเมนู Unity ให้เลือก Google > Play Billing > การตั้งค่าบิลด์

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

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

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

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

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

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

หากต้องการเปิดใช้งานการซื้อที่มีการเลื่อนเวลา ให้ใช้เครื่องมือสร้าง 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.
    });

ส่งผ่านรหัสบัญชีที่มีการปรับให้ยากต่อการอ่าน (Obfuscate) ไปยัง Google Play

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

หากต้องการส่งรหัสบัญชีที่ปรับให้ยากต่อการอ่าน (Obfuscate) ให้เรียกใช้เมธอด SetObfuscatedAccountId() จาก 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

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

หากต้องการส่งรหัสโปรไฟล์ที่ปรับให้ยากต่อการอ่าน (Obfuscate) ให้ใช้ เครื่องมือสร้าง 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 Billing API ส่วนใหญ่จะทำงาน เหมือนกับการติดตั้งใช้งาน IAP มาตรฐานของ Unity สําหรับ App Store อื่นๆ อย่างไรก็ตาม ในบางกรณี API จะทำงานต่างออกไป ส่วนนี้ จะอธิบายถึงความแตกต่างของพฤติกรรมเหล่านี้

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

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

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

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

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

ไม่รองรับ SubscriptionManager

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

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

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

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

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

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

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