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

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

إعداد إضافة "الفوترة في Google Play"

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

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

تفعيل طبقة التجريد Unity IAP

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

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

تنزيل الإضافة واستيرادها

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

  1. نزِّل أحدث إصدار من Google Play Plugins for Unity من صفحة الإصدارات في المستودع على GitHub.
  2. من شريط قائمة Unity، انقر على مواد العرض (Assets) > استيراد حزمة (Import Package) > حزمة مخصّصة (Custom Package).

  3. حدِّد مكان تنزيل ملف .unitypackage واختَره.

  4. في مربّع الحوار استيراد حزمة Unity (Import Unity Package) ، اترك جميع مواد العرض محدّدة وانقر على استيراد (Import).

بعد استيراد الحزمة، تتم إضافة مجلد جديد باسم GooglePlayPlugins (في جذر مجلد "مواد العرض") إلى مواد العرض في مشروعك. يحتوي هذا المجلد على جميع مواد العرض في Google Play Billing Library للإضافة.

ضبط إعدادات الإنشاء

بما أنّ الإضافة توسّع نطاق Unity IAP، سيواجه Unity تعارضات ولن يتمكّن من إنشاء ملف APK على Android ما لم تتم إزالة بعض العناصر التابعة الأقدم والمتداخلة في Unity IAP من عملية الإنشاء. توفّر الإضافة طريقة تلقائية لإزالة المكتبات المتعارضة من مشروعك. لحلّ هذه التعارضات، اتّبِع الخطوات التالية:

  1. من شريط قائمة Unity، انقر على Google > الفوترة في Play > إعدادات الإنشاء (Build Settings).

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

تفعيل الإضافة

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

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

إذا كانت لعبتك تستخدم Purchaser Script نفسه لمنصات متعددة، عليك إضافة عملية تحقّق من المنصة للتأكّد من أنّ Unity سيواصل استخدام حلّ IAP الخاص به للمنصات الأخرى:

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

تتضمّن Google Play Billing Library أيضًا بعض الميزات الفريدة في "متجر Google Play". يمكنك الوصول إلى هذه الميزات من خلال واجهة موسّعة. يصف الجزء المتبقي من هذا القسم كيفية تنفيذ ميزات 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":

// 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، يمكنك استرداد رقم التعريف هذا لاحقًا في إيصال الشراء.

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

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

حمولة المطوّر غير متاحة

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

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

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

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

لا تتوافق الإضافة مع SubscriptionManager

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

تتضمّن UpdateSubscription تغييرات طفيفة في واجهة برمجة التطبيقات

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

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

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

يمكنك إما تضمين طلب الإجراء هذا في عملية تحقّق من المنصة أو في كتلة catch عند رصد GooglePlayStoreUnsupportedException.

لمزيد من المعلومات والأمثلة حول كيفية استخدام وضع التناسب، اطّلِع على مقالة ضبط وضع التناسب.