Open-source – سازنده: Amin Hasanloo
این پکیج یک لایهی یکپارچه برای پرداخت درونبرنامهای و تبلیغات در یونیتی است:
- پرداخت (IAP): گوگلپلی (Unity IAP)، کافهبازار، مایکت، زرینپال (REST).
- تبلیغات (Ads): AdMob (Google Mobile Ads)، تپسل (Tapsell / Tapsell Plus)، آیرونسورس / Unity LevelPlay.
همهچیز از Inspector و از طریق یک ScriptableObject تنظیم میشود و با Scripting Define Symbols در ادیتور، هر شبکه/استور را به سادگی فعال/غیرفعال میکنید.
- Unity 2021.3+ (تستشده روی 2021.3/2022.3/2023.x)
- Android Build System: Gradle
- External Dependency Manager (EDM4U) – همراه با Google Mobile Ads نصب میشود.
- این ریپو را کلون کنید یا فایل
.tgz/.zipرا در پوشهی Packages پروژهتان کپی و درmanifest.jsonاضافه کنید:
"dependencies": {
"com.aminhasanloo.monetization": "file:../com.aminhasanloo.monetization"
}- از منو:
Create > Amin Hasanloo > Monetization Settingsیک تنظیمات بسازید و پر کنید.
میتوانید فولدر com.aminhasanloo.monetization را به Assets/ کپی کنید.
از منوی Window > Monetization > Settings یا از خود آبجکت Settings:
- Store: یکی یا چند تا (GooglePlay / CafeBazaar / Myket / Zarinpal).
- Google Play: نیازی به کلید عمومی داخل کلاینت نیست؛ Unity IAP استفاده میشود. محصولات را در
IAP Catalogتعریف کنید. - CafeBazaar:
Public Keyاز داشبورد بازار + لیست SKUها. - Myket:
Public Keyاز داشبورد مایکت + لیست SKUها. - Zarinpal:
merchant_id،callback_url(ترجیحاً به سرور خودتان).
برای امنیت، تأیید نهایی تراکنش زرینپال را روی سرور انجام دهید و نتیجه را به کلاینت برگردانید.
- AdMob: App ID اندروید، Ad Unit IDs (Banner/Interstitial/Rewarded).
- Tapsell/Plus: App ID/Key و Zone IDs.
- ironSource/LevelPlay: App Key و نام Placementها.
در همان صفحه میتوانید شبکهها را فعال کنید و Define Symbols بهصورت خودکار ست میشود:
AD_ADMOB, AD_TAPSELL, AD_IRONSOURCE, STORE_GOOGLEPLAY, STORE_CAFEBAZAAR, STORE_MYKET, PAY_ZARINPAL
using AminHasanloo.Monetization;
public class Demo : MonoBehaviour
{
async void Start()
{
// راهاندازی
await Monetization.InitializeAsync();
// تبلیغات
if (Ads.IsRewardedReady("reward_default"))
Ads.ShowRewarded("reward_default", onReward: r => Debug.Log($"reward: {r.Amount}"));
// خرید درونبرنامهای
Iap.Purchase("coins_100"); // بر اساس Provider فعال، به استور مربوطه هدایت میشود
}
}Monetization.InitializeAsync()– راهاندازی همهی ماژولها بر اساس تنظیمات.Ads.Load/ShowبرایBanner,Interstitial,Rewarded(placement key).Iap.Initialize,Iap.Purchase(productId),Iap.Restore(), رخدادها:OnPurchaseSucceeded/Failed/Restored.
- Unity IAP (
com.unity.purchasing– حداقل 4.13.0 برای Google Billing v7) - Google Mobile Ads Unity (AdMob) – از گیتهاب
- Tapsell / Tapsell Plus Unity – از مستندات تپسل
- ironSource / LevelPlay Unity – از مستندات رسمی یونیتی/ironSource
- CafeBazaar Unity IAB – از گیتهاب رسمی بازار
- Myket Unity IAB – از KB مایکت
- Zarinpal REST – بدون SDK، با REST داخلی (اختیاری با سرور خودتان).
به README پروژههای رسمی مراجعه کنید (لینکها داخل ریپوی این پکیج آمدهاند).
-
این پکیج
Plugins/Android/AndroidManifestTemplate.xmlرا دارد که اسلاتهای لازم برای:- Deep Link زرینپال (
myapp://zarinpal) - مجوزهای بازار/مایکت
- Activityهای پروکسی هر استور
فراهم میکند. اگر از پلاگینهای رسمی بازار/مایکت استفاده کنید، ممکن است
EDM4Uآنها را خودکار اضافه کند.
- Deep Link زرینپال (
-
حتماً از
mainTemplate.gradleاستفاده کنید و MinSdkVersion را طبق SDKها تنظیم کنید.
- سرور بکاند برای Verify زرینپال الزامی است (پیشنهادی قوی).
- پارامترهای حساس (merchant_id، کلیدهای RSA) را در سرور ذخیره کنید.
- برای کالاهای مصرفی بعد از Verify موفق، مصرف/تحویل را انجام دهید.
MIT – استفاده و توسعه آزاد.
نسخهی SDKها سریعاً تغییر میکند. پیش از انتشار حتماً نسخههای آخر را از مراجع رسمی بروزرسانی و در Player Settings > Scripting Define Symbols همسانسازی کنید.