۱۳۹۴/۱۱/۳۰, ۰۲:۱۳ ق.ظ
(۱۳۹۴/۱۱/۲۹, ۱۰:۳۵ ق.ظ)ahmad97 نوشته:(۱۳۹۴/۱۱/۲۹, ۰۴:۰۷ ق.ظ)sinabelle نوشته: یه خدا بیامرزی نبود این پرداخت درون برنامه ای بازارو آموزش بده بوخودا کمرم شکست کاریش نکردم!!!
خدایی راست میگی کمر منم شکسته نتونستم کاری بکنم
توی پروژه کارهای زیر رو انجام بده
- یک پوشه (directory) جدید با نام ‘aidl’ زیر ‘src/main/’ درست کن
- یک package جدید با نام ‘com.android.vending.billing‘ در ‘src/main/aidl‘ بساز
- فایل ‘IInAppBillingService.aidl’ را از اینجا دانلود کن و داخل پکیجی که ساختی کپی کن
بعدش به برنامه ات دسترسی زیر رو بده
کد پیاچپی:
<uses-permission android:name="com.farsitel.bazaar.permission.PAY_THROUGH_BAZAAR"/>
بعد پکیج رو از اینجا دانلود کنید کنید و توی پروژه کپی کن
حالا توی اکتیویتی که میخوای برنامه رو بفروش بزاری با button رو بزنه قبل از تابع onCreate کدهای زیر رو بنویس
کد پیاچپی:
// Debug tag, for logging
// Debug tag, for logging
static final String TAG = "Esfandune.ir";
// SKUs for our products: the premium upgrade (non-consumable)
static final String SKU_PREMIUM = "EsfanduneCoin";
// 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;
کد پیاچپی:
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){
MasrafSeke(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();
MasrafSeke(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);
}
});
کد پیاچپی:
@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() {
//از سرویس در زمان اتمام عمر activity قطع شوید
super.onDestroy();
if (mHelper != null) mHelper.dispose();
mHelper = null;
}
private void MasrafSeke(Purchase kala){
// برای اینکه کاربر فقط یکبار بتواند از کالای فروشی استفاده کند
// باید بعد از خرید آن کالا را مصرف کنیم
// در غیر اینصورت کاربر با یکبار خرید محصول می تواند چندبار از آن استفاده کند
mHelper.consumeAsync(kala, 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());
}
});
}
حالا یک button قرار میدیم و خاصیت کلیکشو فعال میکنیم تا با زدن روی اون عملیات پرداخت صورت بگیرد
کد پیاچپی:
public void onClick(View view){
mHelper.launchPurchaseFlow(this, SKU_PREMIUM, RC_REQUEST, mPurchaseFinishedListener, "payload-string");
}
در مرحله آخر باید یک خروجی از برنامه تون بگیرید و آن رو توی بازار قرار بدید. انتشار برنامه نزنید. در پنل پرداخت بازار بخش محصولات/خدمات محصول جدید با شناسه کالایی مشخص ایجاد کنید چون برنامه برای تست قیمت رو صفر بذارید و نوع برنامه رو فروشی بذارید. بقیه فیلدهاروهم پرکنید و در قسمت برنامه فروشی اسم برنامه تون رو وارد کنید.
موفق باشید
منبع
ErfanMahigir