استخدام Google Play Billing Library مع Unity

يعمل المكوّن الإضافي "الفوترة في Google Play" على توسيع نطاق خدمات Unity المدمجة مواد عرض لعمليات الشراء داخل التطبيق تُسمى Unity الشراء داخل التطبيق، لتوفير لعبتك بأحدث ميزات Google Play Billing Library. هذا النمط كيفية إعداد مشروعك لاستخدام المكون الإضافي. يتضمن هذا الدليل أيضًا يشرح كيفية تنفيذ ميزات Google Play Billing Library في لعبتك على Unity.

إعداد المكوّن الإضافي "الفوترة في Google Play"

لإعداد المكوّن الإضافي، أكمل الخطوات الواردة في كل قسم من هذه الأقسام المرتبطة:

  1. تفعيل طبقة تجريد الشراء داخل التطبيق في Unity
  2. نزِّل المكوّن الإضافي واستيراده.
  3. ضبط إعدادات إصدار المكوّن الإضافي
  4. فعِّل المكوّن الإضافي.

تفعيل طبقة التجريد للشراء داخل التطبيق في Unity

يستند المكوّن الإضافي لخدمة "الفوترة في Google Play" إلى طبقة تجريدية مضمّنة مع يجب إجراء عمليات الشراء داخل التطبيق من Unity، لذا يجب تفعيل طبقة التجريد هذه قبل التنزيل واستيراد المكون الإضافي. لتفعيل طبقة تجريد الشراء داخل التطبيق من Unity، قم التالي:

  1. أكمِل جميع الخطوات في برنامج Unity التعليمي التالي: إعداد مشروعك من أجل Unity Services
  2. أكمِل كلّ الخطوات في برنامج Unity التعليمي التالي: تفعيل عملية الشراء داخل التطبيق من Unity الخدمة.

تنزيل المكوّن الإضافي واستيراده

يتم شحن المكوّن الإضافي كحزمة Unity في تنسيق .unitypackage لتنزيل المكوّن الإضافي واستيراده، اتبع الخطوات التالية:

  1. يمكنك تنزيل أحدث إصدار من Google Play Plugins for 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 > إنشاء الإعدادات:

  2. في نافذة "إعدادات إصدار الفوترة في Play"، انقر على إصلاح. يعمل هذا على حل التعارض ونقل ملفات Unity IAP المتضاربة إلى دليل احتياطي. بعد بعد النقر على إصلاح، يتغيّر الزر إلى استعادة، ويمكنك النقر عليه استعادة الملفات الأصلية المتعارضة.

تفعيل المكوّن الإضافي

لتفعيل المكوِّن الإضافي، استبدِل تطبيق Unity IAP في Google Play المكوّن الإضافي "الفوترة في Google Play". على سبيل المثال، عند استخدام مشتري الشراء داخل التطبيق في Unity النص البرمجي، يمكنك تغيير StandardPurchaseModule الذي تم تمريره إلى أداة إنشاء الشراء داخل التطبيق لاستخدام Google.Play.Billing.GooglePlayStoreModule:

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

إذا كانت لعبتك تستخدم "نص المشتري" نفسه مع عدّة منصات، عليك التحقق من المنصة للتأكّد من أنّ Unity ستستمر في استخدام حل الشراء داخل التطبيق الخاص بالأنظمة الأساسية الأخرى:

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

في حال نشر لعبتك على متاجر أخرى لتطبيقات Android إلى جانب Google Play ستحل محل التنفيذ التلقائي لعمليات الشراء داخل التطبيق في Unity فقط إذا أنت تختار "متجر Google Play":

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" على توسيع نطاق خدمات الشراء داخل التطبيق في Unity كي تتمكّن من استخدام نفس واجهات برمجة تطبيقات Unity لإدارة مهام الشراء الشائعة. لاحظ أن هناك بعض تغييرات طفيفة في سلوك واجهة برمجة التطبيقات بسبب الاختلافات بين Google Play Billing Library وعمليات الشراء داخل التطبيق العادية في Unity التنفيذ لمتاجر التطبيقات الأخرى. إذا كنت مبتدئًا في استخدام واجهات برمجة التطبيقات Unity IAP، يُرجى مراجعة إنشاء نص شراء في قسم الشراء داخل التطبيق من Unity دليل توجيهي للحصول على مثال حول كيفية تنفيذ تدفقات الشراء الأساسية

كما تتضمّن Google Play Billing Library بعض الميزات التي يتفرّد بها نظام "متجر Play". يمكنك الوصول إلى هذه الميزات من خلال واجهة موسعة. تشير رسالة الأشكال البيانية ويوضّح الجزء المتبقي من هذا القسم كيفية تطبيق هذه الأدوات الفريدة في Google Play Billing Library والميزات في لعبتك.

تفعيل عمليات الشراء المؤجلة

يتيح Google Play عمليات الشراء المؤجلة، ويُطلق عليها أيضًا اسم في انتظار المراجعة. عمليات البحث أو في انتظار المراجعة عمليات الشراء؛ حيث يمكن للمستخدمين إجراء عملية شراء وإكمالها لاحقًا باستخدام نقدًا المتاجر.

لتفعيل عمليات الشراء المؤجّلة، استخدِم أداة إنشاء عمليات الشراء داخل التطبيق لتعديل من خلال استدعاء طريقة 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":

// 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(). من واجهة برمجة تطبيقات الإضافات:

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

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

تمرير أرقام تعريف الملفات الشخصية المشفَّرة إلى Google Play

يمكنك إرسال رقم تعريف ملف شخصي مشفّر إلى Google Play لتسهيل الاحتيال. مثل اكتشاف ما إذا كان العديد من الأجهزة يُجري عمليات شراء على نفس الحساب في فترة زمنية قصيرة. وهذا يشبه تمرير ترميز رقم تعريف حساب المستخدم. وفي كلتا الحالتين، يمثل المعرّف مستخدم واحد، ولكن معرّف الملف الشخصي يتيح لك تحديد مستخدم واحد بشكل فريد عبر ملفات شخصية متعددة لديهم داخل تطبيق واحد. بعد إرسال رقم تعريف ملف شخصي تم تشويشه إلى Google Play، ويمكنك استرداده لاحقًا في إيصال الشراء.

لتمرير معرّف ملف شخصي مشفّر، استخدم أداة إنشاء الشراء داخل التطبيق لتعديل تهيئة الوحدة عن طريق استدعاء طريقة 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

وعند استخدام المكوّن الإضافي "الفوترة في Google Play"، تعمل معظم واجهات برمجة التطبيقات على هي طريقة تنفيذ الشراء داخل التطبيق العادية من Unity لمتاجر التطبيقات الأخرى. ومع ذلك، هناك بعض الحالات التي ستعمل فيها واجهات برمجة التطبيقات بشكل مختلف. هذا القسم ويصف هذه الاختلافات السلوكية.

حمولة البيانات الخاصة بالمطوّر غير متوافقة

متوقّفة نهائيًا في Google Play لحمولة المطوّر وسيتم استبدالها ببدائل التي تكون أكثر وضوحًا وسياقًا ولهذا السبب، تبلغ حمولة المطوّر غير متوافق. لمزيد من المعلومات حول البدائل، اطلع على صفحة حول حمولة المطوِّر

يمكنك مواصلة استخدام الواجهات نفسها المحدّدة في معيار Unity. تنفيذ الشراء داخل التطبيق لمتاجر التطبيقات الأخرى، بما في ذلك IStoreController. عندما تريد بدء عملية شراء، يمكنك مواصلة استخدام "IStoreController" والاتصال طريقة InitiatePurchase():

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

مع ذلك، لن يتم تطبيق أي حمولة يتم نقلها (لن تظهر في الإيصال النهائي).

SubscriptionManager غير متاح

يوفر Unity IAP ميزات SubscriptionManager دورة تدريبية حول إدارة الاشتراكات. نظرًا لأن تنفيذ الشراء داخل التطبيق القياسي في Unity هذه الفئة تستخدم حمولة المطوّرين، هذه الفئة غير متاحة. لا يزال بإمكانك إنشاء هذه الفئة، ولكنك قد تتلقى بيانات غير موثوقة عند استخدام أي من طُرق الحصول على بيانات الفئة.

يتضمن تحديث الاشتراك تغييرات بسيطة في واجهة برمجة التطبيقات

لا يتيح المكوّن الإضافي "الفوترة في Google Play" استخدام SubscriptionManager.UpdateSubscription() و SubscriptionManager.UpdateSubscriptionInGooglePlayStore() طريقة للترقية والرجوع إلى إصدار سابق من اشتراكاتك إذا استدعت لعبتك هذه الطرق، تم رمي GooglePlayStoreUnsupportedException.

توفّر Google Play Billing Library واجهة برمجة تطبيقات بديلة لاستخدامها بدلاً من ما يلي: الطرق. لترقية اشتراك أو الاشتراك في خطة أقلّ كلفة، اتصل بالرقم UpdateSubscription(). باستخدام وضع التناسب:

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

يمكنك إنهاء استدعاء الطريقة هذا بفحص النظام الأساسي أو في حظر. عند رصد "GooglePlayStoreUnsupportedException"

لمزيد من المعلومات والأمثلة عن كيفية استخدام وضع التقسيم، يُرجى الاطّلاع على المقالة ضبط وضع التقسيم: