از کتابخانه صورت‌حساب Google Play با Unity استفاده کنید

افزونه صورت‌حساب Google Play، خدمات و دارایی‌های داخلی Unity را برای خریدهای درون‌برنامه‌ای به نام Unity IAP گسترش می‌دهد تا تمام آخرین ویژگی‌های کتابخانه صورت‌حساب Google Play را به بازی شما ارائه دهد. این راهنما نحوه راه اندازی پروژه خود را برای استفاده از افزونه توضیح می دهد. این راهنما همچنین نحوه پیاده‌سازی ویژگی‌های کتابخانه صورت‌حساب Google Play را در بازی خود در Unity شرح می‌دهد.

افزونه Google Play Billing را تنظیم کنید

برای راه‌اندازی افزونه، مراحل هر یک از این بخش‌های مرتبط را تکمیل کنید:

  1. لایه انتزاعی Unity IAP را فعال کنید .
  2. افزونه را دانلود و وارد کنید .
  3. تنظیمات ساخت افزونه را پیکربندی کنید .
  4. افزونه را فعال کنید .

لایه انتزاعی Unity IAP را فعال کنید

افزونه Google Play Billing بر روی یک لایه انتزاعی همراه با Unity IAP ساخته شده است، بنابراین قبل از دانلود و وارد کردن افزونه باید این لایه انتزاعی را فعال کنید. برای فعال کردن لایه انتزاعی Unity IAP، موارد زیر را انجام دهید:

  1. تمام مراحل آموزش Unity زیر را کامل کنید: پروژه خود را برای Unity Services تنظیم کنید .
  2. تمام مراحل آموزش Unity زیر را کامل کنید: سرویس Unity IAP را فعال کنید .

افزونه را دانلود و وارد کنید

این افزونه به صورت بسته یونیتی در قالب .unitypackage ارسال می شود. برای دانلود و وارد کردن افزونه مراحل زیر را دنبال کنید:

  1. آخرین نسخه Google Play Plugins for Unity را از صفحه انتشارات مخزن در GitHub دانلود کنید.
  2. از نوار منوی Unity، روی Assets > Import Package > Custom Package کلیک کنید.

  3. محل دانلود فایل .unitypackage را پیدا کرده و آن را انتخاب کنید.

  4. در کادر محاوره Import Unity Package ، همه دارایی ها را انتخاب کرده و روی Import کلیک کنید.

پس از وارد کردن بسته، یک پوشه جدید به نام GooglePlayPlugins (در ریشه پوشه Assets) به دارایی های پروژه شما اضافه می شود. این پوشه حاوی تمام دارایی‌های کتابخانه صورت‌حساب Google Play برای افزونه است.

تنظیمات ساخت را پیکربندی کنید

از آنجایی که افزونه Unity IAP را گسترش می‌دهد، Unity با تداخل مواجه می‌شود و نمی‌تواند یک APK Android بسازد، مگر اینکه برخی از وابستگی‌های قدیمی‌تر و همپوشانی در Unity IAP از بیلد حذف شوند. این افزونه یک روش خودکار برای حذف کتابخانه های متناقض از پروژه شما ارائه می دهد. برای حل این تضادها، مراحل زیر را دنبال کنید:

  1. از نوار منوی Unity، Google > Play Billing > Build Settings را انتخاب کنید.

  2. در پنجره Play Billing Build Settings، روی Fix کلیک کنید. این تضاد را حل می کند و فایل های Unity IAP متضاد را به یک پوشه پشتیبان منتقل می کند. بعد از اینکه روی Fix کلیک کردید، دکمه به Restore تغییر می‌کند که می‌توانید روی آن کلیک کنید تا فایل‌های اصلی و متناقض بازیابی شوند.

افزونه را فعال کنید

برای فعال کردن افزونه، اجرای Unity IAP از Google Play را با افزونه Google Play Billing جایگزین کنید. برای مثال، هنگام استفاده از 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());
}

اگر بازی خود را علاوه بر فروشگاه 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 را در بازی خود پیاده‌سازی کنید

افزونه Google Play Billing خدمات Unity IAP را گسترش می‌دهد، بنابراین می‌توانید از همان APIهای Unity برای مدیریت گردش‌های کاری رایج خرید استفاده کنید. توجه داشته باشید که به دلیل تفاوت‌های بین کتابخانه صورت‌حساب Google Play و اجرای استاندارد IAP Unity برای سایر فروشگاه‌های برنامه ، تغییرات جزئی در رفتار API وجود دارد. اگر با API های Unity IAP تازه کار هستید، برای مثالی از نحوه پیاده سازی جریان های اولیه خرید، به بخش «ساخت یک اسکریپت خرید» در آموزش Unity IAP مراجعه کنید.

کتابخانه صورت‌حساب Google Play همچنین دارای ویژگی‌هایی است که منحصر به فروشگاه Google Play هستند. شما می توانید از طریق یک رابط توسعه یافته به این ویژگی ها دسترسی داشته باشید. بقیه این بخش نحوه پیاده‌سازی ویژگی‌های منحصر به فرد کتابخانه صورت‌حساب Google Play را در بازی خود شرح می‌دهد.

خریدهای معوق را فعال کنید

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() از 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);

شناسه‌های نمایه مبهم را به 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 API

وقتی از افزونه Google Play Billing استفاده می‌کنید، بیشتر APIها مانند اجرای استاندارد IAP Unity برای فروشگاه‌های برنامه دیگر عمل می‌کنند. با این حال، مواردی وجود دارد که APIها رفتار متفاوتی دارند. این بخش این تفاوت های رفتاری را شرح می دهد.

بار برنامه‌نویس پشتیبانی نمی‌شود

Google Play بار برنامه‌نویس را منسوخ کرده و آن را با جایگزین‌هایی جایگزین می‌کند که معنی‌دارتر و متنی‌تر هستند. به همین دلیل، payload توسعه دهنده پشتیبانی نمی شود. برای اطلاعات بیشتر در مورد گزینه‌های جایگزین، به صفحه مربوط به بار برنامه‌نویس مراجعه کنید.

می‌توانید به استفاده از همان رابط‌هایی که توسط پیاده‌سازی استاندارد IAP Unity برای فروشگاه‌های برنامه دیگر، از جمله IStoreController ، تعریف شده‌اند، ادامه دهید. وقتی خریدی را شروع می کنید، همچنان می توانید از IStoreController استفاده کنید و متد InitiatePurchase() را فراخوانی کنید:

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

با این حال، هر محموله‌ای که وارد می‌کنید اثری نخواهد داشت (در رسید نهایی ظاهر نمی‌شود).

SubscriptionManager پشتیبانی نمی شود

Unity IAP کلاس SubscriptionManager را برای مدیریت اشتراک ها فراهم می کند. از آنجایی که اجرای استاندارد IAP Unity در این کلاس از بار توسعه دهنده استفاده می کند، این کلاس پشتیبانی نمی شود. شما همچنان می توانید این کلاس را ایجاد کنید، اما ممکن است هنگام استفاده از هر یک از روش های دریافت کننده کلاس، داده های غیر قابل اعتمادی دریافت کنید.

UpdateSubscription تغییرات API کوچکی دارد

افزونه Google Play Billing از استفاده از روش‌های SubscriptionManager.UpdateSubscription() و SubscriptionManager.UpdateSubscriptionInGooglePlayStore() برای ارتقا و تنزل رتبه اشتراک‌های شما پشتیبانی نمی‌کند. اگر بازی شما این روش ها را فراخوانی کند، یک GooglePlayStoreUnsupportedException پرتاب می شود.

کتابخانه صورت‌حساب Google Play یک API جایگزین برای استفاده به جای این روش‌ها ارائه می‌کند. برای ارتقا یا تنزل دادن یک اشتراک، روش UpdateSubscription() را با استفاده از حالت proration فراخوانی کنید:

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

وقتی GooglePlayStoreUnsupportedException گرفتار شد، می‌توانید این تماس متد را با چک پلتفرم یا در یک بلوک catch بپیچید.

برای اطلاعات بیشتر و مثال‌هایی درباره نحوه استفاده از حالت proration، به تنظیم حالت proration مراجعه کنید.