استفادهاز کتابخانهٔ پرداخت نیواد در Unity 3D
برای پیادهسازی پرداخت درونبرنامهای و مدل اقتصادی بازی از کتابخانهٔ کامل و قدرتمند سوملا (soomla) استفاده شده است و تمام متدها و API آن در دسترس شما قرار دارد؛ لذا برای اطلاعات بیشتر میتوانید به مطالبی که دربارهٔ کتابخانهٔ سوملا در اینترنت به زبانهای فارسی و انگلیسی موجود است نیز مراجعه کنید برای پیادهسازی پرداخت درونبرنامهای و مدل اقتصادی بازی از کتابخانهٔ کامل و قدرتمند سوملا (soomla) استفاده شده است
این کتابخانه با هر دو نسخهٔ ۴ و ۵ محیط Unity سازگار است و از کافهبازار برای پردازش خریدها استفاده میکند. با وارد کردن Nivad Application ID و Billing Secret که از پنل نیواد میتوانید آنها را برای بازیتان دریافت کنید، سرویس امنیت پرداخت نیواد فعال میشود.
خلاصهٔ فرایند
ابتدا، لازم است که بسته های unity3d-store و pre-baked را دانلود کنید.
از این لینک بسته های soomla-unity3d-core.unitypackage و soomla-unity3d-store.unitypackage را دانلود کنید: unity3d-store-bazaar v1.13.0
هر دو بسته ی یونیتی را به پروژه یونیتی خود اضافه کنید.
در منوی یونیتی بر روی 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) - در صورتی که شما تیک گزینه ی حفاظت از تقلب نیواد را زده باشید
پیاده سازی خودتان از IstoreAssets را برای توصیف اجزای بازی خود ایجاد کنید.
به عنوان یک مثال ساده, مثال موجود در انتهای متن را ببینید.
به SoomlaStore با کلاسی که ایجاد کردهاید مقداردهی کنید:
SoomlaStore.Initialize(new YourStoreAssetsImplementation());
SoomlaStore را در آغاز تابع MonoBehaviour مقدار دهی کنید و نه در تابع Awake
Soolma, درواقع MonoBehaviour خاص خودش را دارد و نیاز دارد تا قبل از مقداردهی”بیدار” بشود.
SoomlaStore را تنها زمانی که نرمافزار شما لود میشود مقداردهی کنید
شما به یک 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());