باگ های سیستم پرداخت درون برنامه ای که باید براش فکری کرد !!! اساتید نظر بدن
سلام دوستان باگی در سیستم پرداخت درون برنامه ای حداقل در کدهای من هست که اگر طرف وارد حساب بازار نشده باشه و نخاد خرید کنه موقع برگشت با زدن دکمه back برنامه کرش ولی اگر بخاد وارد حسابش بشه و خرید کنه هیچ مشکلی پیش نمیاد .
باگ دوم هم اینکه برنامه من یک کمی تغییرات میخاد که احتیاج به آپدیت داره . در آپدیت هم باید بگیم اول برنامه به صورت کامل حذف بشه بعد ورژن جدید رو نصب کنند . وقتی هم که بخان مجدد نصب کنند برنامه مسلما قفله و برای باز کردن قابلیت هاش دوباره باید اون رو بخرن ولی سیستم مالی بازار حتی برای اونهایی که یک بار برنامه رو قبلا خریدن دوباره به صورت رایگان باز نمیکنه .البته این امکان برای برنامه هایی که از ابتدا پولی باشن پیش بینی شده و شما میتونی اونها رو در لیست خریده شده ها پیدا و دوباره به صورت رایگان نصب کنی ولی همونطور که گفتم مستندات من طوری که باید حتما دوباره پرداخت بشه تا برنامه براش باز بشه . حالا عزیزان با این دو تا مشکل بزرگ چه باید کرد؟
سوال اول شما 2 حالت داره ، 1 اینکه شما ستاپ بازار رو در onCreate صفحه مین گذاشته باشید و عملیات خرید بعد از انجام متد ستاپ بازار انجام بشه ، که توی اون حالت با نوشتن کد :
@Override public void onDestroy() { super.onDestroy(); if (mHelper != null) mHelper.dispose(); mHelper = null; }
مشکلتون حل میشه .
توی حالت دوم اینه که متدستاپ بازار رو توی صفحه خرید گذاشته باشید و ستاپ هم زمان با خرید انجام بشه که احتمالش خیلی کمه چون باگ های زیادی داره ، توی اون حالت باید کاربر رو فورس کنید که تا اتمام ستاپ بازار صبر کنه و توی برنامه باید دقت کنید که فقط و فقط یکبار متد ستاپ بازار رو اجرا کنید ، اگر 2 بار اجراش کنید جوابی از لیستنر ها دریافت نمیکنید و برنامه روی لودینگتون هنگ میکنه
سوال دوم شما خیلی سادست : شما اگر توی مین برنامه ستاپ بازار :
if (isPackageInstalled() && checkOnlineState()) { //bazzar try { mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() { public void onIabSetupFinished(IabResult result) { if ( !result.isSuccess()) {} mHelper.queryInventoryAsync(mGotInventoryListener); } }); } catch (Exception e) {} }
رو به این روش انجام بدید ، یعنی اول چک بشه که اتصال به اینترنت انجام شده و بعد ببینید که بازار نصب هست یا نه ، که میشه جدا چک کرد و با یک Toast به کاربر اطلاع داد ( اگر کد هارو ندارید بگید که زیر این تاپیک کد ها رو اضافه کنم ) ...
توی این شرایط ستاپ بازار انجام میشه و بعد از 3-5 ثانیه ( میتونه 1 تا 10 ثانیه باشه با سرعت اینترنت شما ) جوابی از بازار به ما برگردونده میشه که توی لیستنر اول بازار یعنی :
IabHelper.QueryInventoryFinishedListener mGotInventoryListener =
new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result, Inventory inventory) { try { if (result.isFailure()) { return; } else { mIsPremium = inventory.hasPurchase(SKU_PREMIUM); if (mIsPremium){ (توضیحات 1) } else { (توضیحات 2) } } } catch (Exception e) {} } };
توضیحات 1 زمانی اتفاق می افته که برنامه خریداری شده باشه از قبل ، هیچ فرقی نداره که کاربر چند بار برنامه رو پاک یا نصب کنه ، اگر با یوزری که خریده با بازار لاگین باشه این تابع بعد از اون زمان گفته شده انجام میشه ، ، ، اینجا همون جاییه که شما باید UI رو به خریداری شده تغییر بدید .
توضیحات 2 : زمانی اتفاق می افته که کاربر خرید نکرده باشه ، که استفاده از این تابع پیشنهاد نمیشه به این دلیل که ممکنه کاربر خرید کرده باشه ولی به بازار لاگین نباشه ، به اینترنت متصل نباشه ، یا از همه اینا بدتر اینکه با یک یوزر دیگه لاگین کرده باشه ، که توی اینجور شرایط شما کاربر رو عادی میکنید و میگید دوباره باید برنامه رو بخره.
امیدوارم مفید بوده باشه
یک چیز دیگه یادم رفت ، اگر شما برای برنامتون Key استفاده کنید نیازی نیست برای هر آپدیت به کاربر بگید قبلی رو پاک کنه و بعدی رو نصب کنه . توضیحات کامل در فصل 18 آموزشها
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .