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

افزونه «خدمات صورت‌حساب Google Play» سرویس‌ها و دارایی‌های داخلی Unity را برای خریدهای درون‌برنامه، که Unity IAP نامیده می‌شود، گسترش می‌دهد تا جدیدترین ویژگی‌های «کتابخانه خدمات صورت‌حساب Google Play» را برای بازی شما فراهم کند. این راهنما توضیح می‌دهد که چگونه پروژه خود را برای استفاده از افزایه راه‌اندازی کنید. این راهنما همچنین نحوه پیاده‌سازی ویژگی‌های «کتابخانه خدمات صورت‌حساب Google Play» را در بازی‌تان در 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 برای Unity» را از صفحه نسخه‌های پخش در GitHub بارگیری کنید.
  2. از نوار منو Unity، روی Assets > Import Package > Custom Package کلیک کنید.

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

  4. در کادر گفتگوی وارد کردن بسته Unity، همه دارایی‌ها را در حالت انتخاب‌شده رها کنید و روی وارد کردن کلیک کنید.

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

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

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

  1. از نوار منو Unity، Google > Play Billing > Build Settings (Google > خدمات صورت‌حساب Play > تنظیمات ساخت) را انتخاب کنید.

  2. در پنجره «تنظیمات ساخت Play Billing»، روی Fix (رفع اشکال) کلیک کنید. این کار تداخل را برطرف می‌کند و فایل‌های Unity IAP متداخل را به دایرکتوری پشتیبان منتقل می‌کند. پس‌از کلیک کردن روی رفع مشکل، دکمه به بازیابی تغییر می‌کند که می‌توانید برای بازیابی فایل‌های اصلی متناقض روی آن کلیک کنید.

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

برای فعال کردن افزایه، پیاده‌سازی 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());

اگر بازی شما از همان «اسکریپت خریدار» برای چندین پلاتفرم استفاده می‌کند، باید بررسی پلاتفرم را اضافه کنید تا مطمئن شوید 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» در فروشگاه‌های برنامه Android دیگری نیز منتشر می‌کنید، باید پیاده‌سازی پیش‌فرض 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» خدمات Unity IAP را گسترش می‌دهد، بنابراین می‌توانید از همان Unity API برای مدیریت گردش‌های کاری خرید رایج استفاده کنید. توجه داشته باشید که به‌دلیل تفاوت‌های بین «کتابخانه خدمات صورت‌حساب Google Play» و پیاده‌سازی استاندارد خرید درون‌برنامه‌ای Unity برای فروشگاه‌های برنامه دیگر، تغییرات جزئی در رفتار میانای برنامه‌سازی کاربردی وجود دارد. اگر با میاناهای برنامه‌سازی کاربردی 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() را از میانای برنامه‌سازی کاربردی افزونه‌ها فراخوانی کنید:

// 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» استفاده می‌کنید، اکثر میاناهای برنامه‌سازی کاربردی به همان روش پیاده‌سازی IAP استاندارد Unity برای دیگر فروشگاه‌های برنامه عمل می‌کنند. بااین‌حال، در برخی موارد، APIها رفتار متفاوتی خواهند داشت. این بخش این تفاوت‌های رفتاری را شرح می‌دهد.

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

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

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

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

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

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

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

UpdateSubscription تغییرات کوچکی در میانای برنامه‌سازی کاربردی دارد

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

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

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

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

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