بازی سازی

پرداخت درون برنامه ای در یونیتی ۵

نوشته شده توسط امین سجودی

به نام خدا

پلاگین بنده با توجه به کامنت ها فعلا درست کار نمی کنه ، بنده هم زمان لازم برای تست اون رو ندارم، با مسئولیت خودتون این آموزش رو بخوانید.

آموزش دوم پرداخت درون برنامه ای برای یونیتی ۵

اگر آموزش اول رو مطالعه نکردید به این لینک سر بزنید .

این آموزش با پلاگین ورژن ۱ ساخته شده .(الان ورژن ۱.۲ دو هم اماده شده)

 

بی مقدمه بریم سر اصل کار .

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

 

توی بازی ای که قراره بسازیم بازیکن با هر  کلیک روی دکمه وسط صفحه ۱ سکه می گیره . بازیکن می تونه با استفاده از پرداخت درون برنامه ای هم سکه بخره به جای اینکه بازی کنه . به همین سادگی .

یک پروژه جدید یونیتی درست کنید .

یک Panel درست کنید و همه اینها رو توی اون قرار بدید :

یک Button در وسط صفحه درست کنید و روش بنویسید ClickMe . یک Button دیگه درست کنید و بگذاریدش پایین صفحه و روش بنویسی BuyGold . یک Text هم درست کنید و بگذاریدش بالای صفحه و توش بنویسید Gold . خوب باید یه همچنین صفحه ای داشته باشید :

Screen Shot 2016-07-01 at 8.37.26 PM

خیلی خوب . این قراره که صفحه بازی ما باشه . حالا بریم سراغ اینکه اینو اضافه کنیم که بازیکن با زدن دکمه ClickMe بتونه Gold دریافت کنه .

یک فایل سی شارپ بسازید و اسمش رو بزارید GameHandler.cs ، این فایل قراره که اتفاقات درون بازی ما رو کنترل کنه .

 

محتویات کلاس GameHandler باید به این شکل باشه :


using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class GameHandler : MonoBehaviour
{
	public Text Gold;
	private int currentGold = 0;

	public void AddGoldByClick()
	{
		currentGold = currentGold + 1;
		Gold.text = "Gold : " + currentGold;
	}
}

خیلی خوب ، این کلاس رو به MainCamera نسبت بدید و پارامتر Gold اون رو ست کنید .

 

حالا تنظیم کنید که وقتی دکمه ClickMe کلیک شد تابع AddGoldByClick این کلاس صدا بشه .

Screen Shot 2016-07-01 at 8.39.59 PM

 

بازی رو اجرا کنید ، الان باید توانسته باشید با زدن دکمه ClickMe به میزان Gold تون اضافه کنید .

 

از این جا به بعد می خوایم پرداخت درون برنامه ای رو به بازیمون اضافه کنیم .

پلاگین پرداخت درون برنامه ای که قولش رو داده بودم رو از اینجا دانلود کنید .

پلاگین پرداخت درون برنامه ای کافه بازار بر روی یوینیتی

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

اولین چیزی که می بینید اینه که دو تا فولدر به نام های Plugins و CafeBazaarStore به پروژه شما اضافه شدن .

علاوه بر این تعداد قابل توجهی ارور در کنسول یونیتی ظاهر می شن .

قبل از هر کاری برای حل ارور ها پلتفرم بازی تون به اندروید تغییر بدید تا ارور ها محو بشن .

 

بسیار خوب . حالا کاری که باید بکنیم اینه که Prefab مخصوص پلاگین که توی فولدر

CafeBazaarStore —> Prefabs —>StoreHandler

رو بکشیم و بندازیم توی سن بازیمون .

بعد از اون از طریق منوی

Window —> CafeBazaar

پنجره مخصوص پلاگین رو باز می کنیم .

Screen Shot 2016-07-01 at 8.41.31 PM

روی گزینه AddItem کلیک می کنیم و یک آیتم به اسم gold درست می کنیم .

Screen Shot 2016-07-01 at 8.42.54 PM

قراره بازیکن با خریدن این آیتم gold مقدار ۱۰۰ سکه به میزان Gold اش اضافه بشه .

قبل از اینکه بخوایم کاری بکنیم باید Store رو Start کنیم . به علاوه باید یک تابع دیگه به کلاس GameHandler اضافه کنیم که با فراخوانی اون تابع فرایند خرید سکه شروع بشه .


using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using CafeBazarIab;

public class GameHandler : MonoBehaviour
{
	public Text Gold;
	private int currentGold = 0;

	public void AddGoldByClick()
	{
		currentGold = currentGold + 1;
		Gold.text = "Gold : " + currentGold;
	}
	void Start()
	{
		StoreHandler.Instance.StartStore(StoreEventHandler , "PublicKey" , "payload");
	}
	public void BuyGold(ShopItem item)
	{
		StoreHandler.Instance.Purchase(item);
	}
}

 نکات مهمی توی این تغییراتی که دادیم وجود داره که من دونه دونه اون ها رو توضیح میدم .

اولین تغییر اضافه شدن خط

using CafeBazarIab;

بدون این تغییر ما نمی تونیم از پلاگین استفاده کنیم . چون توی یک NameSpace جدا تعریف شده  .

نکته بعدی تابع StartStore هستش که ۳ تا ورودی می گیره .

void Start()
	{
		StoreHandler.Instance.StartStore(StoreEventHandler , "PublicKey" , "payload");
	}
 

ورودی دوم Public key که توی پنل کافه بازار بعد از آپلود بازیتون می تونید اون رو از کافه بازار بگیرید . ورودی سوم هم Payload هستش که هر چی دوست دارین می تونین ست کنین (مربوط به مسایل امنیتی میشه و من اینجا در موردش توضیح نمی دم ) ، اما ورودی اول ، در این قسمت پلاگین از شما یک کلاس می خواد که اتفاقات مربوط به Store رو از این طریق به اطلاعتون برسونه ، مثلا وقتی خرید تموم شد کافه بازار به شما از این طریق اطلاع میده که خرید موفقیت آمیز بود یا خیر ، آیا کاربر فرایند خرید رو Cancell کرد یا نه و …

نکته بعدی تابع خرید هستش ، شما با صدا کردن این تابع فرایند خرید رو اجرا می کنید . اما نکته ای که وجود داره اینه که این تابع برای خرید نیاز به یک ورودی از جنس ShopItem داره ، خوشبختانه شما قبلا این آیتم رو از طریق پنجره مخصوص پلاگین ساختید . برای پیدا کردنش کافیه که به Prefab ای که توی سن بازی تون انداختید یعنی StoreHandler نگاه کنید و بچه های اون رو ملاحظه کنید .


public void BuyGold(ShopItem item)
	{
		StoreHandler.Instance.Purchase(item);
	}
 

خیلی خوب این کد یک مشکلی داره اونم اینه که ما هنوز EventHandler خودمون رو نساختیم . پس یک کلاس جدید درست کنید به اسم StoreEventHandler.cs ، این کلاس باید اینترفیس IStoreEventHandler.cs پیاده کنه (Implement کنه) .یعنی این شکلی :

using UnityEngine;
using System.Collections;
using CafeBazarIab;

public class StoreEventHandler : MonoBehaviour , IStoreEventHandler {

}

 

حالا اگه مثل من از MonoDevelop استفاده می کنید می تونید با انتخاب کردن IStoreEventHandler توی اسکریپت و بردن موستون به سمت چپ و کلیک روی علامت چسب زخمی که ظاهر شده و انتخاب گزینه Implement Interface تمام توابعی که باید بنویسید رو براتون بسازه .
اگر هم موفق نشدید مساله نیست  ، اینم کلاس StoreEventHandler بعد از پیاده سازی توابع :

using UnityEngine;
using System.Collections;
using CafeBazarIab;
public class StoreEventHandler : MonoBehaviour , IStoreEventHandler 
{ 
	#region IStoreEventHandler implementation 
	public void ProcessPurchase (ShopItem item) 
	{ 
		throw new System.NotImplementedException (); 
	} 
	public void OnConsumeFinished (ShopItem item) 
	{ 
		throw new System.NotImplementedException (); 
	} 
	public void OnGetPurchasesFinished (string allRawSKU, int length) 
	{ 
		throw new System.NotImplementedException ();
	} 
	public void OnSetupSuccessful () 
	{ 
		throw new System.NotImplementedException ();
	} 
	public void OnProblemSettingUpIAB (string message, StoreErrorCodes errorCode) 
	{ 
		throw new System.NotImplementedException (); 
	} 
	public void OnFailedToQueryInventory (string message, StoreErrorCodes errorCode) 
	{ 
		throw new System.NotImplementedException ();
	} 
	public void OnMissingToken (string message, StoreErrorCodes errorCode, ShopItem item = null) 
	{ 
		throw new System.NotImplementedException ();
	} 
	public void OnSubscriptionNotAvilable (string message, StoreErrorCodes errorCode, ShopItem item = null) 
	{ 
		throw new System.NotImplementedException (); 
	} 
	public void OnFailedToConsumePurchase (string message, StoreErrorCodes errorCode, ShopItem item = null) 
	{ 
		throw new System.NotImplementedException (); 
	} 
	public void OnConsumeFinishedListenerError (string message, StoreErrorCodes errorCode, ShopItem item = null) 
	{
		throw new System.NotImplementedException ();
	} 
	public void OnPurchaseFailed (string message, StoreErrorCodes errorCode, ShopItem item = null) 
	{ 
		throw new System.NotImplementedException ();
	} 
	public void OnPurchasePayloadVerificationFailed (string message, StoreErrorCodes errorCode, ShopItem item = null) 
	{ 
		throw new System.NotImplementedException ();
	} 
	public void OnUserCancelled (string message, StoreErrorCodes errorCode, ShopItem item = null) 
	{ 
		throw new System.NotImplementedException ();
	}
	public void OnUnknownError (StoreErrorCodes errorCode, string message = "", ShopItem item = null) 
	{ 
		throw new System.NotImplementedException (); 
	}
	#endregion 
}

حالا کلاس GameHandler رو به این شکل عوض کنید :

 

using UnityEngine;
using System.Collections;
using UnityEngine.UI; 
using CafeBazarIab; 
public class GameHandler : MonoBehaviour 
{ 
	public Text Gold;
	private StoreEventHandler eventHandler;
	private int currentGold = 0;

	public void AddGoldByClick()
	{ 
		currentGold = currentGold + 1;
		Gold.text = "Gold : " + currentGold; 
	} 
	void Start() 
	{ 
		eventHandler = gameObject.GetComponent<StoreEventHandler>();
		StoreHandler.Instance.StartStore(eventHandler , "PublicKey" , "payload");
	} 
	public void BuyGold(ShopItem item) 
	{ 
		StoreHandler.Instance.Purchase(item);
	} 
} 

و کلاس StoreEventHandler مون رو هم به MainCamera نسبت بدید .

 

الان باید تنظیم کنیم که با کلیک روی دکمه BuyGold تابع BuyGold کلاس GameHandler صدا بشه .

برای ورودی تابع gold را انتخاب کنید .

 

دقت کنید که ما هنوز مشخص نکردیم که بازیکن با خرید gold از طریق کافه بازار چقدر به میزان Gold اش اضافه می شه . برای اینکار باید کلاس StoreEventHandler رو تغییر بدیم . قبل از اینکه StoreEventHandler رو تغییر بدیم من یک تابع ساده دیگه به GameHandler اضافه کردم تا کارمون راحت تر باشه .

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using CafeBazarIab;

public class GameHandler : MonoBehaviour
{
	public Text Gold;
	private StoreEventHandler eventHandler;
	private int currentGold = 0;

	public void AddGoldByClick()
	{
		currentGold = currentGold + 1;
		Gold.text = "Gold : " + currentGold;
	}
	void Start()
	{
		eventHandler = gameObject.GetComponent<StoreEventHandler>();
		StoreHandler.Instance.StartStore(eventHandler , "PublicKey" , "payload");
	}
	public void BuyGold(ShopItem item)
	{
		StoreHandler.Instance.Purchase(item);
	}
	public void addGold(int value)
	{
		currentGold = currentGold + value;
		Gold.text = "Gold : " + currentGold;
	}
}

 
using UnityEngine;
using System.Collections;
using CafeBazarIab;

public class StoreEventHandler : MonoBehaviour , IStoreEventHandler {
	private GameHandler gameHandler;

	void Start()
	{
		gameHandler = gameObject.GetComponent<GameHandler>();
	}

	#region IStoreEventHandler implementation

	public void ProcessPurchase (ShopItem item)
	{
		if (item.SKU == "gold") {
			StoreHandler.Instance.Consume(item);
		}
	}

	public void OnConsumeFinished (ShopItem item)
	{
		if (item.SKU == "gold") {
			gameHandler.addGold(100);
		}
	}

	public void OnGetPurchasesFinished (string allRawSKU, int length)
	{

	}

	public void OnSetupSuccessful ()
	{

	}

	public void OnProblemSettingUpIAB (string message, StoreErrorCodes errorCode)
	{
		throw new System.NotImplementedException ();
	}

	public void OnFailedToQueryInventory (string message, StoreErrorCodes errorCode)
	{
		throw new System.NotImplementedException ();
	}

	public void OnMissingToken (string message, StoreErrorCodes errorCode, ShopItem item = null)
	{
		throw new System.NotImplementedException ();
	}

	public void OnSubscriptionNotAvilable (string message, StoreErrorCodes errorCode, ShopItem item = null)
	{
		throw new System.NotImplementedException ();
	}

	public void OnFailedToConsumePurchase (string message, StoreErrorCodes errorCode, ShopItem item = null)
	{
		throw new System.NotImplementedException ();
	}

	public void OnConsumeFinishedListenerError (string message, StoreErrorCodes errorCode, ShopItem item = null)
	{
		throw new System.NotImplementedException ();
	}

	public void OnPurchaseFailed (string message, StoreErrorCodes errorCode, ShopItem item = null)
	{
		throw new System.NotImplementedException ();
	}

	public void OnPurchasePayloadVerificationFailed (string message, StoreErrorCodes errorCode, ShopItem item = null)
	{
		throw new System.NotImplementedException ();
	}

	public void OnUserCancelled (string message, StoreErrorCodes errorCode, ShopItem item = null)
	{
		throw new System.NotImplementedException ();
	}

	public void OnUnknownError (StoreErrorCodes errorCode, string message = "", ShopItem item = null)
	{
		throw new System.NotImplementedException ();
	}

	#endregion

}

 

خیلی خوب حالا که پروژه تکمیل شد قبل از اینکه بتونیم تستش کنیم باید چند تا کار رو قبلش بکنیم .

اولین کار پر کردن تنظیمات PlayerSetting یونیتی هتستش (BundleIdentifier و …)

بعد که خروجی گرفتیم باید این خروجی رو پنل کافه بازارمون آپلود کنیم .

 

بعد می تونیم با استفاده از کلید عمومی یا همون Public Key که کافه بازار به ما میده توی کلاس GameHandler مقدار Public key مون رو عوض کنیم .

 

بعدش هم باید محصولمون رو به لیست محصولات در کافه بازار اضافه کنیم .

 

حالا می تونیم از یونیتی خروجی بگیریم و تست کنیم .

 

پلاگین پرداخت درون برنامه ای کافه بازار بر روی یوینیتی
Download CafeBazaarIabPluginForUnity

پروژه پایانی با یونیتی ۵

خروجی اندروید

درباره نویسنده

امین سجودی

امین یک توسعه دهنده نرم افزار و علاقه مند به بازی می باشد که بیشتر وقت خود را صرف برنامه نویسی و یادگیری تکنولوژی های جدید می کند .

دیدگاه

  • یه چیزی میشه یه توضیحی در مورد StoreEventHandler بدی
    مثلا هر کدوم کی اجرا میشه
    فعلا فقط دوتا اولی مفهومه که تغیرش دادی بقیشون درست معلوم نیست کی اجرا میشه بجز یکی دو مورد

  • من میخوام این پلاگین رو طوری تنظیم که بتونم خود بازی رو بفروشم
    یعنی وقتی دفعه بازی بالا میاد کاربر بره به صفحه پرداخت بازار مبلغ رو
    پرداخت که کرد برگرده بازی کنه. راستی اگه بازی رو پاک کنه بازم باید
    واسه واسه نصب مجدد پول بده؟

    • در مورد قسمت اول سوالتون حتما آموزش اول رو مطالعه کنید .
      بله می توانید این کار را انجام بدید . فقط کافیه ابتدای بازی GetPurchases رو صدا کنید و چک کنید که آیا بازیکن بازی را خریده است یا نه . دقت کنید که خرید رو مصرف نکنید .
      اگه بازی رو پاک هم بکنه بازم اطلاعات خرید روی سرور کافه بازار موجود است پس مشکلی نیست .

  • سلام
    وقتی خریدی انجام میشه بازار یه purchase token برای validation خرید در نظر میگیره. این هیچ جا تو این پلاگین نیست . چطور به purchase token خریدمون دسترسی داشته باشیم؟

  • سلام آقای سجودی
    واقعا باید بابت زحمتی که بابت این پلاگین کشیدین ازتون تشکر کنم.
    من پروژه ای دارم که روی یونیتی 4.3.4 ساخته شده و از ترس اینکه با آپدیت یونیتی یکوقت جاییش به هم نریزه فعلا یونیتی رو آپدیت نکردم.
    سعی کردم پلاگین شما رو روی این نسخه از یونیتی بکار بگیرم ولی با تغییراتی هم که دادم اصلا کار نمیکنه.
    راستشو بخواین من یکمی عجله دارم.امکانش هست نسخه مناسبی از پلاگین که روی یونیتی 4.3.4 کار کنه یا آموزش تغییرش و یا اینکه خودتون زحمت آماده سازی شو بکشین و به من بدین؟

    • مشکلش چیه ؟ چه خطایی میده ؟ فرایند اصلا اجرا نمیشه ؟ صفحه بازار میاد یا نه کلا هیچ اتفاقی نمی افته و فقط توی خود بازی باقی می مونه ؟
      حقیقتش من الان وقتم خیلی محدوده ، ضمنا هدف اصلی این پلاگین برای نسخه ۵ به بعد بوده که کافه بازار پلاگین خودش رو آپدیت نکرده بود و روی یونیتی ۵ کار نمی کرد ، برای نسخه یونیتی شما خود پلاگین کافه بازار کار می کنه .

  • سلام
    با تشکر از زحمات شما
    متاسفانه به شکل عجیبی در پروژه من با اینکه هیچ پلاگین دیگه ای نصب نیست پلاگین شما کار نمیکنه

    در حقیقت با دیباگی که گرفتم از تک تک تابع ها وقتی روی دکمه خرید تاچ میکنم تابع buyGold اجرا میشه ولی خط کد زیر هیچوقت اجرا نمیشه
    StoreHandler.Instance.Purchase(item);
    پس هیچوقت عملیات خرید اغاز نمیشه.

    جالب اینجا روی یک پروژه تازه و همین سورس پوژه تست خودتون پلاگین درست کار میکنه ولی روی پروژه ما متاسفانه اینجوریه.
    پروژه هم الان بیش از 90 درصدش جلو رفته و امکانش نیست بخوایم پروژه رو از اول بسازیم
    ممنون میشم اگر کمکی بکنید

    • سلام ، ممنون لطف دارین ،
      سوالتون یکم عجیبه چون در حقیقت این خط کد رو خودتون باید اجرا کنید ، من توی پروژه خودم وقتی دکمه خرید کلیک می شه این خط کد رو اجرا می کنم . به تابع Buy Gold توی کلاس GameHandler نگاه کنید .

      public void BuyGold(ShopItem item)
      
        {
      
          StoreHandler.Instance.Purchase(item);
      
        }
      
  • سلام
    ممنون از سایت خوبتون
    اگه امکان داره یه اموزش یا یه توضیح در مورد نحوه استفاده از intent های بازار برای ثبت نظر برای بازی بدید
    دم شما گرم

  • بسیار عالی. پلاگینی که نوشتین خیلی راحت قابل فهم و قابل استفاده است درست بر خلاف پلاگین خود کافه بازار. پلاگین شما رو میشه تو یکی دو ساعت فهمید ولی پلاگین کافه بازار که از سوملا استفاده میکنه چن روز وقت ادمو میگیره. به همه توصیه میکنم که از این پلاگین استفاده کنن.
    با تشکر فراوان

  • سلام خسته نباشید ممنون از آموزش خوبتون.
    ی سوالی داشتم چجوری میشه یکه کالای غیر مصرفی به با این روش ایجاد کرد ؟
    من میخوام تعدادی از مراحلم پولی باشه با این روشی که ساختم هر بار بازی رو از اول باز میکنم باز باید اون مراحل رو بخرم . این مشکل رو چجوری باید حل کنم ؟
    ممنون

  • سلام و خسته نباشید. من هم مشکلی شبیه masood رو دارم. نسخه ای که باهاش کار میکنم یونیتی 5.1 هست ولی پروژه خودتون رو باهاش بیلد میکنم خوب کار میکنه ولی من تمام پروژه رو مثل خودتون ساختم کد
    StoreHandler.Instance.Purchase(item);
    کار نمیکنه. با تشکر

    • امکان داره مشکل شما از این باشه که صبر نمی کنید که استور استارت بشه .
      شما باید حتما قبل از شروع خرید استور رو استارت کرده باشید و تاییدیه اون رو از طریق Event Handler تون گرفته باشید . تابع OnSetupSuccessful خبر استارت شدن استور رو به شما میده .

      • امین جان منم این مشکل رو دارم
        گویا خط
        StoreHandler.Instance.StartStore(eventHandler ,…..
        اجرا نمیشه.
        من تست کردم اجرا نمیشه.نه روی کامپیوتر نه روی موبایل.
        چ باید کرد؟

  • سلام
    این پلاگین فقط در یونیتی 5 کار میکنه ؟ من توی آخرین ورژن 4.6 همه این کار ها رو بدون تغییر انجام دادم ولی صفحه پرداخت بازار باز نمیشه ! حتی اسم gold رو هم عوض نکردم !

  • سلام . من نسخه 1.2 رو دانلود کردم و تونستم اینکار رو انجام بدم توی یونیتی 4.6 چون نسخه 1 کار نمیکرد نمدونم چرا !
    فقط من یکم گیج شدم . داکیومنت پی دی اف رو هم خوندم ، کامل بود ولی یه سری سوال بی جواب دارم !
    اگه بخوام یک محصول رو بخرم ولی مصرف نکنم چه تابعی باید صدا زده بشه ؟
    اگه بخرم و مصرف کنم چی ؟
    با چه تابعی میتونم بفهمم که فلان محصول قبلاً خریداری شده یا نه ؟
    بازم میگم داکیومنت خوب بود ولی من گیج شدم 😀 لطفاً راهنمایی کنید ، مخصوصاً سوال آخر 🙂
    خسته نباشین ، پلاگینتون خیلی عالی بود 🙂

    • سلام
      من توی این آموزش جواب سوالاتتون رو به صورت کلی دادم :http://nullreference.ir/?p=183
      وقتی شما تابع GetPurchases رو صدا می کنید برنامه شما لیست محصولات رو از کافه بازار می گیره و برای هر کدوم ProcessPurchase رو که توی EventHandler تون هست صدا می کنه ، شما می تونید اونجا محصولتون رو مصرف کنید یا اینکه نکنید . هر بار هم که شما فرایند خرید رو آغاز می کنید در انتهای فرایند خرید خود پلاگین تابع GetPurchases رو صدا می کنه و در نتیجه تابع ProcessPurchase برای تمام خرید هاتون صدا میشه .
      اکه بازم سوالی بود در خدمتم.

      • یعنی این شرط زیر که گذاشتیم توی تابع ProcessPurchase ؛ خرید رو مصرف میکنه :
        (“if(item.Sku == “gold
        (StoreHandler.Instance.Consume(item
        اگه این شرط نباشه خرید مصرف نمیشه و همیشه هست آره ؟
        GetPurchases که توی کداتون نیست ! (StoreHandler.Instance.Purchase(item منظورتونه که موقع کلیک روی دکمه خرید صدا زده میشه ؟
        از آخر سوال سومم رو جواب ندادین 😀 برای اینکه بفهمم فلان محصول خریداری شده یا نه چه کاری باید انجام بشه ؟ البته (“StoreHandler.Instance.GetPurchaseBySKU(“gold رو من استفاده کردم و داخل یه متغییر با نوع Purchase ذخیره کردمش و توی یه تکس ساده چاپش کردم اما خروجی نداره !

  • ببینید سعی کردم کلماتی که استفاده کردم گویا باشند ، (StoreHandler.Instance.Consume(item این عبارت خرید شما رو مصرف میکنه ، شما اگه می خوای مصرف نشه نباید Consume اش کنی . این جوری می تونی مکانیزم مثلا نسخه طلایی و … رو پیاده سازی کنی .
    تابع GetPurchases استفاده نشده چون این صرفا یک مثال ساده بوده . شما می تونید اینجا یک مثال کامل تر رو ببینید (توی مستندات هم لینکش هست ) : https://github.com/IranUnityGameDevelopers/CafeBazarIabPluginUnity/blob/master/Assets/Scripts/StoreEventHandler.cs
    (“StoreHandler.Instance.GetPurchaseBySKU(“gold ، این تابع رو شما نباید استفاده کنید ، این مخصوص فعالیت های درون پلاگین هستش .
    برای بررسی اینکه فلان خرید انجام شده یا نه شما باید بعد از اینکه Store Initialize شد تابع GetPurchases رو صدا کنی و منتظر بمونی که تمام ProcessPurchase ها تموم بشه . برای هر خرید یکبار تابع ProcessPurchase صدا می شه .
    همچنین می تونید به مستندات کافه بازار برای پلاگین پرداخت درون برنامه ای توی اندروید نگاه کنید چون پلاگین من تا حد زیادی طبق همون کار می کنه و فرایند خرید و بررسی خرید ها طبق همون انجام میشه .

  • سلام . من از پلاگین شما استفاده کردم ، خیلی خوبه 🙂 ! همه چی درسته ولی وقتی کافه بازار توی گوشی نصب نیست بازی کرش میکنه و میپره بیرون !
    چطوری درست کنم این مشکل رو ؟
    توی Event Handler نوشتم که یه پیغام چاپ کنه اما کلاً اجرا نمیشه بازی که بخواد چیزی چاپ کنه :((

    • سلام ، لطف دارین
      من اینو قبلا تست کرده بودم باید یکی از اون ارور های پایین Event Handler صدا بشه . اگه بازم نیاز به آپدیت داشت چشم درستش می کنم . ممنون که اطلاع دادید .

  • ممنون از آموزش فقط من اول شو متوجه نشدم که قبل از واردپکیج پرداخت درون برنامه ای باید بازی رو آپلود کنیم تو بازار یا بعد از این که همه ی اقدامات آموزش دوم شما رو انجام دادیم ؟ ممنون

    • بعد از اینکه همه اقدامات رو انجام دادید باید آپلود کنید ، در حقیقت نکته ای که هست اینه که تا شما بازی ای که قابلیت پرداخت درون برنامه ای داره روی پنل کافه بازارتون آپلود نکنید نمی تونید محصولی برای اون تعریف کنید . برای همین یا باید قبل از اینکه بازی رو آپلود کنید محصولاتتون رو توی برنامه ی خودتون به صورت ضمنی قرار بدید بعد روی بازار آپلود و محصولاتتون رو توی پنل کافه بازار تعریف کنید یا اینکه اول فقط قابلیت پرداخت رو به برنامه اضافه کنید (Permission پرداخت درون برنامه ای) و بازی رو آپلود کنید بعدش محصولاتتون رو توی پنل کافه بازارتون تعریف کنید و اون ها رو در بازی تون هم قرار بدید و دوباره روی بازار آپلود کنید.

      • ممنون بابت راهنماییتون فقط این جمله شما رو نفهمیدم :
        “برای همین یا باید قبل از اینکه بازی رو آپلود کنید محصولاتتون رو توی برنامه ی خودتون به صورت ضمنی قرار بدید ”
        برای مثال در بازی ما میخواییم یک مرحله رو پولی کنیم. برای ورود به اون مرحله باید مبلغ پرداخت بشه .

        • منظورم این بود که باید این محصول رو به برنامه تون اضافه کنید ، (علت اینکه گفتم ضمنی این بود که این محصول هنوز عملا در کافه بازار ثبت نشده)
          در مورد شما مثلا یک محصول FullVersion باید به بازیتون اضافه بشه .

  • سلامی دوباره من همه این کارهارو انجام دادم میخواستم آپلود کنم بازار تست کنم بعد از آپلود این پیغام رو میده
    بسته نباید با کلید دیباگ امضا (Sign) شده باشد
    مشکل از چی میتونه باشه؟ ممنون

  • سلام خسته نباشید
    دوتا سوال داشتم
    این پلاگین در ورژن های مختلف اندروید تست شده و کار میکنه ؟ مثل اندروید 5
    و ایا این پلاگین قابل هک شدن هست یانه ؟ مخصوصا با لاکی پچر و …
    دم شما گرم موفق باشید .

    • سلام ، خیلی ممنون
      خیر به صورت جدی تست نشده ، مسئولیت تست اون بر عهده خودتون هستش.
      دوستان امتحان کردن دیدن که با لاکی پچر هک نمیشه ، ولی خوب این راه حل مقابله با لاکی پچر نیست . برای مقابله با اون باید خرید رو Verify کنید که کافه بازار API اون رو در اختیار شما قرار داده .

  • آقای سجودی واقعا ممنون از راهنماییتون. همه چی حل شد.
    فقط وقتی داخل بازی رو محصول کیلیک میکنم . stop working میشه محصول رو هم از داخل پنجره کافه بازار داخل یونیتی ادد کردم هم از پنل کافه بازار. موقع خرید محصول این کد اجرا میشه:
    StoreHandler.Instance.Consume(balll1);

  • سلام
    تمام مراحل را انجام دادم ولی 100 تا سکه اضافه نشد.
    به نظرتون مشکل کجاست؟
    برنامه هنوز در بازار تایید نشده
    خرید انجام میشود ولی سکه اضافه نمیشود
    ممنون میشوم پاسخ دهید

  • سلام
    اگر بازار نصب نباشه از برنامه خارج میشه
    راهی هست که از برنامه خارج نشه و به کاربر پیام بدیم که بازار رو نصب کنه؟
    با تشکر

    • سلام
      وقتی بازار نصب نباشه باید event های زیر یکیشون یا هر دوتاشون صدا بشن :
      OnProblemSettingUpIAB
      OnUnknownError
      اگه این اتفاق نمی افته به من خبر بدید تا درستش کنم .

  • با عرض سلام خسته نباشید ،
    من پلاگین رو روی ورژن های مختلفی از اندروید و دستگاه های مختلف تست کردم ، نمیدونم چرا روی اندروید 5 و 6 اصلا کار نمیکنه ، اگه کسی مشکل رو حل کرده لطفا راهنمایی کنه ، ورژن SDK کامل هم استفاده میکنیم .
    ممنون

  • سلام
    ممنون از لطفتون برای توضیحات
    اجرتون با خدا که باعث رشد بازی سازان تازه کاری مثل ما میشید
    فقط یه چیزی
    این پلاگین رو نسخه های قبلی کار میکنه؟تو نظرات اول خوندم که گفتین خود بازار پلاگین مشابه داره که میشه باهاش پرداخت های درون برنامه ای ساخت.لینک اموزشی چیزی دارین که بشه طبق اون جلو رفت و اجرا کرد؟

  • سلام ممنون بابت پلاگین
    پروژه مثال رو که باز می کنم مشکلی نیست ولی وقتی توی پروژه خودم یا یه پروژه جدید که با یونیتی خودم درست کردم کد هارو مینویسم به StartStore گیر میده و ارور cs0117 برای استور میده که تویه این namespace نیست
    مشکل از چی میتونه باشه؟
    یونیتی هم ورژن 5.3.4f1 هستش

    • شرمنده هی پیام میدم چون پیام خطا ها فقط تو مونو بود نه تو خود یونیتی اسمبلی سی شارپ رو از مونو رو دوباره ریبلد کردم بعد build دوباره تو storehandlertests به کد های زیر مجموعه این توابع اخطار میده مونو هم ورژن 5.9.6 هستش
      TestOnError – TestGetPurchasesFinished – TestConsumeFinished -TestGetItemBySKU

      • سلام ، با عرض پوزش من درست متوجه نشدم یعنی چی “پیام خطا ها فقط تو مونو بود نه تو خود یونیتی” ؟
        کافه بازار روی گوشی نصب هست؟

        • نمیدونم تو مونو این مشکل وجود داره که نمیشه استور رو استارت کرد به احتمال زیاد مشکل از خود مونو باشه چون تو یونیتی خطایی دیده نمیشه
          منظورم این بود که mono به استارت استور گیر میده که تو namespace ای که اسمش cafebazar.. هستش گیر میده که این خط(استارت استور) کد تو این namespace نیست اما یونیتی خطایی نمیده و اجرا میشه به احتمال زیاد مشکل از مونو هستش
          خروجی فعلا نگرفتم وقتی گرفتم تست می کنم ببینم بدون مشکل اجرا میشه یا نه میام پیام میزارم
          ممنون از توجهتون

          • خروجی رو نگرفتم الان تو یونیتی این خطا اومد
            Assets/buyhandler.cs(9,31): error CS1061: Type `CafeBazarIab.StoreHandler’ does not contain a definition for `startstore’ and no extension method `startstore’ of type `CafeBazarIab.StoreHandler’ could be found (are you missing a using directive or an assembly reference?)
            بالای کد using CafeBazarIab; رو اضافه کردم و که به این خط خطا داد
            StoreHandler.Instance.startstore();

  • سلام آقای سجودی. خیلی ممنون از کار فوق العاده تون. پلاگین خیلی خوب بود و همه چی هم واضح بود.
    فقط من یه مشکل کوچیک دارم که با بقیه پلاگین ها هم داشتم. هر کالا رو وقتی میخریم، بار اول درسته و گزارش خرید میاد. ولی بار دوم هیچی نمیاد و جواب GetPurchases خالیه. هر آیتم رو فقط یه بار میشه خرید. با یه پکیج دیگه هم همین مشکل رو داشتم. شما تا حالا برخورد نکردید؟
    ممنون

    • البته اگه درست متوجه شده باشم مشکل باید از این باشه که شما خریدتون رو مصرف نمی کنید ، به همین خاطر خرید باقی می مونه ، توصیه می کنم سری اول آموزش رو یک مطالعه ای بفرمایید .
      http://nullreference.ir/?p=183

      • سلام. ممنون از جوابتون
        نه، من خرید رو مصرف میکنم. ولی به نظر میاد که درست انجام نمیشه. توی گزارش خرید هیچی نیست. ولی وقتی درخواست خرید میدم، بدون این که خرید انجام بشه، توکن برمیگردونه (مثل وقتی که خرید مصرف نشده) شما تا حالا به این مشکل برخورد نکردید؟ یا مورد مشابهی ندیدید؟

  • خیلی ممنون از اموزش عالیتون
    فقظ یک مشکل دارم من همین فایلی که شما برای دانلود گذاشتین رو تست کردم فقط یک بار میتونم خرید انجام بدم سری های بعدی اصلا به بازار متصل نمیشه ،ینی پنجره بازار باز نمیشه
    از پلاگین 1.2 هم استفاده کردم اون خرید های مصرفی رو انجام نمیده ، اینو هم از نمونه پروژه ای که خود بازار داده استفاده کردم
    لطفا راهنمایی کنید

    • خیلی ممنون، فکر کنم شما خرید هاتون رو مصرف نمی کنید، اگر مصرف نکنید چنین اتفاقی می افته.
      به آموزش اول مراجعه کنید :
      http://nullreference.ir/?p=183
      برای دیدن نمونه کد هم به این آدرس مراجعه کنید :
      https://github.com/IranUnityGameDevelopers/CafeBazarIabPluginUnity/blob/master/Assets/Scripts/StoreEventHandler.cs

      • من مجبور شدم کل کد های پلاگین رو خوندم
        اولا که خیلی تمیز کد زدین ،بعدشم متوجه شدم که مشکل از این پلاگین یا کدی که من مینویسم نیست
        سرویسی که داره به درخواست های این پلاگین جواب میده مشکل داره احتمالا
        چون بعد از خرید اول ،برای خرید های بعدی فقط میره توی OnGetPurchasesFinished ،یعنی اصلا داخل ProcessPurchase نمیاد که من بتونم چیزی رو مصرف کنم یا نکنم ، محصولات من همه مصرفی هستند، بعد از خرید اول دیگه پنجره کافه بازار هم باز نمیشه که پسورد بدم برای خرید ، بعضی مواقع توی خرید اول هم مستقیم میاد توی OnGetPurchasesFinished ، و ProcessPurchase اجرا نمیشه
        اگه اون سرویس رو هم خودتون نوشتید اگه براتون امکان داره یک نگاهی بهش بندازین
        البته تمام این چیزایی که گفتم احتمالا حاصل دانش کم من هست چون بقیه دارن بدون مشکل استفاده میکنند
        برای سومولا ورژن اندروید و اینکه bulid&run رو نزنیم مهمه ،برای پلاگین شما هم این چیزا مهمه؟
        باید برای چه نسخه ای خروجی بگیرم ؟

        • خیلی ممنون، اگه براتون ممکن هستش ورژن اندرویدتون، پلتفرمی که توش کد می زنید (ویندوز یا مک) ، امولاتور یا دستگاه یا هر اطلاعی دیگه ای که فکر می کنید به درد من می خوره رو توی کامنت مطرح کنید که من با همون شرایط تست کنم ببینم مشکل از کجاست.

  • سلام باتشکر از اموزش خوب
    ولی من مشکل دارم کد درست کار میکنه ولی خیلی دیر عمل میکنه
    یعنی رو دوتا تبلت و یک موبایل تست کردم یک باز اجرا شد و محصول رو خرید و دیگه اجرا نشد
    درصورتی محصول طلا هست و باید چندین باز خریداری بشه
    به طور کلی بگم بعد از نصب بازی وقتی رو دکمه خرید میزنید جونش بالا میاد و تازه میگه لطفا صبر کنید و صفحه خرید میاد
    بعد از خرید طلا هام اضافه میشه
    ولی دوباره میزنم هیچ کاری نمیکنه و همونطور میمونه 😐
    زمانی که اینترنت وصل نیست رو دکمه میزنم پیام خطلا وصل نبودن رو میده 😐 وقتی وصل میشه هیچی کاری نمیکنه
    مشکل از کجاست ؟
    ممنون میشم کمک کنید
    یاحق

    • سلام ، خواهش می کنم.
      در مورد دیر عمل کردن بله منم با همین مشکل برخورد کردم که داکیومنت های یونیتی رو هم مطالعه کردم ولی فکر می کنم طبق داکیومنت های یونیتی عمل کردم و باید سرعتش خوب باشه، در هر حال اگه دوستان کمک کنند می تونیم مشکلاتش رو برطرف کنیم.
      برای مشکلی که گفتید اول این موارد رو بررسی کنید :
      به آموزش اول مراجعه کنید :
      http://nullreference.ir/?p=183
      برای دیدن نمونه کد هم به این آدرس مراجعه کنید :
      https://github.com/IranUnityGameDevelopers/CafeBazarIabPluginUnity/blob/master/Assets/Scripts/StoreEventHandler.cs
      اگر جواب نداد، باید کمی صبر کنید تا ببینم مشکل از چیه و مشکل پلاگین رو برطرف کنم .
      با تشکر

  • سلام
    ممنون من تمامی آموزش های شمارو خط به خط خوندم برسی کردم
    کد درست عمل میکنه ولی فقط تابع خرید یک بار صدا زده میشه

    یاحق

  • سلام و خسته نباشید
    اقا این پلاگین عالیه فقط لطفا این مشکلشو حل کنید !
    من چند بار این پلاگین از طریق آموزش های مختلف اجرا کردم !
    اولین بار خرید سکه عالی انجام میشه و سکه اضافه میشه
    در بار دوم به صفحه پرداخت وارد میشه خرید انجام میشه ( در پنل بازار هم ثبت میشه ) ولی سکه اضافه نمیشه !
    در دفعات بعدی فقط مینویسه : لطفا صبر کنید ! و دیگه هیچ کاری نمیکنه !
    خواهشا روش کار کنید ممنون !

    و سوال دیگه ای که داشتم در روش دیگر پرداخت درون برنامه ( روش سوملا ) چطور میشه payload ارسال و دریافت کرد ؟ تا پرداخت از دست نرم افزار های مخرب ایمن بشه ؟
    ایا در سوملا این کار امکان پذیره ؟
    بازم ممنون

    • سلام
      انگار مشکل اصلی همون تاخیر هست
      دفعه اول بدون مشکل کار میکنه ولی دفعه بعدی زمان زیادی میکشه تا جواب برگرده و در همین فاصله اگه دکمه پرداخت بزنیم ارتباط دچار مشکل میشه و به صفحه بازار وصل نمیشه !!

  • درود
    این پلاگین در حین خرید با حساب کافه بازاری خیلی مشکل داره
    بیشتر مواقع سکه نمیده
    من سر انجام به این نتیجه رسیدم بهترین سوملا همینی هست که اقای سجودی قبلا گزاشتن و من مقداری دستکاریش کردم بهتر شد فکر کنم نسخه 1.6 باشه(جدیداش به شدت باگ دارن)
    http://s9.picofile.com/file/8267961726/CafeBazarSoomlaBaseProject_master.rar.html

    لینک آموزش:
    http://www.mostafa3d.com/forum?func=view&catid=45&id=75355

  • دوست عزیز
    این همه کامنت نوشته شده که این پکیج مشکل داره و با پرداخت درون برنامه ای بازار کار نمیکنه
    چرا خب تو عنوان اموزش نمینویسید یا اینکه پکیج رو آپدیت نمیکنید
    خب این کار یعنی چی که یکی کلی وقت بزاره سر وعده وعید های شما و آخر سر نه آموزشتون به درد بخوره نه پکیجتون !

  • درود بر دوستان
    بالاخره فهمیدم مشکل سوملا چیه
    من از سوملای قدیمی بازار که اقای سجودی قبلا براش نمونه ساخته بود استفاده میکنم بقیش باگ دارن. این رو تستی که انجام دادم با لاکی پچر جدید هم هک نمیشه!!! روی گوشی روت هم دادم میگن هک نمیشه منم تست زدم نتونست هک کنه
    چیزی که اقای سجودی جا انداختن اینه که هربار وارد فروشگاه میسید یه StoreEventHandler جدید ایجاد میشه. و این باعث میشه هربار خرید میکینید تصاعدی کد سکه اجرا بشه
    این رو باید اصلاح کنید تو GameHandler
    handler = new StoreEventHandler();
    میشه این درستش
    void Start()
    {
    if(handler == null)
    handler = new StoreEventHandler();
    SoomlaStore.Initialize(new StoreAssets());
    }
    حالا اموزش ویدیویی کامل با پلاگین بی باگ و میفرستم الان انشاالله

  • سلام
    با توجه به مشکلات موجود در پلاگین‌های درون پرداخت و سختی کار با سوملا، ما پلاگین ساخته شده توسط خودمون رو به رایگان منتشر کردیم. میتونید در آدرس زیر به همراه آموزش مشاهده کنید.
    http://bobardo.com/blog/?p=51
    در آینده آموزش مقابله با هک پرداخت بازار هم اضافه خواهیم کرد.
    آقای سجودی عزیز ازتون درخواست میکنم در صورت صلاحدید این پلاگین رو توی سایتتون معرفی کنید. ممنون

  • سلام جناب سجودی
    شرکت ما ناشر بازی های خارجی در کافه بازار هست و در حال حاضر شرکت های خارجی با پرداخت درون برنامه ای کافه بازار در یونیتی مشکل دارن
    ممنون میشم که به ایمیل بنده پیام ارسال کنید که بتونم با شما تماس بگیرم.

  • اولا که بابت آموزشتون واقعا ممنونم
    یه سوال
    وقتی کاربر یه خرید دائمی انجام میده مثلا نسخه کامل برنامه رو میخره اگه دوباره بازی رو نصب کنه
    چجوری باید بفهمیم که قبلا خرید رو انجام داده تا اون خرید براش فعال بشه

    • خواهش می کنم امیدوارم به کارتون اومده باشه،
      نکته تو اینه که شما این خرید رو هیچ وقت نباید مصرف کنید(Consume) ، چون مصرفش نمی کنید کافه بازار یا هر مارکت دیگه ای هر بار که اطلاعات خرید کاربر رو براتون می فرسته اطلاعات خرید نسخه کامل رو هم براتون می فرسته، این طوری دیگه مهم نیست که کاربر بازی رو پاک کنه یا نکنه یا نصب جدید باشه یا هر چیز دیگه ای، اطلاعات روی سرور مارکت قرار داره.

اضافه کردن دیدگاه

شانزده − ده =