no-img
سامنتا

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


سامنتا
دانلودهای ویژه
اطلاعیه های سایت

ادامه مطلب

آموزش پرداخت درون برنامه ای بازار Android Studio
zip
شهریور ۱۹, ۱۳۹۵
دانلود آموزش های فارسی رایگان در کانال سامنتا

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


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

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

لینک گیت هاب پروژه 

بعد از باز کردن پروژه ی بالا در سایت گیت هاب طبق تصویر زیر فایل zip شده ی پروژه را دریافت کنید 

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

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

 

سپس Android Studio را باز کنید و یک پروژه ی جدید بسازید .

بعد از باز شدن اندروید استودیو ، نوع نمایش پروژه را از Android به Project تغییر دهید تا پوشه بندی واقعی پروژه ی خودتان را مشاهده کنید 

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

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

 

حال پوشه ی app/src/main را پیدا کنید و یک دایرکتوری جدید بنام aidl درون این پوشه درست کنید

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

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

درون این پوشه یک پکیج جدید بسازید و نام آنرا com.android.vending.billing  قرار دهید .

به پروژه ی دانلود شده بروید و پوشه ی TrivialDrive-master/src/com/android/vending/billing را پیدا کنید یک فایل به نام IInAppBillingService.aidl درون آن هست و آنرا کپی کنید و داخل پکیجی که ساختیم قرار دهید 

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

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

 

برنامه را یکبار بیلد کنید 

فایل AndroidManifest.xml را باز کنید و مجوز زیر را به آن اضافه کنید (مجوز پرداخت از طریق بازار )

<uses-permission android:name="com.farsitel.bazaar.permission.PAY_THROUGH_BAZAAR"/>

خب حالا ساختار پوشه بندی خودتون رو به حالت Android برگردونید 

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

یک پوشه به نام java هست روی آن راست کلیک کنید و New>Package را بزنید تا پکیج جدیدی ایجاد شود . نام پکیج را com.example.android.trivialdrivesample.util قرار دهید. 

به پوشه ی پروژه ی دانلود شده از گیت بروید و تمام محتویات درون TrivialDrive-master\src\com\example\android\trivialdrivesample\util را به درون این پکیج کپی کنید 

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

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

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

یک دکمه ی جدید به نام محصول جدید هم اضافه شده است که با کلیک کردن بر روی آن میتوانید محصولات درون برنامه ی خود را تعریف کنید و قیمت و نام و توضیحات آنها را اینجا تعیین کنید مثلا سکه ی درون برنامه 

یک محصول طبق تصویر ایجاد کنید و حتما قیمت آنرا صفر بگذارید که بتوانیم برنامه را تست کنیم 

توجه : انتخاب نام شناسه کالا مهم هست . اتصال کالای موجود در بازار با کالای درون برنامه ی ما توسط این شناسه میباشد.

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

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

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

 

قبل از متد OnCreate() کدهای زیر را جهت تعریف متغیرها اضافه کنید

 // Debug tag, for logging // Debug tag, for logging static final String TAG = "Samenta.ir"; // SKUs for our products: the premium upgrade (non-consumable) static final String SKU_PREMIUM = "500coin"; // Does the user have the premium upgrade? boolean mIsPremium = false; // (arbitrary) request code for the purchase flow static final int RC_REQUEST = 1372; // The helper object IabHelper mHelper; IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener; IabHelper.QueryInventoryFinishedListener mGotInventoryListener; 

 

مورد مهم که باید در مورد کدهای بالا بدانید متغیر SKU_PREMIUM هست . این متغیر همان شناسه ی محصول هست که در بازار تعریف کردید اگر خاطرتان باشد ما در این آموزش آنرا ۵۰۰coin درون بازار تعریف کردیم اینجا هم دقیقا همان نام را کپی میکنیم 

متغیر mIsPremium  برای نشان دادن محصول اشتراکی یا مصرفی هست . اگر مقدارش true باشد محصول ما محصول اشتراکی هست ولی اگر false باشد محصول ما مصرفی هست مثل سکه ، امتیاز ، خون و ….

درون متد OnCreate کدهای زیر را مینویسیم : 

 String base64EncodedPublicKey = ""; mHelper = new IabHelper(this, base64EncodedPublicKey); mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() { public void onQueryInventoryFinished(IabResult result, Inventory inventory) { Log.d(TAG, "Query inventory finished."); if (result.isFailure()) { Log.d(TAG, "Failed to query inventory: " + result); return; } else { Log.d(TAG, "Query inventory was successful."); // does the user have the premium upgrade? mIsPremium = inventory.hasPurchase(SKU_PREMIUM); if (mIsPremium){ Coin_using(inventory.getPurchase(SKU_PREMIUM)); } // update UI accordingly Log.d(TAG, "User is " + (mIsPremium ? "PREMIUM" : "NOT PREMIUM")); } Log.d(TAG, "Initial inventory query finished; enabling main UI."); } }; mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() { public void onIabPurchaseFinished(IabResult result, Purchase purchase) { if (result.isFailure()) { Log.d(TAG, "Error purchasing: " + result); return; } else if (purchase.getSku().equals(SKU_PREMIUM)) { // give user access to premium content and update the UI Toast.makeText(MainActivity.this,"خرید موفق",Toast.LENGTH_SHORT).show(); Coin_using(purchase); } } }; Log.d(TAG, "Starting setup."); mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() { public void onIabSetupFinished(IabResult result) { Log.d(TAG, "Setup finished."); if (!result.isSuccess()) { // Oh noes, there was a problem. Log.d(TAG, "Problem setting up In-app Billing: " + result); } // Hooray, IAB is fully set up! mHelper.queryInventoryAsync(mGotInventoryListener); } });

توجه کنید که در کدهای بالا متغیری به نام base64EncodedPublicKey هست که خالی هست . این متغیر همان کلید RSA  برنامه ی ما هست که در بازار تولید شد. به بازار رفته و آنرا رشته را درون مقدار این متغیر کپی کنید 

کدهای زیر را نیز درون متد OnCreate باید وارد کنید : 

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Log.d(TAG, "onActivityResult(" + requestCode + "," + resultCode + "," + data); // Pass on the activity result to the helper for handling if (!mHelper.handleActivityResult(requestCode, resultCode, data)) { super.onActivityResult(requestCode, resultCode, data); } else { Log.d(TAG, "onActivityResult handled by IABUtil."); } } @Override public void onDestroy() { super.onDestroy(); if (mHelper != null) mHelper.dispose(); mHelper = null; } private void Coin_using(Purchase Coin){ mHelper.consumeAsync(Coin, new IabHelper.OnConsumeFinishedListener() { @Override public void onConsumeFinished(Purchase purchase, IabResult result) { if (result.isSuccess()) Toast.makeText(MainActivity.this,"امتیار مصرف شد",Toast.LENGTH_SHORT).show(); Log.d(TAG, "Natije Masraf : "+result.getMessage()+result.getResponse()); } }); }

متد Coin_using در mPurchaseFinishedListener و بعد از اطمینان از خرید موفق if (purchase.getSku().equals(SKU_PREMIUM)) صدا زده می شود

تقریبا کار پرداخت درون برنامه ای  تمام شد !

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

 mHelper.launchPurchaseFlow(this, SKU_PREMIUM, RC_REQUEST, mPurchaseFinishedListener, "payload-string");

 

اگر برنامه ی شما خطا میدهد ممکن هست دلیل خطا موارد زیر باشد

روی دستگاهی که برنامه را تست میکنید کافه بازار نصب نیست

مجوز پرداخت درون برنامه ای بازار را به فایل Manifest نداده اید 

کلید RSA را کپی نکرده اید 

 



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

تیم سامنتا 72 نوشته در سامنتا دارد . مشاهده تمام نوشته های

دیدگاه ها


5 پاسخ به “آموزش پرداخت درون برنامه ای بازار Android Studio”

  1. علیرضا* گفت:

    ممنون از آموزش … جسارتا برای پرداخت غیر مصرفی چه تغییری باید در کد ها داد

  2. علی گفت:

    "متغیر mIsPremium  برای نشان دادن محصول اشتراکی یا مصرفی هست . اگر مقدارش true باشد محصول ما محصول اشتراکی هست ولی اگر false باشد محصول ما مصرفی هست مثل سکه ، امتیاز ، خون و …."

    این جمله رو اصلاح کنید.متغییر mIsPremium  برای انشان دادن این است که محصول مورد نظر خریداری شده است یا نه

    ولی شما به اشتباه چیز دیگری نوشته اید که باعث اشکالاتی در فهم این مطلب میشود

  3. سیما گفت:

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

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *