استفاده‌از کتابخانهٔ پرداخت نیواد در Unity 3D

infoبرای پیاده‌سازی پرداخت درون‌برنامه‌ای و مدل اقتصادی بازی از کتابخانهٔ کامل و قدرتمند سوملا (soomla) استفاده شده است

برای پیاده‌سازی پرداخت درون‌برنامه‌ای و مدل اقتصادی بازی از کتابخانهٔ کامل و قدرتمند سوملا (soomla) استفاده شده است و تمام متدها و API آن در دسترس شما قرار دارد؛ لذا برای اطلاعات بیشتر می‌توانید به مطالبی که دربارهٔ کتابخانهٔ سوملا در اینترنت به زبان‌های فارسی و انگلیسی موجود است نیز مراجعه کنید

این کتابخانه با هر دو نسخهٔ ۴ و ۵ محیط Unity سازگار است و از کافه‌بازار برای پردازش خرید‌ها استفاده می‌کند. با وارد کردن Nivad Application ID و Billing Secret که از پنل نیواد می‌توانید آن‌ها را برای بازی‌تان دریافت کنید، سرویس امنیت پرداخت نیواد فعال می‌شود.

خلاصهٔ فرایند

  1. ابتدا، لازم است که بسته های unity3d-store و pre-baked را دانلود کنید.

    • از این لینک بسته های soomla-unity3d-core.unitypackage و soomla-unity3d-store.unitypackage را دانلود کنید: unity3d-store-bazaar v1.13.0

  2. هر دو بسته ی یونیتی را به پروژه یونیتی خود اضافه کنید.

  3. در منوی یونیتی بر روی Window > Soomla > Edit Setting کلیک کنید و مقدار “Soomla Secret “ و ”Public Key” را تغییر دهید:

    • ارائه دهنده خدمات پرداخت خود را انتخاب کنید - این می‌تواند Google play , بازار , Amazoon , App Store یا WP باشد.

    • Soomla Seccret – یک آرایه رمزنگاری شده که شما ایجاد می‌کنید تا امنیت داده شما را فراهم کند.

    • کلید عمومی Public Key – لازم است که شما کلید عمومی (RSA) که از مارکت گرفته‌اید را وارد کنید.

    • شناسه نرم افزاری نیواد (Nivad Application id) – در صورتی که شما تیک گزینه ی حفاظت از تقلب نیواد را زده باشید

    • رمز پرداخت نیواد (Nivad Billing Secret) - در صورتی که شما تیک گزینه ی حفاظت از تقلب نیواد را زده باشید

  4. پیاده سازی خودتان از IstoreAssets را برای توصیف اجزای بازی خود ایجاد کنید.

    • به عنوان یک مثال ساده, مثال موجود در انتهای متن را ببینید.

  5. به SoomlaStore با کلاسی که ایجاد کرده‌اید مقداردهی کنید:

    SoomlaStore.Initialize(new YourStoreAssetsImplementation());

    SoomlaStore را در آغاز تابع MonoBehaviour مقدار دهی کنید و نه در تابع Awake

    Soolma, در‌واقع MonoBehaviour خاص خودش را دارد و نیاز دارد تا قبل از مقداردهی”بیدار” بشود.

    SoomlaStore را تنها زمانی که نرم‌افزار شما لود می‌شود مقداردهی کنید

     
  6. شما به یک Event Handler نیاز خواهید داشت تا شما را در مورد Eventهای پرداخت درون برنامه‌‌ای مطلع کند. توضیحات بیشتر درباره Event Handler در ادامه آمده است.

تمام شد، اکنون شما همه ملزومات ذخیره سازی وتوانایی پرداخت درون برنامه‌ای را دارید.

Unity & Android

راه اندازی سرویس IAB در پس زمینه

اگر شما storefront خود را درون بازی پیاده‌سازی کرده اید، توصیه می‌شود که سرویس IAB را در پس زمینه هنگامی که فروشگاه باز است باز کنید و هنگامی که بسته است،‌ ببندید.

//راه اندازی سرویس Iab
SoomlaStore.StartIabServiceInBg();

// متوقف کردن سرویس Iab 
SoomlaStore.StopIabServiceBg();

این اقدام ضروری نیست, بازی شما بدون آن هم کار خواهد کرد اما ،‌ما آن را به دلیل افزایش کارایی بیشنهاد می‌دهیم. 

نحوهٔ انجام خرید

برای خرید آیتم‌ها دو متد تعبیه شده است که تمام نیازهای بازی‌ها را پوشش می‌دهد: PurchaseWithMarket و PurchaseWithVirtualItem.

PurchaseWithMarket یک متد برای خرید است که به کاربران اجازه می‌دهد VirtualItem ها را از بازار،‌ گوگل پلی،‌ آمازون یا اپ استور خریداری کنند. PurchaseWithVirtualItem یک متد دیگر است که به کاربران شما اجازه می‌دهد که یک VirtualItem را با VirtualItem دیگری بخرند. مثلاً خرید یک شمشیر با ۱۰۰ الماس.

برای معین کردن متدی که VirtualItem مجازی گوناگون شما (… goods, coins) خریداری می‌شوند،‌ شما نیاز دارید تا پیاده‌سازی خود از IstoreAsset را انجام دهید. (گام ۴ در «خلاصهٔ فرایند» در بالا)

یک مثال:

بیاید فرض کنیم شما یک VirtualCurrencyPack دارید تابع TEN_COINS_PACK را فرا می‌خوانید و یک VirtualCurrency تابع COIN_CURRENCY را فرا می‌خوانید:

VirtualCurrencyPack TEN_COINS_PACK = new VirtualCurrencyPack(
                "10 Coins",                    // name
                "A pack of 10 coins",        // description
                "10_coins",                    // item id
                10,                             // number of currencies in the pack
                COIN_CURRENCY_ITEM_ID,         // the currency associated with this pack
                new PurchaseWithMarket("com.soomla.ten_coin_pack", 1.99)
);

اکنون می‌توانید از StoreInventory برای خرید یک VirtualCurrencyPack استفاده کنید

StoreInventory.buyItem(TEN_COINS_PACK.ItemId);

و تمام شد!‌ unity3d-store می داند که چگونه برای شما به بازار ،‌ گوگل پلی و یا به اپ استور متصل شود و کاربران شما را به سیستم خریدشان برای تکمیل فرایند خرید هدایت میکند. فراموش نکنید که eventهای فروشگاه را register کنید تا از موفق بودن یا نبودن خریدها آگاه شوید (به بخش Event Handling رجوع کنید)

Storage & Meta-Data

زمانی که SoomlaStore را initialize می‌کنید،‌ دو کلاس دیگر نیز به طور خودکار initialize می‌شوند: StoreInventory و StoreInfo :

  • StoreInventory یک کلاس convenience که به شما امکان اجرای عملیات در VirtualCurrencyها و VirtualGoodها را می دهد.از آن برای ایجاد موجودی VirtualItemها در بازی استفاده کنید. ( از ItemIdهای آن‌ها استفاده کنید)

  • StoreInfo جایی است که تمام اطلاعات متادیتا مختص بازی در آن بازیابی می‌شود. این کلاس با پیاده‌سازی از IstoreAssets مقدار دهی می شود. و می‌توان از آن برای بازیابی اطلاعات مربوط به خصوصیات بازی استفاده کرد.

on-device storage به طور رمز نگه داری شده در دیتابیس SQLite ذخیره سازی می شود.

مثال استفاده

  • گرفتن VirtualCurrency با itemId:

VirtualCurrency coin = (VirtualCurrency) StoreInfo.GetItemByItemId("currency_coin");
  • به کاربر ده واحد از یک virtual currency با itemIdی "currency_coin" تعلق بدهید.

StoreInventory.GiveItem("currency_coin", 10);
  • ۱۰ عدد virtual good با temIdی "green_hat" را از کاربر کسر کنید:

    StoreInventory.TakeItem("green_hat", 10);
  • دریافت موجودی green hatها (virtual good با itemIdی "green_hat")

    int greenHatsBalance = StoreInventory.GetItemBalance("green_hat");

Event Handling

SOOMLA اجازه می‌دهد تا Event های فروشگاه را دریافت کنید و جزییات رفتاری اپلیکیشن خود را با Event ها پیاده‌سازی کنید.

رفتار خود را به رفتار پیشفرض پیاده‌سازی شده توسط SOOMLA اضافه کنید. رفتار SOOMLA را جایگزین نکنید!‌

کلاس‌های Event جایی است که تمام Event به واسطه آن اجرا می شوند. به عنوان مثال برای دریافت Event مربوط به خرید موفق یک آیتم از فروشگاه از این کد می‌توانید استفاده کنید:

StoreEvents.OnMarketPurchase += onMarketPurchase;

public void onMarketPurchase(PurchasableVirtualItem pvi, string payload, Dictionary<string, string> extra) {
    // pvi آیتم مجازی خریدنی (PurchasableVirtualItem)ای است که با موفقیت خریده شده.
    // ... منطق خاص مورد نیازتان ...
}

دقت کنید که:Event Handler ها را پیش از initialize کردن SoomlaStore باید initialize کنید. لذا در صورتی که از Event Handling استفاده می‌کنید این کد:

StoreEvents.OnSoomlaStoreInitialized += onSoomlaStoreInitialized;

باید حتما پیش از این کد بیاید:

Soomla.SoomlaStore.Initialize(new Soomla.Example.MuffinRushAssets());