PDA

View Full Version : پرداخت درون برنامه ای



صفحه : [1] 2

unit001
دوشنبه 04 آذر 1392, 10:14 صبح
سلام دوستان
کسی هست که در مورد پرداخت درون برنامه ای منو راهنمایی کنه؟
از آموزش های بازار زیاد سر در نیاوردم.

ممنون


با تشکر از کاربر عزیز hamed_hossani (http://barnamenevis.org/member.php?133368-hamed_hossani) که این فیلم ها رو در اختیار گذاشتن:تشویق:


پرداخت درون برنامه ای - معرفی (http://www.aparat.com/v/luWcm)


پرداخت درون برنامه ای - برنامه قابل ارتقا - قسمت 1 از 3 (http://www.aparat.com/v/CAjoW)


پرداخت درون برنامه ای - برنامه قابل ارتقا - قسمت 2 از 3 (http://www.aparat.com/v/gzlOj)


پرداخت درون برنامه ای - برنامه قابل ارتقا - قسمت 3 از 3 (http://www.aparat.com/v/WARhB)

hamedjj
دوشنبه 04 آذر 1392, 10:53 صبح
از طریق برنامه trial driver میتونی درست کنی
من برا تمرین یک پروژه پرداخت درون برنامه ای ساختم

لینک:
http://uplod.ir/u9549c6n970b/billing.zip.htm

farhadfery
دوشنبه 04 آذر 1392, 14:05 عصر
پرداخت درون برنامه ای چیه؟

rubiks.kde
دوشنبه 04 آذر 1392, 15:31 عصر
پرداخت درون برنامه ای چیه؟

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

البته فک کنم کندو هم داره.

unit001
دوشنبه 04 آذر 1392, 17:49 عصر
خیلی ممنون. مشکلم حل شد

mohsen22
سه شنبه 05 آذر 1392, 00:17 صبح
»مثال رو من نتونستم اجرا کتم ... موضوع خیلی جالبه ممکنه بیشتر توصیح بدید ؟

hamedjj
سه شنبه 05 آذر 1392, 00:36 صبح
چرا اجرا نشد
برا دوستمون که کار کرد

rubiks.kde
سه شنبه 05 آذر 1392, 00:41 صبح
»مثال رو من نتونستم اجرا کتم ... موضوع خیلی جالبه ممکنه بیشتر توصیح بدید ؟

پرداخت درون برنامه‌ای بازار
پرداخت درون برنامه‌ای یکی از سرویس‌های بازار است که فروش محتوای دیجیتال از درون برنامه‌ها را ممکن می‌کند. شما می‌توانید از این سرویس برای فروش محتوای مختلف مانند محتوای قابل دانلود مثل موسیقی، تصاویر و محتوای غیر قابل دانلود مثل افزایش مرحله یا خرید سکه در بازی‌ها استفاده کنید.

وقتی از پرداخت درون برنامه‌ای بازار برای فروش محتوا استفاده می‌کنید، کلیهٔ مراحل پرداخت توسط بازار انجام می‌شود. بنابراین نیازی نیست برنامهٔ شما به صورت مستقیم پردازش مالی پرداخت‌ها را انجام دهد. بازار دقیقاً از همان روش خرید برنامه‌های غیر رایگان برای پرداخت‌های درون برنامه‌ای استفاده می‌کند. بنابراین روند خرید برای کاربران بسیار آشنا خواهد بود.

هر برنامه‌ای که در بازار منتشر ‌می‌کنید می‌تواند از پرداخت درون برنامه‌ای استفاده کند. به غیر از داشتن حساب توسعه‌دهنده که برای انتشار برنامه‌ها ساخته‌اید، نیازی به ساختن هیچ حساب دیگری نیست. برای کمک به پیاده‌سازی پرداخت درون برنامه‌ای از مستندات پرداخت درون برنامه‌ای که آماده شده است، استفاده نمایید.

mohsen22
سه شنبه 05 آذر 1392, 01:17 صبح
باز هم عالی و کامل جواب دادید... مممنون از وقت که گذاشتید.. راستی شما کاندید مدیریت اندروید نشدید ؟

ماشالله خیلی برازنده این سمت هستید ها .... (ما کاندید می خواهیم یالله ......)

mohsen22
سه شنبه 05 آذر 1392, 01:22 صبح
چرا اجرا نشد
برا دوستمون که کار کرد


هم سورس باز نشد... هم فایل نصبی !!! شما نسخه تست شده رو دارید ؟ مرسی

hamedjj
سه شنبه 05 آذر 1392, 02:25 صبح
یه پروژه بساز با همون نام پکیج برنامه
بعد فایل ها را توش کپی کن درست میشه

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

برنامه به این صورته که در صفحه اول یک دکمه قرار دارد که با تپ روی آن وارد صفحه ی پرداخت بازار می شوید و پس از پرداخت وجه و تایید سیستم برنامه شما را با intent به صفحه دوم هدایت می کند.
(با تپ برروی دکمه و پرداخت وجه ، کلاس update ui اجرا میشه که همام کد intent به صفحه ی دوم توش قرار دارد و با هر بار وارد شدن در برنامه و با تپ روی دکمه اون کلاس اجرا می شود)

بعد از این هر بار وارد برنامه شدید با تپ روی دکمه وارد صفحه دوم شوید
البته بگم که وقتی وارد برنامه شدید باید به چند ثانیه به اینترنت وصل باشید تا بازار شما را به طور خودکار تایید کند
این برنامه به صورت ارتقا کاربران به حساب کاربری ویژه است.
برای امنیت برنامه یک رشته string در برنامه قرار داده شده است که با وارد شدن به برنامه اون به طور خودکار از طرف بازار بررسی می شود و در صورت ویژه بودن حساب شما قسمت های قفل شده برنامه (همان دکمه ای که به صفحه دوم میره) باز می شود.

همه چیز درسایت بازار توضیح داده شده است.

hamedjj
سه شنبه 05 آذر 1392, 02:37 صبح
package com.hamed.billing;

import com.hamed.billing.util.IabHelper;
import com.hamed.billing.util.IabResult;
import com.hamed.billing.util.Inventory;
import com.hamed.billing.util.Purchase;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;

public class Main extends Activity {
Button btn1;
// Debug tag, for logging
static final String TAG = "testbilling";

// SKUs for our products: the premium upgrade (non-consumable)
static final String SKU_PREMIUM = "hamed.test";

// Does the user have the premium upgrade?
boolean mIsPremium = false;

// (arbitrary) request code for the purchase flow
static final int RC_REQUEST = 10001;

// The helper object
IabHelper mHelper;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn1 = (Button) findViewById(R.id.button1);
String base64EncodedPublicKey = "MIHNMA0GCSqGSIb3DQEBAQUAA4G7ADCBtwKBrwDHPaX/2b58zYjvRygXQvYgvIWjCT7A0FirRkmt5Nm3FxnjsOnCu/6Yer9AoOFd+EYU+uORahbZXge39DzyMKwiatY0UcVycaI8bU+g JAAvwL+/BxSifJ+jrHRbWCg9Nd6dnIYSMuGyoFM/3cdX+6XSYh0R58adtGlWBVBUc0/GmGPMFCkx1JndO2wBZrzMc2eO+OTqoFY+EyLospMP3GHlGgI6w 1JvtAip7P+hD10CAwEAAQ==";
// You can find it in your Bazaar console, in the Dealers section.
// It is recommended to add more security than just pasting it in your source code;
mHelper = new IabHelper(this, base64EncodedPublicKey);

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) ;
}
});
}

IabHelper.QueryInventoryFinishedListener 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);

// update UI accordingly

Log.d(TAG, "User is " + (mIsPremium ? "PREMIUM" : "NOT PREMIUM"));
}

updateUi();
setWaitScreen(false);
Log.d(TAG, "Initial inventory query finished; enabling main UI.");
}
};


public void onUpgradeAppButtonClicked(View arg0) {
Log.d(TAG, "Upgrade button clicked; launching purchase flow for upgrade.");
setWaitScreen(true);

/* TODO: for security, generate your payload here for verification. See the comments on
* verifyDeveloperPayload() for more info. Since this is a SAMPLE, we just use
* an empty string, but on a production app you should carefully generate this. */
String payload = "qwertyuiop";

mHelper.launchPurchaseFlow(this, SKU_PREMIUM, RC_REQUEST,
mPurchaseFinishedListener, "qwertyuiop");
}


@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.");
}

}

boolean verifyDeveloperPayload(Purchase p) {
String payload = p.getDeveloperPayload();


return true;
}

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
Log.d(TAG, "Purchase finished: " + result + ", purchase: " + purchase);
if (result.isFailure()) {
Log.d(TAG, "Error purchasing: " + result);
setWaitScreen(false);
return;
}
if (!verifyDeveloperPayload(purchase)) {
complain("Error purchasing. Authenticity verification failed.");
setWaitScreen(false);
return;
}

Log.d(TAG, "Purchase successful.");

if (purchase.getSku().equals(SKU_PREMIUM)) {
Log.d(TAG, "Purchase is premium upgrade. Congratulating user.");
alert("Thank you for upgrading to premium!");
mIsPremium = true;
updateUi();
setWaitScreen(false);
}
}
};

@Override
public void onDestroy() {
super.onDestroy();

Log.d(TAG, "Destroying helper.");
if (mHelper != null) mHelper.dispose();
mHelper = null;
}

public void updateUi() {
// update the car color to reflect premium status or lack thereof
btn1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
Intent intent = new Intent(Main.this, Page2.class);
startActivity(intent);

}
});

}

// Enables or disables the "please wait" screen.
void setWaitScreen(boolean set) {
findViewById(R.id.screen_wait).setVisibility(set ? View.VISIBLE : View.GONE);
}

void complain(String message) {
Log.e(TAG, "**** testbilling Error: " + message);
alert("Error: " + message);
}

void alert(String message) {
AlertDialog.Builder bld = new AlertDialog.Builder(this);
bld.setMessage(message);
bld.setNeutralButton("OK", null);
Log.d(TAG, "Showing alert dialog: " + message);
bld.create().show();
}
}

mohsen22
یک شنبه 15 دی 1392, 22:27 عصر
بالا......... ...

amirarcs
دوشنبه 16 دی 1392, 11:28 صبح
سلام. ببخشید من نتونستم پروژه شما رو اجرا کنم.
برنامه force close میده و داخل log مینویسه:

http://www.xum.ir/images/2014/01/06/1.png

من می خوام یک اکتیویتی داشته باشم که داخلش سه تا دکمه باشه و هر کدوم واسه خرید یه چیز مخصوص باشه ، لطفا راهنماییم کنید.

hamedjj
دوشنبه 16 دی 1392, 11:48 صبح
بیا اینم پروژه صحیح و سالم :

http://uplod.ir/z5buybs9zzog/billing.zip.htm

برای جزئیات بیشتر و همچنین استفاده از کالاهای مصرفی برنامه TriviaDrive را دانلود کن
از این آموزش ها هم استفاده کن :

http://pardakht.cafebazaar.ir/doc/quickstart/?l=fa

amirarcs
دوشنبه 16 دی 1392, 12:10 عصر
باز هم فورس کلوز داد

amirarcs
دوشنبه 16 دی 1392, 12:12 عصر
این هم لینک عکسش
http://www.xum.ir/images/2014/01/06/CapturevOTlM.png

من نمی دونم چرا پرداخت درون برنامه ای این همه واسه من گنگ هست. الان یک هفته هست دارم این را کار میکنم اما جواب نمی گیرم.

دائاش وقت داری با team viwer به من ریموت شی پروژه من را یه چک کنی. خواهش میکنم

hamedjj
دوشنبه 16 دی 1392, 12:34 عصر
همه چیز بر میگرده به این دو قسمت :

public void onUpgradeAppButtonClicked(View arg0) {
Log.d(TAG, "Upgrade button clicked; launching purchase flow for upgrade.");
setWaitScreen(true);

/* TODO: for security, generate your payload here for verification. See the comments on
* verifyDeveloperPayload() for more info. Since this is a SAMPLE, we just use
* an empty string, but on a production app you should carefully generate this. */
String payload = "qwertyuiop";

mHelper.launchPurchaseFlow(this, SKU_PREMIUM, RC_REQUEST,
mPurchaseFinishedListener, "qwertyuiop");
}

کد بالا وقتی بر روی دکمه کلیک کرد premium بودن او را جستجو می کند
اگر premium بود میره به قسمت پایین برنامه updateUi

public void updateUi() {

if (mIsPremium) {
// update the car color to reflect premium status or lack thereof
btn1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
Intent intent = new Intent(Main.this, Page2.class);
startActivity(intent);

}
});
}
}

و برنامه آپدیت میشه
البته تو او کدی که قرار دادم قسمت updateui اشتباه داشت که if قرار نداده بودم و فقط یک بار باز میکرد
احتمالا بعدا کاملا درست می کنم

amirarcs
دوشنبه 16 دی 1392, 12:44 عصر
داداش واقعا ممنون هستم که انقدر سریع جواب من میدی، ولی باز هم فورس کلوز داد. اگر بتونی کمکم کنی که امروز توی این مبحث به نتیجه ای برسم واقعا ممنونت میشم. چون خیلی وقته درگیرش هستم

باز هم عکس بزارم واسه log?

uzer68
سه شنبه 17 دی 1392, 09:42 صبح
آقا من با همه چیز این "پرداخت درون برنامه ای" مشکل دارم. من چندتا سوال دارم؟
وقتی کاربر پریمیوم میشه دیگه چه نیازی هست برنامه به اینترنت وصل بشه و پریمیوم بودن کاربر را تایید کنه؟!! (چندتا برنامه هم توی بازار بود تست کردم، بعد از اینکه پریمیوم میشی دیگه نیازی نیست برنامه به اینترنت متصل بشه)
و سوال بزرگتر اینکه چرا من نمیتونم پیادش کنم؟؟؟؟!!!!! خیلی دارم اذیت میشم سر این قضیه...

hamedjj
سه شنبه 17 دی 1392, 11:55 صبح
اینترنت برای اینه که اگر این برنامه بر روی دستگاه دیگری نصب بشه هر بار با اون رشته ی string یه چک بشه ببینه او حساب پول پرداخت کرده یا نه.
اگر این قابلیت نباشه من میتونم با حسابم پریمیوم بشم و با حساب خودم بر روی چند گوشی نصب کنم و آنها با بار اول که به اینترنت وصل میشن تایید را میگیرند و از برنامه استفاده می کنند.

البته اگه نمیخوای دوباره به اینترنت وصل بشه میتونی در کلاس UpdateUi از sharedprefences استفاده کنی.

اگر می خوای به اینترنت وصل بشه می تونی مانند برنامه های دیگر همان اول یه loading بزاری تا چک کنه و بعد وارد برنامه بشه
من این برنامه را خیلی ساده نوشتم
چک کردن دسترسی به اینترنت هم بزاری خیلی خوبه

این برنامه که من ساختم در هر بار ورود به اینترنت نیاز دارد (البته loading اولیه ندارد) و پس از شناسایی حساب رنگ button کریسمس (کامل) سبز می شود.
چک کردن دسترسی به اینترنت هم دارد. ((البته برنامه زیاد حرفه ای نیست ))
http://cafebazaar.ir/app/com.hamed.christmas/?l=fa


منظورت برنامه را نمیتونی اجرا کنی یا تو کدها مشکل داری؟

uzer68
شنبه 21 دی 1392, 07:41 صبح
داداش این سمپل که گذاشتی مشکل داره، میتونی درستش کنی و بعد بذاریش؟
کسی میتونه تو زمینه پرداخت درون برنامه ای کمک کنه؟

dimitri2
یک شنبه 29 دی 1392, 16:36 عصر
کسی میدونه برای انجین یونیتی چه جوری میشه از پرداخت درون برنامه ی بازار استفاده کرد ؟؟؟

mohsen22
یک شنبه 29 دی 1392, 17:54 عصر
بله واسه منم خطا داره و اجرا نمیشه... کاش میشد این بحث رو به نتیجه بروسونیم با کمک هم

leon7394
یک شنبه 29 دی 1392, 20:24 عصر
من هم توی اجرای این کد نمونه مشکل داشتم
فکر کنم دلیلش این بود که برنامه با اندروید 2.3 کامپایل شده و من این نسخه رو ندارم روی اکلیپس:لبخندساده:

mohsen22
یک شنبه 29 دی 1392, 20:30 عصر
یه پروژه بساز با همون نام پکیج برنامه
بعد فایل ها را توش کپی کن درست میشه


اینو تست نکردید؟

halig313
چهارشنبه 09 بهمن 1392, 15:08 عصر
سلام کسی برنامشو به این روش نفروخته بیاد با هم یاد بده؟

اگر یه برنامه با تعداد layoutهای بالا داشته باشیم و بخوایم فقط یه بار پول بگیری باید چیکار کرد؟

نوشته های بازار رو خوندم ولی در سطح من نبود نتونستم چیزی بفهمم

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

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

hamedjj
چهارشنبه 09 بهمن 1392, 21:21 عصر
من برای صفحه توسعه دهنده بازار در github یه پیام فرستادم که بچه نمیتونن از برنامه استفاده کنند و برنامه ارور میده
اونم گفت که روش پیاده سازی پرداخت درون برنامه ای خیلی سخته و دارند یه کاری میکنند که آسون بشه

اینم لینک کامنت ها:
https://github.com/congenialmobile/TrivialDrive/commit/395517c8d56f1afba4fb9dbe708a266ce773b0e3

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

moh_sen201
چهارشنبه 09 بهمن 1392, 23:14 عصر
خوب یه سوال؟ چجوری صفحه ی خرید بازار باز میشه؟

hamedjj
پنج شنبه 10 بهمن 1392, 00:50 صبح
از طریق برنامه بازار
باید نرم افزار بازار رو گوشی نصب باشه

moh_sen201
پنج شنبه 10 بهمن 1392, 09:09 صبح
نرم افزارش نصبه
من طرف وبشش همه کار رو کردم

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

http://upir.ir/files/118358f092a71.jpg

moh_sen201
پنج شنبه 10 بهمن 1392, 09:44 صبح
این چیه ؟ payload و به چه دردی میخوره؟

moh_sen201
پنج شنبه 10 بهمن 1392, 09:58 صبح
نرم افزارش نصبه
من طرف وبشش همه کار رو کردم

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

http://upir.ir/files/118358f092a71.jpg


خوب یه سوال؟ چجوری صفحه ی خرید بازار باز میشه؟


این چیه ؟ payload و به چه دردی میخوره؟

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

hamedjj
پنج شنبه 10 بهمن 1392, 11:58 صبح
پیاده سازی api را می خوای آموزش بدی یا فقط قسمت راهنمای شروع سریع؟؟
چون برنامه trivialdrive آسونه و راحت سیستم پرداخت بازار را میشه از روش پیاده سازی کرد اما در قسمت پیاده سازی api یه کم مشکله

moh_sen201
پنج شنبه 10 بهمن 1392, 14:02 عصر
پیاده سازی api را می خوای آموزش بدی یا فقط قسمت راهنمای شروع سریع؟؟
چون برنامه trivialdrive آسونه و راحت سیستم پرداخت بازار را میشه از روش پیاده سازی کرد اما در قسمت پیاده سازی api یه کم مشکله


پیاده سازی api رو فیلم میزارم
چیز سختی نبود

gwtw2013
پنج شنبه 10 بهمن 1392, 16:03 عصر
سلام
من تازه کارم لطفا به این سوال جواب بدین
اول که تو بازار نوشته برنامه رو آپلود کنید بعد میگه کدها رو تو برنامه کپی کنین. خب اینطوری چطوری این تغییرات تو برنامه اعمال میشه؟

hamedjj
پنج شنبه 10 بهمن 1392, 20:14 عصر
میگه اول پروژه را بساز و اجازه پرداخت درون برنامه ای را در مانیفست برنامه قرار بده.
بعد از اینکه آپلود کردی در پنل کاربری خودتان قسمت ورود به پرداخت درون برنامه ای باز میشه میتوانید از آنجا محصولات خودتان را ثبت کنید و کد محصولات را در برنامه قرار دهید.
تیم بازار به من گفتند که دنبال راه حلی برای راحتی در پیاده سازی پرداخت درون برنامه ای هستند
اینجوری یکم سخته

unit001
شنبه 19 بهمن 1392, 10:49 صبح
حالا یه سوال دیگه. چجوری کالایی که از طریق پرداخت درون برنامه ای خرید شده رو مصرف کنم؟ یعنی مثلا الان خرید کردم, دفعه ی بعد بتونم دوباره همون رو خرید کنم؟

با تشکر

hamedjj
شنبه 19 بهمن 1392, 11:06 صبح
در مورد کالای مصرفی هنوز پروژه ای انجام ندادم که طرز کار باهاش را بدونم
فعلا فقط premium شدن را می تونم پیاده سازی کنم
اگر شما توانستید خری های قابل مصرف را پیاده سازی کنید حتما توضیحاتی در این تاپیک قرار دهید

اینجا هم یه سری توضیحات مبنی بر خرید های قابل مصرف گذاشته که حتما مطالعه کرده اید.
http://pardakht.cafebazaar.ir/doc/api/?l=fa

harani
شنبه 19 بهمن 1392, 12:13 عصر
دوستان من نمی خواهم از ویژگی درون پرداختی بازار استفاده کنم من چگونه میتوانم این ویژگی رو برای اتصال مسقیم به بانکها انجام بدم ؟

hamedjj
شنبه 19 بهمن 1392, 18:09 عصر
الکی تلاش نکن
بازار تو قوانین خودش گفته سیستم پرداخت دیگری را قبول نداره
اگر از سیستم بازار استفاده نکنی برنامت را منتشر نمیکنه.

harani
شنبه 19 بهمن 1392, 19:21 عصر
اصلا من به بازار کاری ندارم من میخواهم به درگاه بانک وصل شم مگه فقط بازار مارکت اندروید

unit001
سه شنبه 22 بهمن 1392, 07:58 صبح
کسی تا حالا مصرف پرداخت درون برنامه رو کار نکرده؟
توی بازار تابعش رو نوشته ولی من که استفاده می کنم برنامه خطا می ده. اگه کسی استفاده کرده لطفا راهنمایی کنه.

ممنون

harani
سه شنبه 22 بهمن 1392, 09:36 صبح
شما فکر کنم توایمولاتور دارین تست میکنید درون پرداختی با ایمولاتور مشکل داره برا من که اینطوری بود تو دستگاه که تست کردم OK شد

harani
سه شنبه 22 بهمن 1392, 09:43 صبح
هیچ راهی نسیت که بشه به درگاه بانک وصل شد ؟

javaneemroz
یک شنبه 27 بهمن 1392, 09:35 صبح
بخدا خیلی گنگ و سخته از کیه دارم رو چند تا مثال کار میکنم باز هم به مشکل بر میخورم اصن کار نمیکنه:(

omid_student
یک شنبه 11 اسفند 1392, 14:38 عصر
سلام
اقا کسی نیست به ما کمک کنه
من پروژه درون پرداخت رو که سالمه از همین پست دانلود کردم و توی اکلیپس با رفع خطاهای خود اکلیپس رفع کردم ولی unfourtanly close میده
قبلا تونسته بودم ولی الان نمیشه
وجدانا کمک کنید

harani
یک شنبه 11 اسفند 1392, 15:23 عصر
سلام
اقا کسی نیست به ما کمک کنه
من پروژه درون پرداخت رو که سالمه از همین پست دانلود کردم و توی اکلیپس با رفع خطاهای خود اکلیپس رفع کردم ولی unfourtanly close میده
قبلا تونسته بودم ولی الان نمیشه
وجدانا کمک کنید

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

dc-master
یک شنبه 11 اسفند 1392, 17:42 عصر
از طریق برنامه trial driver میتونی درست کنی
من برا تمرین یک پروژه پرداخت درون برنامه ای ساختم

لینک:
http://uplod.ir/u9549c6n970b/billing.zip.htm
سلام
الان مشکلی که من دارم اون برنامه ای هست که باید در بازار قرار بدیم(همون که از طریق پرداخت درون برنامه ای باید خریداری بشه) مثل بنزین در برنامه trial driver
این برنامه دقیقا باید چی باشه؟
چی توش باشه؟
بعد از خرید باید دانلود بشه؟
میشه این برنامه ای که شما (hamedjj) توی بازار قرار دادی رو هم اینجا بذارید ببینیم چیه؟منظورم همون برنامه تستی هست که توسط پرداخت درون برنامه در برنامه billing (http://uplod.ir/u9549c6n970b/billing.zip.htm) خریداری میشه
ممنون

hamedjj
یک شنبه 11 اسفند 1392, 18:18 عصر
خیلی سوالت نامفهومه فقط یه توضیح مختصر میدم امیدوارم به جوابت برسی

اول که پروژه را ایجاد کردی این مجوز را در manifest برنامه قرار میدی و در بازار آپلود میکنی تا درگاه بازار برای شما باز بشه بعد در قسمت برنامه ها سمت راست (قسمت پرداخت درون برنامه ای) ورود میشه و میتونی بری توش و محصولات خودتو ثبت کنی و کد دسترسی به آنها را دریافت کنی

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

فعلا خیلی سرم شلوغه اما حتما سعی میکنم یه برنامه جامع برای پرداخت درون برنامه ای درست کنم و در نمونه برنامه های کوچک اما مفید قرار بدم.

مجوز دسترسی :
<uses-permission android:name="com.farsitel.bazaar.permission.PAY_THROUGH_BAZAAR"></uses-permission>

dc-master
یک شنبه 11 اسفند 1392, 18:42 عصر
خیلی سوالت نامفهومه فقط یه توضیح مختصر میدم امیدوارم به جوابت برسی

اول که پروژه را ایجاد کردی این مجوز را در manifest برنامه قرار میدی و در بازار آپلود میکنی تا درگاه بازار برای شما باز بشه بعد در قسمت برنامه ها سمت راست (قسمت پرداخت درون برنامه ای) ورود میشه و میتونی بری توش و محصولات خودتو ثبت کنی و کد دسترسی به آنها را دریافت کنی



میتونی بری توش و محصولات خودتو ثبت کنی

ممنون از جوابتون
دقیقا منظور از محصولات چیه؟
منم پروژم به صورت کاربر ویژه هست
باید چه محصولی رو قرار بدم (مشکل من اینه)

----------------------------------------------------------------------------------------------------------------
چیزی که من فهمیدم:

1-برنامه ای که باید در بازار قرار بدیم ولی درخواست انتشارشو ندیم،همون برنامه اصلیه که فقط یک مجوز بهش اضافه شد
2-محصولات فقط یک شناسه است و چیز قابل دانلودی نیست.

آیا درست فهمیدم؟

hamedjj
یک شنبه 11 اسفند 1392, 20:11 عصر
کاملا درسته
منظور از این نیست که یعنی توضیحات و قیمت اون کاری که قراره انجام بشه
مثلا قراره با پرداخت 100 تومان شما به کاربر ویژه تبدیل بشوید
خوب وارد پرداخت درون برنامه ای در پنل بازار خود میشوید و نام (مثلا premium) و قیمت و توضیحات مربوطه را وارد میکنید که بازار وقتی کاربر را به صفحه پرداخت خود ببره بتونه قیمت و توضیحات لازم را به کاربر بده
این میشه محصول
اینم یه عکس از محصول برنامه billing

http://www.axgig.com/images/44275199197259810510.png

zhonos
چهارشنبه 14 اسفند 1392, 23:25 عصر
از طریق برنامه بازار
باید نرم افزار بازار رو گوشی نصب باشه

آقا من پروژه TrivialDrive و پروژه Billing شما رو تست کردم اما هر چی خط به خط مرور میکردم، بازم خطا میداد. تا اینکه یادم افتاد روی شبیه سازم اصلا بازار نصب نیستش.
خلاصه سوتی بزرگی بود، گفتم اینجا بگم که دوستان دیگه هم در جریان باشن.

gwtw2013
پنج شنبه 15 اسفند 1392, 00:18 صبح
ویدیوی آموزشی برای پرداخت درون برنامه ای هست؟ در حد مبتدی

hamedjj
پنج شنبه 15 اسفند 1392, 00:24 صبح
فارسی نه
انگلیسی تو youtube سرچ کن ، شاید!!

gwtw2013
پنج شنبه 15 اسفند 1392, 00:27 صبح
سرچ کردم قبلا چیزی پیدا نکردم

poorman
پنج شنبه 15 اسفند 1392, 01:06 صبح
سلام عزیزان
روی ایمولاتور میشه برنامه بازار رو نصب کرد آیا ؟؟؟ که بشه پرداخت درون برنامه ای رو تست کنیم ؟

rubiks.kde
پنج شنبه 15 اسفند 1392, 01:07 صبح
سلام عزیزان
روی ایمولاتور میشه برنامه بازار رو نصب کرد آیا ؟؟؟ که بشه پرداخت درون برنامه ای رو تست کنیم ؟

اره میشه نصب کرد

hamedjj
پنج شنبه 15 اسفند 1392, 09:42 صبح
سرچ کردم قبلا چیزی پیدا نکردم

اینم ویدئو آموزش پرداخت درون برنامه ای :
http://www.youtube.com/watch?v=-h2ESH71hAI

اینم پروژه ویدئو بالا:
http://upir.ir/files92be/c4e07b7fb9871.zip

.................................................. ........................................

آموزش پرداخت درون برنامه ای برای انجین پونیتی:
http://www.youtube.com/watch?v=ieNFQtCdNEQ

.................................................. .......................................

آموزش پرداخت درون برنامه ای با سرویس MoVend:
http://www.youtube.com/watch?v=0CnPUsq3P-I

javaneemroz
پنج شنبه 15 اسفند 1392, 17:38 عصر
آقا وقتی من اون فایل های مورد نیاز که باید توی پوشه پروژه کپی بشن رو کپی میکنم هزارتا ارور دارم .فقط تونستم ارورهای مربوط به نام پکیج رو فیکس کنم.ارورهائی که فایل درون پرداخت میده رو هرچی فیکس میکنم دوباره برمیگرده حالت اول

hamedjj
پنج شنبه 15 اسفند 1392, 18:26 عصر
این مقاله را بخون شاید درست شد
درباره ارور پرداخت درون برنامه ایه
http://www.wakeupsun.com/tutorial/solution-for-the-in-app-billing-tutorial-from-google-android/

من که هیچ اروری دریافت نمیکنم و نمیدونم چطور برطرفشون کنم

poorman
پنج شنبه 15 اسفند 1392, 19:53 عصر
اره میشه نصب کرد

ممنون، خب جالا چطوری نصب کنم !!!؟؟؟

rubiks.kde
پنج شنبه 15 اسفند 1392, 20:05 عصر
ممنون، خب جالا چطوری نصب کنم !!!؟؟؟

با شبیه ساز برو بازار و بعد دانلود و بعد هم نصب:لبخند:

mf2009
چهارشنبه 21 اسفند 1392, 17:20 عصر
برای منم اینجوری بود درستش کردم
برو روی پروژت راست کلیک کن و Properties رو بزن
بعد برو تو قسمت Java Compiler
و تیک Enable Project Specific Settings را بردار
و ok کن برای من که درست شد .
درست شد خبر کن

mf2009
چهارشنبه 21 اسفند 1392, 19:49 عصر
یه سوال تو پروژه حمید بعد از آپدیت ui اونو چه جوری ذخیره کنیم که دفعه های بعد هم دیگه صفحه خرید برنامه رو نشون نده و همون Intent خودومون رو بده (شرمنده تازه کارم )
این جا رو میگم

public void updateUi() {
// update the car color to reflect premium status or lack thereof
btn1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
Intent intent = new Intent(Main.this, Page2.class);
startActivity(intent);

}
});


}

hamedjj
چهارشنبه 21 اسفند 1392, 20:13 عصر
تو برنامه حامد برای امنیت دیتا ذخیره نمیشه و هر بار چک میشه
برای ذخیره دیتا باید از sharedprefences باید استفاده کنی
آخر کلاس mainactivity برنامه trivial driver را نگاه بنداز
void saveData() {


/*
* WARNING: on a real application, we recommend you save data in a secure way to
* prevent tampering. For simplicity in this sample, we simply store the data using a
* SharedPreferences.

*/


SharedPreferences.Editor spe = getPreferences(MODE_PRIVATE).edit();
spe.putInt("tank", mTank);
spe.commit();
Log.d(TAG, "Saved data: tank = " + String.valueOf(mTank));
}


void loadData() {
SharedPreferences sp = getPreferences(MODE_PRIVATE);
mTank = sp.getInt("tank", 2);
Log.d(TAG, "Loaded data: tank = " + String.valueOf(mTank));
}

mohsen.hex
جمعه 23 اسفند 1392, 09:38 صبح
ممنون از گپ گفتتون من نیم ساعته راهش انداختم:لبخندساده:
ی سوال
این چیه
static final int RC_REQUEST = 10001;

hamedjj
جمعه 23 اسفند 1392, 19:23 عصر
کد درخواستی برای پیگیری خرید

از کدوم روش استفاده کردی؟
هر بار برنامه premium بودن کاربر را چک میکنه یا با SharedPreferences ذخیره میکنه؟

mohsen.hex
جمعه 23 اسفند 1392, 23:30 عصر
کد درخواستی برای پیگیری خرید

از کدوم روش استفاده کردی؟
هر بار برنامه premium بودن کاربر را چک میکنه یا با SharedPreferences ذخیره میکنه؟

یعنی چی؟ ب چ دردی میخوره؟ تغیریش بدم چی میشه؟ رنجش چی هست؟؟
دومی اخه اگه کاربر اینترنت نداشته باشه برنامه از کار میوفته و کاربر ناراضی و ... عمه ...

hamedjj
شنبه 24 اسفند 1392, 00:27 صبح
هیچی ... چیزه خاصی نیست
یه کده برای پیگیری سیستم خرید شما
مربرط میشه به سیستم درون خرید
تغییرش بده ... هر چی دوست داری بزار

Saeid4110
شنبه 24 اسفند 1392, 08:45 صبح
هیچی ... چیزه خاصی نیست
یه کده برای پیگیری سیستم خرید شما
مربرط میشه به سیستم درون خرید
تغییرش بده ... هر چی دوست داری بزار

آقا حامد هنوز وقت نشده سورس پرداخت درون برنامه ای را درست کنین؟ما خیلی احتباج داریم؟

hamedjj
شنبه 24 اسفند 1392, 11:02 صبح
هنوز نه
چند روز دیگه شروع میکنم به ساختن
سعی میکنم تمام جزئیات پرداخت درون برنامه ای (کالای مصرفی و ...) تا درون برنامه قرار بدم
ممکنه مثلا کالای مصرفی را نتونم پیاده سازی کنم یا زمان ببره
اول برنامه اولیه را میزارم تو سایت بعد کم کم کاملش میکنم تا بچه ها زیاد معطل نشن
فعلا

Saeid4110
شنبه 24 اسفند 1392, 11:19 صبح
هنوز نه
چند روز دیگه شروع میکنم به ساختن
سعی میکنم تمام جزئیات پرداخت درون برنامه ای (کالای مصرفی و ...) تا درون برنامه قرار بدم
ممکنه مثلا کالای مصرفی را نتونم پیاده سازی کنم یا زمان ببره
اول برنامه اولیه را میزارم تو سایت بعد کم کم کاملش میکنم تا بچه ها زیاد معطل نشن
فعلا
سلام آقا حامد من پروژه trivia بازار را گرفتم و رو گوشیم نصب کردم اما فورس کلوز میده علتش نمیدونین چیه؟

hamedjj
شنبه 24 اسفند 1392, 19:43 عصر
چون نام محصولات در اون پروژه قرار داده نشده

public class MainActivity extends Activity {
// Debug tag, for logging
static final String TAG = "TrivialDrive";

// Does the user have the premium upgrade?
boolean mIsPremium = false;

// Does the user have an active subscription to the infinite gas plan?
boolean mSubscribedToInfiniteGas = false;

// SKUs for our products: the premium upgrade (non-consumable) and gas (consumable)
static final String SKU_PREMIUM = "premium";
static final String SKU_GAS = "gas";

// SKU for our subscription (infinite gas)
static final String SKU_INFINITE_GAS = "infinite_gas";


برو تو پوشه SDK
sdk\extras\google\play_billing
اونجا پروژه اصلی trivial هست (البته با مارکت گوگل)

Saeid4110
شنبه 24 اسفند 1392, 19:59 عصر
چون نام محصولات در اون پروژه قرار داده نشده

public class MainActivity extends Activity {
// Debug tag, for logging
static final String TAG = "TrivialDrive";

// Does the user have the premium upgrade?
boolean mIsPremium = false;

// Does the user have an active subscription to the infinite gas plan?
boolean mSubscribedToInfiniteGas = false;

// SKUs for our products: the premium upgrade (non-consumable) and gas (consumable)
static final String SKU_PREMIUM = "premium";
static final String SKU_GAS = "gas";

// SKU for our subscription (infinite gas)
static final String SKU_INFINITE_GAS = "infinite_gas";


برو تو پوشه SDK
sdk\extras\google\play_billing
اونجا پروژه اصلی trivial هست (البته با مارکت گوگل)
ما منتظریم دیگه ان شاءالله تا عید نوروز درون برنامه ای را آماده می کنید.

raha_jon
یک شنبه 25 اسفند 1392, 16:18 عصر
سلام لطفا برای پرداخت درون برنامه ای یک فیلم فارسی درست کنید ممنون.
برای کافه بازار یا هم برای کندو

ممنون

hamedjj
شنبه 02 فروردین 1393, 05:40 صبح
سلام بچه ها
بهتون قول داده بودم پروژه پرداخت درون برنامه ای را بسازم
این پروژه ساخته شد و در نمونه برنامه های کوچک اما مفید قرار داده شد

لینک (http://barnamenevis.org/showthread.php?401729-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88-%D9%85%D9%81%D9%8A%D8%AF-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF&p=1993351&viewfull=1#post1993351)

حتما توضیحاتی که در github قرار دادم را بخوانید و اگر سوالی داشتید میتونید تو همین تاپیک ازم بپرسید
محصولات قابل مصرف را هنوز به این پروژه اضافه نکردم که هر موقع وقت داشتم حتما این کار را میکنم
اما فعلا سرم شلوغه
ممنون از صبر و تحملی که به خرج دادید

kinglove0111
یک شنبه 17 فروردین 1393, 16:50 عصر
سلام
برای من خطا میده
برنامه اجرا میشه اما وقتی بر روی دکمه ( OnlinePremium ) کلیک میکنم خطا میده.

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

اینم خطاش:


FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hamedjj.bazaarinappbilling/com.hamedjj.bazaarinappbilling.OnlinePremium}: java.lang.IllegalStateException: IAB helper is not set up. Can't perform operation: queryInventory
at android.app.ActivityThread.performLaunchActivity(A ctivityThread.java:2180)
at android.app.ActivityThread.handleLaunchActivity(Ac tivityThread.java:2230)
at android.app.ActivityThread.access$600(ActivityThre ad.java:141)
at android.app.ActivityThread$H.handleMessage(Activit yThread.java:1234)
at android.os.Handler.dispatchMessage(Handler.java:99 )
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.jav a:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:560)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalStateException: IAB helper is not set up. Can't perform operation: queryInventory
at com.hamedjj.bazaarinappbilling.util.IabHelper.chec kSetupDone(IabHelper.java:756)
at com.hamedjj.bazaarinappbilling.util.IabHelper.quer yInventoryAsync(IabHelper.java:589)
at com.hamedjj.bazaarinappbilling.util.IabHelper.quer yInventoryAsync(IabHelper.java:616)
at com.hamedjj.bazaarinappbilling.OnlinePremium$3.onI abSetupFinished(OnlinePremium.java:71)
at com.hamedjj.bazaarinappbilling.util.IabHelper.star tSetup(IabHelper.java:267)
at com.hamedjj.bazaarinappbilling.OnlinePremium.onCre ate(OnlinePremium.java:62)
at android.app.Activity.performCreate(Activity.java:5 104)
at android.app.Instrumentation.callActivityOnCreate(I nstrumentation.java:1080)
at android.app.ActivityThread.performLaunchActivity(A ctivityThread.java:2144)
... 11 more


لطفا بگید مشکل از کجاست
با تشکر

hamedjj
یک شنبه 17 فروردین 1393, 17:57 عصر
همین الان دوباره برنامه را امتحان کردم و هیچ مشکلی نداشت
آخرین نسخه برنامه بازار رو امولاتور شما نصب هست؟

kinglove0111
یک شنبه 17 فروردین 1393, 22:32 عصر
سلام ممنون که جواب دادید.
برنامه کافه بازار را نصب کردم مشکل برطرف شد.

اما چندتا سوال برام پیش آمد که اگر میشه پاسخ دهید. با تشکر

1. اگر کاربر بر روی دکمه ( online Premium ) کلیک کند و برنامه کافه بازار بر روی گوشیش نصب نباشد برنامی ما خطا میده و می پیره بیرون و این یک اشکال بزرگ است.

2. اگر کاربر بر روی دکمه ( save premium ) کلیک کند و برای بار اول برنامه کافه بازار بر روی گوشیش نصب باشد و برنامه را خریداری کند و برای دفعات بعد که به برنامه مراجعه میکند دیگر نیازی به وصل شده به برنامه کافه بازار ندارد چون در خود برنامه اطلاعات را ذخیره کرده است. اشکال اینجاست که اگر کاربر برنامه کافه بازار را پاک کرده باشد برنامه ما هم دیگه اجرا نمیشه و خطا میده و می پره بیرون.

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

برنامه اینطوری بشه خیلی عالی میشه نه :لبخند:

kinglove0111
یک شنبه 17 فروردین 1393, 22:34 عصر
میشه کمی درباره کلید عمومی برنامه ( base64EncodedPublicKey ) توضیح بدبد.
باید کلید عمومی برنامه را از کجا دریافت کنیم؟
با تشکر.

hamedjj
یک شنبه 17 فروردین 1393, 23:33 عصر
سلام ممنون که جواب دادید.
برنامه کافه بازار را نصب کردم مشکل برطرف شد.

اما چندتا سوال برام پیش آمد که اگر میشه پاسخ دهید. با تشکر

1. اگر کاربر بر روی دکمه ( online Premium ) کلیک کند و برنامه کافه بازار بر روی گوشیش نصب نباشد برنامی ما خطا میده و می پیره بیرون و این یک اشکال بزرگ است.

2. اگر کاربر بر روی دکمه ( save premium ) کلیک کند و برای بار اول برنامه کافه بازار بر روی گوشیش نصب باشد و برنامه را خریداری کند و برای دفعات بعد که به برنامه مراجعه میکند دیگر نیازی به وصل شده به برنامه کافه بازار ندارد چون در خود برنامه اطلاعات را ذخیره کرده است. اشکال اینجاست که اگر کاربر برنامه کافه بازار را پاک کرده باشد برنامه ما هم دیگه اجرا نمیشه و خطا میده و می پره بیرون.

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

برنامه اینطوری بشه خیلی عالی میشه نه :لبخند:

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

ولی در مورد اول میشه از سرویس گزارش خطا (اگه اسمشو درست گفته باشم) که قبلا تو همین تالار معرفی شده بود استفاده کرد که به جای پیغام معمولی force close پیغام شما نمایش داده شود و برنامه بسته شود. (( اگر تونستی این کار را رو پرداخت درون برنامه ای پیاده سازی کنی اینجا هم آموزش بزار تا بقیه هم استفاده کنند ))

درباره مورد دوم فکر نمیدونم برنامه بازار نصب نباشه برنامه carsh میشه یا نه ، اما اگر همین طوره که میگی ناشی از اینه که با اینکه اطلاعات کاربر ذخیره شده بعد از هر بار ورود دوباره به سیستم وصل میشه که با استفاده از فراخوانی متد onDestroy در شرط sharedprefences که ارتباط با بازار را قطع میکنه فکر نمیکنم دیگر برنامه crash بشه.

kinglove0111
یک شنبه 17 فروردین 1393, 23:34 عصر
در مطلب قبلی گفتم اگر برنامه کافه بازار بر روی گوشی نصب نباشه برنامه ما که پرداخت درون برنامه ای داره خطا میده و میپره بیرون.

من یک ترای کش گذاشتم مشکل حل شد:تشویق:




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!

try {

mHelper.queryInventoryAsync(mGotInventoryListener) ;

} catch (Exception e){
Toast.makeText(getApplicationContext(), getString(R.string.nobazar), Toast.LENGTH_LONG).show();
dialog.hide();
}
}




آیا این روش بهترین روش هست یا نه؟

hamedjj
یک شنبه 17 فروردین 1393, 23:37 عصر
در مطلب قبلی گفتم اگر برنامه کافه بازار بر روی گوشی نصب نباشه برنامه ما که پرداخت درون برنامه ای داره خطا میده و میپره بیرون.

من یک ترای کش گذاشتم مشکل حل شد:تشویق:




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!

try {

mHelper.queryInventoryAsync(mGotInventoryListener) ;

} catch (Exception e){
Toast.makeText(getApplicationContext(), getString(R.string.nobazar), Toast.LENGTH_LONG).show();
dialog.hide();
}
}




آیا این روش بهترین روش هست یا نه؟

اگه جواب داده چرا که نه .... مرسی

kinglove0111
یک شنبه 17 فروردین 1393, 23:38 عصر
آره جواب داد. تازه خودم چندین بار چک کردم:قهقهه:

hamedjj
یک شنبه 17 فروردین 1393, 23:40 عصر
میشه کمی درباره کلید عمومی برنامه ( base64EncodedPublicKey ) توضیح بدبد.
باید کلید عمومی برنامه را از کجا دریافت کنیم؟
با تشکر.

مستندات بازار را بخون

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



http://pardakht.cafebazaar.ir/static/doc/apps-fa.png

kinglove0111
دوشنبه 18 فروردین 1393, 13:26 عصر
سلام به همگی
در مطلب قبلی یک کد دادم که اگر برنامه کافه بازار بر روی گوشی نصب نباشه دیگه خطا نده اما متوجه شدم یک ایراد دیگه هم داره
ایرادش اینکه اگر برنامه کافه بازار را نصب کنید باز هم برنامه شما مشکل داره و اجرا نمیشه

کد را به این شکل تغییر دهید همه چیز درست میشه:



try {
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) ;
}
});

} catch (Exception e){
Toast.makeText(getApplicationContext(), "برنامه کافه بازار بر روی تلفن همرای شما نصب نیست", Toast.LENGTH_LONG).show();
dialog.hide();
}

sahandsamaneh
جمعه 05 اردیبهشت 1393, 11:16 صبح
دوستان ممنون از توضیحاتی که دادین ولی من قرار نیست برنامه ام را در کافه بازار بفروشم آیا راهی وجود دارد که خودم مستقیم به بانک متصل بشم ؟
چون برای استفاده از کد های کافه بازار لازمه که حتما برنامه در کافه بازار قرار داده بشه

لطفا راهنمایی کنید کارم خیلی گیره این مساله هست
ممنونم

hamedjj
جمعه 05 اردیبهشت 1393, 18:08 عصر
قبلا در یکی از تاپیک ها درباره این موضوع بحث شده خواهشا این سوالات را در این تاپیک قرار ندهید تا تاپیک از موضوع اصلی منحرف نشود ممنون

daniel021
چهارشنبه 17 اردیبهشت 1393, 12:25 عصر
چرا ارور میده ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟
قضیش چیه؟؟؟

اونجاهایی که قرمز کردم!!!!!




public void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "onCreate()");
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
context = MainActivity.this;
if (context.getPackageManager().hasSystemFeature(Pack ageManager.FEATURE_CAMERA_FLASH)){
mTorch = (ToggleButton) findViewById(R.id.toggleButton1);
mTorch.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Log.d(TAG, "onCheckedChanged");
try{
if (cam == null){
cam = Camera.open();
}
camParams = cam.getParameters();
List<String> flashModes = camParams.getSupportedFlashModes();
if (isChecked){
if (flashModes.contains(Parameters.FLASH_MODE_TORCH)) {
camParams.setFlashMode(Parameters.FLASH_MODE_TORCH );
}else{
showDialog(MainActivity.this, FLASH_TORCH_NOT_SUPPORTED);
}
} else {
camParams.setFlashMode(Parameters.FLASH_MODE_OFF);
}
cam.setParameters(camParams);
cam.startPreview();
}catch (Exception e) {
Log.d(TAG, "Caught " + e);
Toast.makeText(MainActivity.this,
"Camera/Torch failure: " + e, Toast.LENGTH_SHORT).show();
e.printStackTrace();
if (cam != null) {
cam.stopPreview();
cam.release();
}
}
}
});
surfaceView = (SurfaceView) this.findViewById(R.id.hiddenSurfaceView);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_P USH_BUFFERS);
surfaceHolder.addCallback(this);
} else {
showDialog(MainActivity.this, FLASH_NOT_SUPPORTED);
}
}

badname
پنج شنبه 18 اردیبهشت 1393, 00:06 صبح
سلام دوستان خسته نباشید
با کد هایی که بازار و دوستان برای پرداخت گذاشتن به مشکل خوردم .... با کلی جستجو یه سری کد دیگه پیدا کردم .... خیلی خوب کار میکنه فقط یه مشکلی داره... مشکلش اینه پس از پرداخت تغییراتی که خواستیمو اعمال میکنه ولی برنامه رو یبار بازو بسته میکنم دوباره میره رو حالت قبل از پرداخت... دوستان یه نگاه کنید ببینید میتونید مشکلشو حل کنید ؟
کد ها :



package com.pay.pay;

import com.pay.pay.util.IabHelper;
import com.pay.pay.util.IabResult;
import com.pay.pay.util.Inventory;
import com.pay.pay.util.Purchase;
import com.pay.pay.util.Security;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import android.text.TextUtils;
import android.util.Log;

import org.json.JSONException;
import org.json.JSONObject;

import com.pay.pay.BuildConfig;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;
import java.security.Signature;
import java.security.SignatureException;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.X509EncodedKeySpec;




public class MainActivity extends Activity {

private Button clickButton;
private Button buyButton;
private static final String TAG = "com.pay.pay";
IabHelper mHelper;
static final String ITEM_SKU = "1151";



@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


buyButton = (Button)findViewById(R.id.buyButton);
clickButton = (Button)findViewById(R.id.clickButton);
clickButton.setEnabled(false);

String base64EncodedPublicKey =
"MIHNMA0GCSqGSIb3DQEBAQUAA4G7ADCBtwKBrwC18T7oHr2PbZ jqN1Sg8F8DzuLg3He5uf6uJ7fJcpAdttCpVFD11nEaarWJa3Yx n/1JB3EIBYyMFfWSvUnM8ffJ7DhPOLIccE7lYyrpZjKeB9QguPGW x7VUSKPkSkww99F4GuAM2rl4Q2LCxu6uXPDf98pg4h+doTN+nk rfqYqh6Tb13X9SMfnOVurpF/83pHWLd5C6x5g4n8RL8Bps8I2SUgEO/M95B74oVLm0CAwEAAQ==";

mHelper = new IabHelper(this, base64EncodedPublicKey);

mHelper.startSetup(new
IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result)
{
if (!result.isSuccess()) {
Log.d(TAG, "In-app Billing setup failed: " +
result);
} else {
Log.d(TAG, "In-app Billing is set up OK");
mHelper.enableDebugLogging(true, TAG);
}
}
});
}






public void buyClick(View view) {
mHelper.launchPurchaseFlow(this, ITEM_SKU, 10001,
mPurchaseFinishedListener, "mypurchasetoken");
}


public void buttonClicked (View view)
{
//clickButton.setEnabled(false);
buyButton.setEnabled(true);
}





@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data)
{
if (!mHelper.handleActivityResult(requestCode,
resultCode, data)) {
super.onActivityResult(requestCode, resultCode, data);
}
}

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener
= new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result,
Purchase purchase)
{
if (result.isFailure()) {
// Handle error
return;
}
else if (purchase.getSku().equals(ITEM_SKU)) {
consumeItem();
buyButton.setEnabled(false);
}

}
};

public void consumeItem() {
mHelper.queryInventoryAsync(mReceivedInventoryList ener);
}

IabHelper.QueryInventoryFinishedListener mReceivedInventoryListener
= new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result,
Inventory inventory) {


if (result.isFailure()) {
// Handle failure
} else {
mHelper.consumeAsync(inventory.getPurchase(ITEM_SK U),
mConsumeFinishedListener);
}
}
};

IabHelper.OnConsumeFinishedListener mConsumeFinishedListener =
new IabHelper.OnConsumeFinishedListener() {
public void onConsumeFinished(Purchase purchase,
IabResult result) {

if (result.isSuccess()) {
clickButton.setEnabled(true);


} else {
// handle error



}
}
};

@Override
public void onDestroy() {
super.onDestroy();
if (mHelper != null)
mHelper.dispose();
mHelper = null;
}

public static boolean verifyPurchase(String base64PublicKey,
String signedData, String signature) {
if (TextUtils.isEmpty(signedData) ||
TextUtils.isEmpty(base64PublicKey) ||
TextUtils.isEmpty(signature)) {
Log.e(TAG, "Purchase verification failed: missing data.");
if (BuildConfig.DEBUG) {
return true;
}
return false;
}

PublicKey key = Security.generatePublicKey(base64PublicKey);
return Security.verify(key, signedData, signature);
}










}

hamedjj
پنج شنبه 18 اردیبهشت 1393, 00:13 صبح
شما می خواهید بعد از پرداخت متد زیر که false قرار دادید انجام بشه درسته؟

clickButton.setEnabled(true);

دقیقا توضیح بده چیکار میخوای بکنی؟؟

badname
پنج شنبه 18 اردیبهشت 1393, 00:17 صبح
بله دقیقا
ولی میخوام این حالت سیو بمونه که کاربر اگه برنامه رو پاک کرد دوباره نصب کرد ، یا حداقلش بازو بسته کرد برنامه رو به مشکل نخوره دوباره پرداخت کنه .

hamedjj
پنج شنبه 18 اردیبهشت 1393, 00:25 صبح
این کد انگار یه چیزایی کم داره!!!!
وقتی دوباره وارد برنامه میشی (باید به اینترنت وصل باشی) کد بالا که گفتم اجرا میشه؟؟؟؟

hamedjj
پنج شنبه 18 اردیبهشت 1393, 00:28 صبح
تو خط 117 شما بعد از اینکه پرداخت تایید شد مقدار را false قرار دادی که!!!!

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener
= new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result,
Purchase purchase)
{
if (result.isFailure()) {
// Handle error
return;
}
else if (purchase.getSku().equals(ITEM_SKU)) {
consumeItem();
buyButton.setEnabled(false);
}

badname
پنج شنبه 18 اردیبهشت 1393, 00:30 صبح
تقریبا مشکلی نداره ، فقط Button های که False بودن پس از پرداخت true میشن . اما برنامه یبار باز و بسته میشه میره با حالت اول false میشه طرف دوباره باید پرداخت کنه
مقدار دیفالت ClickButton ام false هست میخوام پس از پرداخت که مقدارش true میشه سیو شه بمونه این حالت برای کاربر ، حدافلش برنامه finish شد یا ReInstall کرد clickButton براش true باشه همچنان

hamedjj
پنج شنبه 18 اردیبهشت 1393, 00:32 صبح
با این کدی که گذاشتی اصلا حال نکردم
متد ها را منظم نوشته

اینجا آموزش کامل همراه با پروژه قرار دادم که میتونی استفاده کنی
هم به صورت ذخیره داده ها بعد از پزداخت هم به صورت چک کردن اینترنتی پرداخت از بازار:

https://github.com/hamedjj/BazaarInAppBilling

از این کدها استفاده کنی مشکلی نداری

badname
پنج شنبه 18 اردیبهشت 1393, 00:33 صبح
خط 117 دکمه ای که برای خرید گذاشته بودمو false کردم فقط

badname
پنج شنبه 18 اردیبهشت 1393, 00:36 صبح
با کد های شما مشکل داشتم Eclipse ام نمیدونم با win 8.1 نمیسازه یا مشکل کجاست عینا کدای شما رو کپی کردم ولی اروور داشتم
راستی برنامتونو تست کردم پرداختشم انجام دادم ولی پس از Reinstall همچی پرید و پرداختو دوباره باید انجام میدادم

hamedjj
پنج شنبه 18 اردیبهشت 1393, 00:36 صبح
تقریبا مشکلی نداره ، فقط Button های که False بودن پس از پرداخت true میشن . اما برنامه یبار باز و بسته میشه میره با حالت اول false میشه طرف دوباره باید پرداخت کنه
مقدار دیفالت ClickButton ام false هست میخوام پس از پرداخت که مقدارش true میشه سیو شه بمونه این حالت برای کاربر ، حدافلش برنامه finish شد یا ReInstall کرد clickButton براش true باشه همچنان

هموشن باید از SharedPreferences استفاده کنی
تو لینک بالا نمونه پروژه با آموزش هست

badname
پنج شنبه 18 اردیبهشت 1393, 00:41 صبح
بنظرم این مشکل پریدن پرداخت باید حل شه به صورت زیر : :متفکر:
وقتی کاربر پرداختو انجام داد یه فایل با یه مقدار خاصی تو حافظه گوشیش ذخیره کنیم
بعد بریم شرط بزاریم که ببین اون فایل هست یا نه ؟
اگه بود برنامه permium باشه
اگه نبود not permium باشه و بره پرداختو انجام بده ...

hamedjj
پنج شنبه 18 اردیبهشت 1393, 01:04 صبح
خوب کاری که sharedPreferences میکنه همینه
تو پروژه آموزشی اول mIsPremium را برابر false قرار گرفت و گفتیم اگه true شد کاربر ویژه هست :

boolean mIsPremium = false;

mIsPremium = preferences.getBoolean(KEY, false);
if (mIsPremium == true) {
updateUi();
return;
}



بعد از پرداخت متد updateui که اجرا میشه مقدار false را به true تغییر میده و ذخیره میکنه که با دیگه برای ورود به برنامه هم به اینترنت نیازی نیست.

// change the mIsPremium to true
SharedPreferences.Editor newtask = preferences.edit();
newtask.putBoolean(KEY, true);
newtask.commit();

mf2009
پنج شنبه 18 اردیبهشت 1393, 09:27 صبح
سلام من تو پیاده سازی پرداخت مشکلی ندارم
فقط در قسمت آپدیت عناصر صفحه من پرداخت تو یه اکتیوتی جدا انجام میشه ولی میخام عناصر یک صفحه دیگه آپدیت بشه مثلا تو صفحه اولم 5 تا دکمه دارم که یکیش بازه و چهارتاش رو اگه کاربر کلیک کنه یک دیالوگ بشه نمایش داده میشه که میخای پرداخت کنی یا نه اگه بگه آره وارد اکتیوتی پرداخت میشه حالا بعد از پرداخت من چه جوری عناصر صفحه ام رو آپدیت کنم ؟:افسرده:

hamedjj
پنج شنبه 18 اردیبهشت 1393, 11:25 صبح
سلام من تو پیاده سازی پرداخت مشکلی ندارم
فقط در قسمت آپدیت عناصر صفحه من پرداخت تو یه اکتیوتی جدا انجام میشه ولی میخام عناصر یک صفحه دیگه آپدیت بشه مثلا تو صفحه اولم 5 تا دکمه دارم که یکیش بازه و چهارتاش رو اگه کاربر کلیک کنه یک دیالوگ بشه نمایش داده میشه که میخای پرداخت کنی یا نه اگه بگه آره وارد اکتیوتی پرداخت میشه حالا بعد از پرداخت من چه جوری عناصر صفحه ام رو آپدیت کنم ؟:افسرده:

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

mf2009
پنج شنبه 18 اردیبهشت 1393, 17:48 عصر
دقیقا امروز میخواستم این قابلیت را به پروژه آموزشی اضافه کنم.
قراره یه پست تو انجمن بزنم و ازشون دراین باره کمک بگیرم تا زودتر تمومش کنم.
فکر کنم یه چند روز زمان ببره شایدم زودتر
مشکل من فعلا حل شد پروسه پرداخت رو آوردم تو صفحه اصلی و دکمه پرداخت رو اضافه کردم و گفتم بعد از پرداخت سیوش کن و دفعه های بعد که وارد نرم افزار میشه به جای آپدیت صفحه ای که دارم مستقیما به یک صفحه طراحی شده مخصوص اعضای ویژه بره خوبیش اینه که تو کاربر ساده میتونی هر جای رو که بخای آزاد بزاری یا دسترسی ندی مثلا تو کاربر ساده تمام دکمه های صفحه اول بازه و کاربر میتونه تمام امکانات برنامه رو مشاهده کنه اینجوری بیشتر تحریک میشه که نرم افزار رو بخره :لبخند:

59soldier
جمعه 19 اردیبهشت 1393, 16:33 عصر
تشکر از راهنمایی خوبتون ...
یک سوال داشتم
در تابع onSavedUpgradeAppButtonClicked
یک خطی هست
String payload = "gdhassdflsldaslfkahsjahsjakaasa";
payload این چیه؟؟؟
از کجا باید به دستش بیاریم؟؟؟

hamedjj
جمعه 19 اردیبهشت 1393, 19:57 عصر
رشتهٔ developerPayload برای مشخص کردن هرگونه آرگومان اضافی که از بازار می‌خواهید همراه اطلاعات خرید برای شما فرستاده‌ شود، استفاده می‌شود.

توضیحات بازار:
برای درخواست خرید حتما از developer payload استفاده کنیددر API نسخه ۳ پرداخت درون برنامه‌ای شما می‌توانید همراه هر درخواست خرید یک developer payload هم به بازار ارسال کنید. این رشته می‌تواند به عنوان یک شناسهٔ منحصر به فرد از سمت شما برای این خرید در نظر گرفته شود. بازار بعد از اتمام مراحل خرید این رشته را همراه با جزئیات پرداخت به برنامهٔ شما بازمی‌گرداند.
شما باید این رشته را برای احراز هویت کاربری که درخواست خرید را داده است به بازار ارسال کنید. برای محصولات مصرف شدنی این رشته می‌تواند کاملا تصادفی ساخته شود، در حالیکه برای محصولاتی که مصرف شدنی نیستند، برای اطمینان از صحت خریده شدن محصول باید از یک رشتهٔ منحصر به فرد استفاده کنید.
وقتی‌ که پاسخ را از بازار دریافت کردید، مطمئن شوید developer payload که بازار همراه با جزئیات خرید به شما بازگردانده است، همانی است که شما برای شروع عملیات پرداخت به بازار ارسال کرده بودید. برای اطمینان از امنیت پیشنهاد می‌شود این عملیات را بر روی سرور خود انجام دهید.

59soldier
جمعه 19 اردیبهشت 1393, 20:32 عصر
الان خوب این رو چگونه تولید کنیم؟؟؟ محدودیتی دارد؟؟؟

hamedjj
جمعه 19 اردیبهشت 1393, 21:08 عصر
انگشتتو بزار رو کیبور تند تند تایپ کن

محدودیتی هم نداره

اصلا اگه خواستی هم نذار

poorman
شنبه 20 اردیبهشت 1393, 17:14 عصر
سلام

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

اگر بخوایم همچین اتفاقی نیفته چکار باید بکنیم ؟؟؟

البته راهی که به ذهن من میرسه اینه که آیدی گوشی و حساب کاربری توی سرور ذخیره بشه و بعد چک بشه

اما آیا راهی غیر از عملیات سمت سرور هست ؟؟؟

hamedjj
شنبه 20 اردیبهشت 1393, 18:40 عصر
تنها راهی که من میشناسم همونه که هربار ورود از طریق بازار چک بشه که تو پروژه آموزشی هست
بازار هم همین راه را تاکید کرده و راه دیگه ای تو مستنداتش وجود نداره

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

همون راه اولی که بازار گفته به نظر من بهترینه

poorman
شنبه 20 اردیبهشت 1393, 19:07 عصر
نه اون راه نیاز داره که هر بار کاربر آنلاین وارد برنامه بشه، این به شدت باعث نارضایتی کاربر میشه

مخصوصا توی ایران با این وضع اینترنت

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

--------------------------------

ولی حالا که یکم بیشتر فک میکنم، به این نتیجه میرسم کسی اوسکول نیست که یوزر و پسووردش رو همگانی بده به بقیه :لبخند:

نهایتش میده به 2-3 نفر از دوستاش، دیگه توی سایت که نمیذاره

اگر گذاشت، ما میریم با پسووردش وارد میشیم، پسووردش رو عوض میکنیم :شیطان:

hamedjj
یک شنبه 21 اردیبهشت 1393, 04:18 صبح
قسمت بعدی پروژه آموزشی پرداخت درون برنامه ای
در این قسمت صفحه پرداخت در یک کلاس جدا درست شده که شما میتوانید با استفاده از آن یک یا چند قسمت از برنامه را به صورت درون خرید قرار دهید.
برنامه همراه با توضیحات در صفحه github پروژه قرار گرفت:
دانلود و آموزش برنامه در Github (https://github.com/hamedjj/BazaarInAppBilling)

آموزش بعدی درباره محصولات مصرفی خواهد بود.

http://www.axgig.com/images/96745274613650808375.png http://www.axgig.com/images/37558983413893349747.png http://www.axgig.com/images/29017590167232937717.png

badname
یک شنبه 21 اردیبهشت 1393, 08:38 صبح
دوستان کسی میدونی عکس background Button هارو پس از پرداخت چجوری میشه عوض کرد ؟ فقط ثابت باشه که نپره با شروع مجدد برنامه پس از پرداخت

hamedjj
یک شنبه 21 اردیبهشت 1393, 15:43 عصر
دوستان کسی میدونی عکس background Button هارو پس از پرداخت چجوری میشه عوض کرد ؟ فقط ثابت باشه که نپره با شروع مجدد برنامه پس از پرداخت

تو همین پروژه آموزشی عکس دکمه عوض میشه دیگه..
تو قسمت premium اگه بری داده ها ذخیره میشه و عکس دکمه برای همیشه عوض میشه

if (mIsPremium) {
findViewById(R.id.onlinebtn).setBackgroundResource (R.drawable.green);
}

badname
یک شنبه 21 اردیبهشت 1393, 15:50 عصر
تو همین پروژه آموزشی عکس دکمه عوض میشه دیگه..
تو قسمت premium اگه بری داده ها ذخیره میشه و عکس دکمه برای همیشه عوض میشه

if (mIsPremium) {
findViewById(R.id.onlinebtn).setBackgroundResource (R.drawable.green);
}

مرسی حامد جان دقت نکردم فکر کردم پارامترتون Color هستش. :قلب:

poorman
یک شنبه 21 اردیبهشت 1393, 19:17 عصر
حامد جان کد فعال سازی رو علاوه بر onCreate توی onRestart هم بنویس تا لازم نباشه حتما کاربر برنامه رو دوباره اجرا کنه

hamedjj
یک شنبه 21 اردیبهشت 1393, 20:18 عصر
حامد جان کد فعال سازی رو علاوه بر onCreate توی onRestart هم بنویس تا لازم نباشه حتما کاربر برنامه رو دوباره اجرا کنه

چطور باید متد onRestart را بنویسم
تا حالا باهاش کار نکردم
اینم کد custompremium

public class CustomPremium extends Activity {

Button btn5;
Button btn4;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.custompremium);
updatebtn();
btn4 = (Button) findViewById(R.id.custombtn);
btn5 = (Button) findViewById(R.id.Activebtn);

btn4.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
startActivity(new Intent(CustomPremium.this, PurchaseApp.class));
}
});
}

public void updatebtn() {
btn5 = (Button) findViewById(R.id.Activebtn);

if (PurchaseApp.mIsPremium) {
btn5.setEnabled(true);
btn5.setBackgroundResource(R.drawable.button_norma l);
btn5.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Toast.makeText(getApplicationContext(), R.string.active, Toast.LENGTH_SHORT).show();
}
});

findViewById(R.id.custombtn).setEnabled(false);

}else {
return;
}
}
}

poorman
یک شنبه 21 اردیبهشت 1393, 22:46 عصر
حامد جان onRestart هیچ فرقی نداره با onCreate کد نوشتنش

توی اکتیویتی از منوی source گزینه override/implement methodes رو بزن، بعد onRestart رو ادد کن

onRestart بعد از اینکه کاربر از یک اکتیویتی دیگه برگشت، یا مثلا برنامه متوقف شد و دوباره برگشت به اون اکتیویتی اجرا میشه

حالا شما این متد رو که اضافه کردی، کافیه توش همون تابع updateBtn رو فراخوانی کنی

hamedjj
دوشنبه 22 اردیبهشت 1393, 22:07 عصر
با تشکر از poorman (http://barnamenevis.org/member.php?295320-poorman) جان عزیز
متد onRestart در اکتیویتی CustomPremium افزوده شد که دیگر نیازی برای خروج از برنامه بعد از تایید پرداخت نیست

badname
چهارشنبه 24 اردیبهشت 1393, 18:54 عصر
سلام دوستان خسته نباشید من یه برنامه پرداخت درون برنامه ای رو بازار گذاشتم تو بخش 100 خرید آخر خریدارو میبینم ولی تو پنل توسعه دهندگان ثبت نشده صفره ، کسی میدونه داستان چیه ؟

hamedjj
چهارشنبه 24 اردیبهشت 1393, 21:48 عصر
سلام دوستان خسته نباشید من یه برنامه پرداخت درون برنامه ای رو بازار گذاشتم تو بخش 100 خرید آخر خریدارو میبینم ولی تو پنل توسعه دهندگان ثبت نشده صفره ، کسی میدونه داستان چیه ؟

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

badname
چهارشنبه 24 اردیبهشت 1393, 22:39 عصر
حامد جان ولی صد خرید اخیر (http://pardakht.cafebazaar.ir/panel/sales/list/?l=fa) داره آپدیت میشه و همه خریدا اونجا ثبت میشه هر دقیقه .... اینطرف تو پنل توسعه دهندگان نمیاد از موقع انتشار رو صفر مونده :اشتباه:

hamedjj
چهارشنبه 24 اردیبهشت 1393, 23:43 عصر
حامد جان ولی صد خرید اخیر (http://pardakht.cafebazaar.ir/panel/sales/list/?l=fa) داره آپدیت میشه و همه خریدا اونجا ثبت میشه هر دقیقه .... اینطرف تو پنل توسعه دهندگان نمیاد از موقع انتشار رو صفر مونده :اشتباه:

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

هنوز هم که برنامه هام روزانه خرید میشه کل خرید در 24 ساعت ، فرداش در پنل خودم بروز میشه

badname
جمعه 26 اردیبهشت 1393, 00:40 صبح
بله تازه گذاشتم تعداد دانلوداش امروز اومد ولی هنوز از مبلغ های پرداخت درون برنامه ای خبری نیست فعلا رو صفره
ولی اونور مشخصه ...دیده میشه.... تو صد فروش اخیر

mf2009
جمعه 26 اردیبهشت 1393, 08:50 صبح
سلام حامد جان
من با اون ورژن آخر پرداخت درون برنامه ای که لطف کرده بودی پروژم رو پیاده سازی کردم بازار هم تاییدش کرد و تو روز اول هم 500 هزار تومن فروختش ولی فرداش به طور ناگهانی بدون هیچ توضیحی از بازار حذف شد هر چی هم ایمیل میزنم جواب نمیدن من مطمعنم هیچ تضادی با قوانین بازار نداشتش به نظرت مشکل از پرداخت ها بوده که برنامه رو به یک دفعه نابودش کردن ؟

hamedjj
جمعه 26 اردیبهشت 1393, 19:26 عصر
بله تازه گذاشتم تعداد دانلوداش امروز اومد ولی هنوز از مبلغ های پرداخت درون برنامه ای خبری نیست فعلا رو صفره
ولی اونور مشخصه ...دیده میشه.... تو صد فروش اخیر

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

hamedjj
جمعه 26 اردیبهشت 1393, 19:31 عصر
سلام حامد جان
من با اون ورژن آخر پرداخت درون برنامه ای که لطف کرده بودی پروژم رو پیاده سازی کردم بازار هم تاییدش کرد و تو روز اول هم 500 هزار تومن فروختش ولی فرداش به طور ناگهانی بدون هیچ توضیحی از بازار حذف شد هر چی هم ایمیل میزنم جواب نمیدن من مطمعنم هیچ تضادی با قوانین بازار نداشتش به نظرت مشکل از پرداخت ها بوده که برنامه رو به یک دفعه نابودش کردن ؟

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

mf2009
جمعه 26 اردیبهشت 1393, 20:19 عصر
نه این مسئله اصلا ربطی به پرداخت درون برنامه ای نداره
برنامت درباره چی بود؟
اصولا به بازار ایمیل بزنی چند روز بعد جواب میدن
یه برنامه من که منتشر شد خیلی از بچه ها پیام دادن که تو گوشی ما نصب نمیشه و کرش میکنه
بازار تا این کامنت ها را دید برنامه ی من را از دسترس خارج کرد.
باید این مسائل را بررسی کنی ... حتما تو گوشی کاربرها کرش میکنه
اصلا ربطی به پرداخت درون برنامه ای نداره
برنامه رژیم لاغری بودش
بله به ایمیلم بلاخره جواب دادن تو توضیحات برنامه گفته بودم به کسانی که 5 ستاره بدن آخر ماه قرعه کشی میکنم جایزه میدم برای همین برنامه رو نابودش کردن قبلش یه تذکر هم ندادن دوباره درخواست بررسی دادم امیدوارم دوباره بذارنش و با اون ستارهاش (74 تا 5 ستاره داشت 10 تا یک ستاره در مجموع 4.5 ستاره بودش ) راستی دوباره منتشر بشه میاد اول لیست به نظرت ؟
اگه حذفش نمیکردن میلیونی میفروختش حیف شدش :اشتباه:

hamedjj
جمعه 26 اردیبهشت 1393, 21:23 عصر
برنامه رژیم لاغری بودش
بله به ایمیلم بلاخره جواب دادن تو توضیحات برنامه گفته بودم به کسانی که 5 ستاره بدن آخر ماه قرعه کشی میکنم جایزه میدم برای همین برنامه رو نابودش کردن قبلش یه تذکر هم ندادن دوباره درخواست بررسی دادم امیدوارم دوباره بذارنش و با اون ستارهاش (74 تا 5 ستاره داشت 10 تا یک ستاره در مجموع 4.5 ستاره بودش ) راستی دوباره منتشر بشه میاد اول لیست به نظرت ؟
اگه حذفش نمیکردن میلیونی میفروختش حیف شدش http://barnamenevis.org/images/smilies/yahoo/130.gif

فکر نکنم بیاد حیف شد

c0mmander
جمعه 26 اردیبهشت 1393, 22:58 عصر
دوستان کسی هست که تونسته باشه برنامه ساخته شده با MonoDroid رو در بازار برای فروش بزاره؟؟ چون همه اموزش ها برای جاوا کاراست!

hamedjj
جمعه 26 اردیبهشت 1393, 23:19 عصر
دوستان کسی هست که تونسته باشه برنامه ساخته شده با MonoDroid رو در بازار برای فروش بزاره؟؟ چون همه اموزش ها برای جاوا کاراست!

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

poorman
جمعه 26 اردیبهشت 1393, 23:50 عصر
این پرداخت درون برنامه ای از بازار ورژن چند جواب میده ؟؟؟

من روی بازار 4 امتحان کردم جواب نداد، روی 5 سالمه

hamedjj
شنبه 27 اردیبهشت 1393, 00:17 صبح
این پرداخت درون برنامه ای از بازار ورژن چند جواب میده ؟؟؟

من روی بازار 4 امتحان کردم جواب نداد، روی 5 سالمه

خبر ندارم
مگه میشه من خیلی وقت پیش از پرداخت درون برنامه ای تو برنامم استفاده کردم
ورژن 5 کی اومده؟

poorman
شنبه 27 اردیبهشت 1393, 01:54 صبح
تا جایی که من یادمه ورژن 4 مال یکی دو سال پیشه

ورژن 5 رو دیگه نمیدونم والا

ورژن 4 رو یک تست کن ببین میشه مال شما یا نه

http://www.downloadha.com/1390/12/%D9%86%D8%B3%D8%AE%D9%87-%D8%AC%D8%AF%DB%8C%D8%AF-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-%D8%A8%D8%A7%D8%B2%D8%A7%D8%B1-bazar-4-0-1-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF/

badname
شنبه 27 اردیبهشت 1393, 10:36 صبح
اگه تا فردا صبح درست ن
شد یه ایمیل به بازار بده
جواب ایمیلشون :| آیا برای شمام اینجوریه ؟ :
این مبلغ را شما در صفحهٔ نخست پنل صفر مشاهده می‌کنید. اما با ورود به بخش پرداخت و سپس «فروش» اطلاعات دقیق‌تر را مشاهده می‌کنید و می‌توانید از امکان غربال نیز استفاده بفرمایید.

hamedjj
شنبه 27 اردیبهشت 1393, 20:33 عصر
جواب ایمیلشون :| آیا برای شمام اینجوریه ؟ :
این مبلغ را شما در صفحهٔ نخست پنل صفر مشاهده می‌کنید. اما با ورود به بخش پرداخت و سپس «فروش» اطلاعات دقیق‌تر را مشاهده می‌کنید و می‌توانید از امکان غربال نیز استفاده بفرمایید.

بخش تصویه حساب تغییر کرد؟
اگه اون تغییر کنه حله ..

badname
شنبه 27 اردیبهشت 1393, 21:22 عصر
بخش تصویه حساب تغییر کرد؟
اگه اون تغییر کنه حله ..

بله آقا حامد تغییر کرد ولی خیلی جزئی
احتمالا خیلی دیر آپدیت میشه

badname
چهارشنبه 31 اردیبهشت 1393, 21:52 عصر
من از حالت آفلاین پرداخت درون برنامه ای شما استفاده کردم
به یه مشکل عجیب خوردم
به فرض مثال تو ورژن 1 برنامه م پرداختو انجام میدوم وقتی آپدیت جدید برنامه ورژن 2 رو نصب میکنم همچی بر میگرده به حالت not permium (حتی حالت پرداخت دوباره ام میزنم یه لحظه میاد و میره... ):ناراحت:

ورژن 2 رو پاک کمیکنم همون 1 رو نصب میکنم حالت permium رو دارم
چجوری باید حالت permium رو بعد آپدیت برا کاربرام فعال کنم اگه تو نسخه یک permium بودن ؟

badname
چهارشنبه 31 اردیبهشت 1393, 23:48 عصر
با این درستش کردم اگه از نظر اساتید درست باشه ...



publicstaticboolean verifyPurchase(String base64PublicKey, String signedData, String signature) {

if (signedData == null) {
Log.e(TAG, "data is null");
return false;
}

if (TextUtils.isEmpty(signedData) || TextUtils.isEmpty(base64PublicKey)
|| TextUtils.isEmpty(signature)) {
Log.e(TAG, "Purchase verification failed: missing data.");
if (BuildConfig.DEBUG) {
Log.d("DeBUG", ">>>"+BuildConfig.DEBUG);
return true;
}
return false;
}

PublicKey key = Security.generatePublicKey(base64PublicKey);
return Security.verify(key, signedData, signature); }

hamedjj
چهارشنبه 31 اردیبهشت 1393, 23:51 عصر
من از حالت آفلاین پرداخت درون برنامه ای شما استفاده کردم
به یه مشکل عجیب خوردم
به فرض مثال تو ورژن 1 برنامه م پرداختو انجام میدوم وقتی آپدیت جدید برنامه ورژن 2 رو نصب میکنم همچی بر میگرده به حالت not permium (حتی حالت پرداخت دوباره ام میزنم یه لحظه میاد و میره... ):ناراحت:

ورژن 2 رو پاک کمیکنم همون 1 رو نصب میکنم حالت permium رو دارم
چجوری باید حالت permium رو بعد آپدیت برا کاربرام فعال کنم اگه تو نسخه یک permium بودن ؟

یعنی شما نسخه جدید را نصب میکنید دوباره هم پرداخت را میزنید بازار پرداخت شما را تایید نمیکنه؟؟؟؟ :متفکر:
روی آیکن برنامه در امولاتور کلیک کن و بر روی دستکاپ بیار و در بالا در قسمت app info رها کن، ببین حافظه ای برای shareprefences ذخیره شده و دکمه clear catch فعال شده؟؟

badname
چهارشنبه 31 اردیبهشت 1393, 23:53 عصر
بله حامد جان فعال بود ، با کد بالا درست شد...
البته شمام چک کنید ببینید کار کردش درسته :لبخندساده:

poorman
جمعه 02 خرداد 1393, 01:45 صبح
سلام

آقا وقتی میخوایم آمار کالاهای خریداری شده توسط کاربر رو بگیریم، اگر اینترنت send و receive نداشته باشه کلا جواب نمیده، نمیشه کنترلش هم کرد

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

مثلا بعضی مواقع به سرور بازار وصل میشد اما به لینک وصل نمیشد، کلا الان موندم چطور به کاربر بفهمونم ارتباط با بازار برقرار نمیشه

--------------------------------------------------

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

مثلا توی یکی از ورژن هاش، خودش اگه کاربر به نت وصل نبود بهش پیام میداد موقع ارتباط

badname
جمعه 02 خرداد 1393, 10:05 صبح
سلام

آقا وقتی میخوایم آمار کالاهای خریداری شده توسط کاربر رو بگیریم، اگر اینترنت send و receive نداشته باشه کلا جواب نمیده، نمیشه کنترلش هم کرد

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

مثلا بعضی مواقع به سرور بازار وصل میشد اما به لینک وصل نمیشد، کلا الان موندم چطور به کاربر بفهمونم ارتباط با بازار برقرار نمیشه

--------------------------------------------------

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

مثلا توی یکی از ورژن هاش، خودش اگه کاربر به نت وصل نبود بهش پیام میداد موقع ارتباط

واقعا حرف دلو زدی ، سیستم پرداخت درون برنامه ای بازار فقط یه چیز سر هم شدست ، نه آمار دقیق داره نه به موقع آپدیت میشه:افسرده:، هر سری ام که چیزی در باره ش میپرسی خانم احمدی یه چیزی کپی پیست میکنه میفرسته به ایمیلت :قهقهه:

ghader62
شنبه 10 خرداد 1393, 16:48 عصر
دوستان بجز این کد
String base64EncodedPublicKey = "MIHNMA0GCSqGSIb3DQEBAQUAA4G7ADCBtwKBrwDGhl8/QU3vPjgmTutAbItCBpdwwgFWSAFvzM/OOXVSMHaeH9fjRIxa3aLXVAfuoRJ3Q1ynbQL1Dc2hAvlTAgEeR FNmVkkjypzhZxK3O18wIYJiNleLd/pXZyWaoHeQB6s3eH3KB8uDn2TdZoYzmXxZkvMoDW2db3mT1NmP xJYm+xF7AN/p/Sr9YqEXpIpzsXbe6T30seUHmPDdM4r7h/r6hx/R/2hHvi6w8CAwEAAQ==";


آیا کد دیگری راجع به محصول رو هم باید داخل برنامه قرار بدیم
من فقط این کد رو داخل hamedjj عزیز عوض کردم و کد محصول خودمو قرار دادم ولی وقتی برا پرداخت به صفحه بازار میره نمیتونه محصول منو شناسایی کنه و خطای 404 پیدا نشد رو میده
ممنون میشم دوستان کمکم کنن

ghader62
شنبه 10 خرداد 1393, 17:38 عصر
دوستان بجز این کد
String base64EncodedPublicKey = "MIHNMA0GCSqGSIb3DQEBAQUAA4G7ADCBtwKBrwDGhl8/QU3vPjgmTutAbItCBpdwwgFWSAFvzM/OOXVSMHaeH9fjRIxa3aLXVAfuoRJ3Q1ynbQL1Dc2hAvlTAgEeR FNmVkkjypzhZxK3O18wIYJiNleLd/pXZyWaoHeQB6s3eH3KB8uDn2TdZoYzmXxZkvMoDW2db3mT1NmP xJYm+xF7AN/p/Sr9YqEXpIpzsXbe6T30seUHmPDdM4r7h/r6hx/R/2hHvi6w8CAwEAAQ==";


آیا کد دیگری راجع به محصول رو هم باید داخل برنامه قرار بدیم
من فقط این کد رو داخل hamedjj عزیز عوض کردم و کد محصول خودمو قرار دادم ولی وقتی برا پرداخت به صفحه بازار میره نمیتونه محصول منو شناسایی کنه و خطای 404 پیدا نشد رو میده
ممنون میشم دوستان کمکم کنن

خودم فهمیدم
باید علاوه بر کد بالا «شناسه کالا» رو نیز در قسمت SKU_PREMIUM وارد کنیم

alimooghashang
دوشنبه 19 خرداد 1393, 20:02 عصر
من شنیدم کافه بازار ایده های خوب رو کش میره
میخوام بدونم اگه نخوام برنامه م رو داخل کافه بازار بفروشم و خودم بفروشم ، پرداخت هزینه رو از داخل برنامه (بغیر پرداخت درون برنامه ای بازار) چطور میشه انجام داد؟
اطلاعی کسی داره؟
ممنون

hamedjj
دوشنبه 19 خرداد 1393, 20:18 عصر
من شنیدم کافه بازار ایده های خوب رو کش میره
میخوام بدونم اگه نخوام برنامه م رو داخل کافه بازار بفروشم و خودم بفروشم ، پرداخت هزینه رو از داخل برنامه (بغیر پرداخت درون برنامه ای بازار) چطور میشه انجام داد؟
اطلاعی کسی داره؟
ممنون

قبلا تو چند تا تاپیک دیگه دراین باره بحث شده
یه سرچ کن پیدا میشه

این تاپیک مخصوص سیستم پرداخت درون برنامه ای مارکت ها هست

alimooghashang
دوشنبه 19 خرداد 1393, 20:21 عصر
قبلا تو چند تا تاپیک دیگه دراین باره بحث شده
یه سرچ کن پیدا میشه

این تاپیک مخصوص سیستم پرداخت درون برنامه ای مارکت ها هست

ممنون
عنوانش چیه

hamedjj
دوشنبه 19 خرداد 1393, 20:41 عصر
ممنون
عنوانش چیه

این چند تا لینک را نگاه کن یه چیزایی داره:

http://barnamenevis.org/showthread.php?444464

http://barnamenevis.org/showthread.php?443047

http://barnamenevis.org/showthread.php?451879

reza_azizi2010
شنبه 24 خرداد 1393, 00:49 صبح
دوستان ببخشید یه سوال خیلی پیش پا فتاده.
بازار گفته یسری فایل رو به پروزه اضافه کنیم، اون فایلهارو از کجا باید بگیرم؟!
مخصوصا اون فایل IInAppBillingService.aidl ؟

hamedjj
شنبه 24 خرداد 1393, 03:34 صبح
دوستان ببخشید یه سوال خیلی پیش پا فتاده.
بازار گفته یسری فایل رو به پروزه اضافه کنیم، اون فایلهارو از کجا باید بگیرم؟!
مخصوصا اون فایل IInAppBillingService.aidl ؟

تو همون پروژه trivialDrive و همین طور تو پروژه من هست

reza_azizi2010
شنبه 24 خرداد 1393, 19:49 عصر
تو همون پروژه trivialDrive و همین طور تو پروژه من هست
حامد جان، شما توی پروژه ات یه دکمه گذاشتی که وقتی روش کلیک میشه صفحه بازار میاد که خرید کنه اما توی لیسینرش فقط یه toast گذاشتی، چطوری میره سمت بازار پس؟!

hamedjj
شنبه 24 خرداد 1393, 23:40 عصر
حامد جان، شما توی پروژه ات یه دکمه گذاشتی که وقتی روش کلیک میشه صفحه بازار میاد که خرید کنه اما توی لیسینرش فقط یه toast گذاشتی، چطوری میره سمت بازار پس؟!

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

reza_azizi2010
یک شنبه 25 خرداد 1393, 00:01 صبح
تو فایل layout نگاه کن ... برای دکمه یه onClick قرار دادم که با کلیک روی دکمه اون متد اجرا میشه ... داخل اون متد صفحه پرداخت بازار وجود دارد
تو اون صفحه فقط یکدونه دکمه هست که توی onClick اون دکمه هم فقط یه toast اجرا میشه. البته من layout شمارو نمیتونم باز کنم چون ورژنم پایینه.
ببینید من میخام وقتی که کاربر روی گزینه پنجم لیست کلیک کرد مستقیم بره به صفحه پرداخت بازار. دیگه نیاز نباشه که بره به یه صفحه دیگه و اونجا یک دکمه بزنه و بعدش بره به بازار.

این کد دکمه برنامه شماست: الان من چیکار کنم؟

btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), R.string.clickpremium, Toast.LENGTH_SHORT).show();
}
});


خیلی برام مبهمه. اینکه فقط یک toste چطور میره به بازار اخه؟؟!

hamedjj
یک شنبه 25 خرداد 1393, 01:37 صبح
رو لیست ویو جواب نمیده ... یعنی من هر کاری کردم نشد
یه صفحه پرداخت جدا درست کن .. اگه تونستی رو لیست ویو انجامش بدی حتما من را در جریان بزار

onClick در layout :
<Button
android:id="@+id/buy"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="59dp"
android:onClick="onCustomPremiumAppButtonClicked"
android:text="Buy!" />

در کلاس پرداخت :
public void onCustomPremiumAppButtonClicked(View arg0) {

Log.d(TAG, "Upgrade button clicked; launching purchase flow for upgrade.");

/* TODO: for security, generate your payload here for verification. See the comments on
* verifyDeveloperPayload() for more info. Since this is a SAMPLE, we just use
* an empty string, but on a production app you should carefully generate this. */
setWaitScreen(true);

String payload = "ahsjahsdjnsxznxbsjdjlsadjksahd";

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


}

اونی که شما میگی در متد updateUi قرار داره که بعد از پرداخت توست نشون داده میشه

Amin-rz
یک شنبه 22 تیر 1393, 03:05 صبح
سلام دوستان.
من آموزش هاي بازارو خوندم.
خواهشا يه نفر كه پرداخت درون برنامه اي رو انجام داده بياد ۴خط روان و ساده بگه بايد چكار كنيم!

برنامه من يه دكمه براي آپديت ديتاي خودش داره.
مي خوام وقتي كاربر روش كليك كرد اگه محصول(آپديت) رو نخريده بود به صفحه پرداخت هدايت بشه,
و اگه محصول خريداري شده بود دستورات آپديتو رو انجام بده.

mohammad98
دوشنبه 23 تیر 1393, 12:23 عصر
سلام واقعا آموزشات کامله اما من یه جایی گیر کردم :ناراحت:
اگه من برنامه ی دومو بفرستم که برنامه ی اول (محصول) حذف میشه میشه بگید باید چیکار کنم ؟ بازم ممنون

Amin-rz
سه شنبه 24 تیر 1393, 18:33 عصر
دوستان لطفا راهنمایی کنید.
من طبق این آموزش بازار:
http://pardakht.cafebazaar.ir/doc/quickstart/?l=fa
تا مرحله 6 کدها و فایلها رو کپی کردم+مرحله 9
تو اکتیویتی یه دکمه دارم می خوام وقتی کاربر روش کلیک کرد به صفحه خرید(محصول) هدایت بشه و اگر نرم افزارو خریده بود کدهای آپدیت انجام بشه.
این اکتیویتی منه چکار باید بکنم ؟



package com.example.smsbaaz;

public class UpdateActivity extends Activity {




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




@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.update);



String base64EncodedPublicKey = "";
// You can find it in your Bazaar console, in the Dealers section.
// It is recommended to add more security than just pasting it in your source code;
mHelper = new IabHelper(this, base64EncodedPublicKey);

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) ;
}
});




Button btn = (Button) findViewById(R.id.button1);










}


@Override
public void onDestroy() {
super.onDestroy();
if (mHelper != null) mHelper.dispose();
mHelper = null;
}

}

hamedjj
سه شنبه 24 تیر 1393, 20:46 عصر
دوستان لطفا راهنمایی کنید.
من طبق این آموزش بازار:
http://pardakht.cafebazaar.ir/doc/quickstart/?l=fa
تا مرحله 6 کدها و فایلها رو کپی کردم+مرحله 9
تو اکتیویتی یه دکمه دارم می خوام وقتی کاربر روش کلیک کرد به صفحه خرید(محصول) هدایت بشه و اگر نرم افزارو خریده بود کدهای آپدیت انجام بشه.
این اکتیویتی منه چکار باید بکنم ؟

[/

از این آموزش ها استفاده کن
https://github.com/hamedjj/BazaarInAppBilling

Amin-rz
چهارشنبه 25 تیر 1393, 13:08 عصر
حامد جان ممنون از آموزش خوبی که گذاشتی.
چندتا سوال واسم پیش اومده اگه لطف کنی و جواب بدی ممنون میشم:
1.تگ رو باید برابر با چی قرار بدیم؟
static final String TAG = "";
2.چرا 10001 ؟
static final int RC_REQUEST = 10001;
3.این به چه دردی می خوره؟:D
String payload = "inbarnametavasotehamedjjsakhteshodeast";
4.توString.xml چندتا رشته تعریف کردی که مقدارشون نامعلومه.جریانشون چیه؟
5.چرا تو امولاتور فورس کلوز میده؟چون بازار نصب نیست؟

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

یه لطف کن ببین درسته؟چیزیش اشتباه نیست؟



package com.example.smsbaaz;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.entity.BufferedHttpEntity;
import org.apache.http.impl.client.DefaultHttpClient;

import util.IabHelper;
import util.IabResult;
import util.Inventory;
import util.Purchase;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class UpdateActivity extends Activity {



public ProgressDialog dialog ;
Button btn1;
//Debug tag, for logging
static final String TAG = "SmsBaaz";
//SKUs for our products: the premium upgrade (non-consumable)
static final String SKU_PREMIUM = "online";
//Does the user have the premium upgrade?
boolean mIsPremium = false;
//(arbitrary) request code for the purchase flow
static final int RC_REQUEST = 10001;
//The helper object
IabHelper mHelper;



@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.update);


btn1 = (Button) findViewById(R.id.button1);
btn1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
startActivity(new Intent(UpdateActivity.this,MainActivity.class));
}
});




// show loading dialog with ProgressDialog
dialog = new ProgressDialog(this);
dialog.setMessage("loading...");
dialog.setCancelable(false);
dialog.setInverseBackgroundForced(false);
dialog.show();




String base64EncodedPublicKey = "MIHNMA0GCSqGSIb3DQEBAQUAA4G7ADCBtwKBrwDGhl8/QU3vPjgmTutAbItCBpdwwgFWSAFvzM/OOXVSMHaeH9fjRIxa3aLXVAfuoRJ3Q1ynbQL1Dc2hAvlTAgEeR FNmVkkjypzhZxK3O18wIYJiNleLd/pXZyWaoHeQB6s3eH3KB8uDn2TdZoYzmXxZkvMoDW2db3mT1NmP xJYm+xF7AN/p/Sr9YqEXpIpzsXbe6T30seUHmPDdM4r7h/r6hx/R/2hHvR/vnN0i6w8CAwEAAQ==";
// You can find it in your Bazaar console, in the Dealers section.
// It is recommended to add more security than just pasting it in your source code;
mHelper = new IabHelper(this, base64EncodedPublicKey);


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
public void onIabSetupFinished1(IabResult result) {
// TODO Auto-generated method stub

}
});




}






//با آغاز اکتیویتی کد زیر اجرا میشود که برای جستجو premium بودن میباشد.
//اگر کاربر premium باشد دیالوگ loading مخفی میشه dialog.hide() متد UpdateUi() اجرا میشه و محتوای این متد را در باتن قرار میده.
//اگر کاربر premium نباشه هم منتظر لمس کردن کاربر بر روی دکمه میشه که متد onOnlineUpgradeAppButtonClicked را فراخوانی کند.
IabHelper.QueryInventoryFinishedListener 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);
dialog.hide();
return;
}
else {
Log.d(TAG, "Query inventory was successful.");
// does the user have the premium upgrade?
mIsPremium = inventory.hasPurchase(SKU_PREMIUM);

// update UI accordingly

Log.d(TAG, "User is " + (mIsPremium ? "PREMIUM" : "NOT PREMIUM"));
}
dialog.hide();
updateUi();
setWaitScreen(false);
Toast.makeText(getApplicationContext(), mIsPremium? R.string.premium : R.string.notpremium, Toast.LENGTH_SHORT).show();
Log.d(TAG, "Initial inventory query finished; enabling main UI.");

}

};



@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.");
}

}

boolean verifyDeveloperPayload(Purchase p) {
String payload = p.getDeveloperPayload();

return true;
}

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
Log.d(TAG, "Purchase finished: " + result + ", purchase: " + purchase);
if (result.isFailure()) {
Log.d(TAG, "Error purchasing: " + result);
setWaitScreen(false);
return;
}
if (!verifyDeveloperPayload(purchase)) {
complain("Error purchasing. Authenticity verification failed.");
setWaitScreen(false);
return;
}

Log.d(TAG, "Purchase successful.");

if (purchase.getSku().equals(SKU_PREMIUM)) {
Log.d(TAG, "Purchase is premium upgrade. Congratulating user.");
alert("Thank you for upgrading to premium!");
mIsPremium = true;
updateUi();
setWaitScreen(false);

}
}
};

@Override
public void onDestroy() {
super.onDestroy();

Log.d(TAG, "Destroying helper.");
if (mHelper != null) mHelper.dispose();
mHelper = null;
}



// اگر کاربر پریمیوم باشد دستورات آپدیت را انجام میدهد در غیر اینصورت به صفحه خرید هدایت می شود.
public void updateUi() {

if (mIsPremium) {


//دستورات آپدیت در اینجا

}

else
{
Log.d(TAG, "Upgrade button clicked; launching purchase flow for upgrade.");
setWaitScreen(true);

/* TODO: for security, generate your payload here for verification. See the comments on
* verifyDeveloperPayload() for more info. Since this is a SAMPLE, we just use
* an empty string, but on a production app you should carefully generate this. */
String payload = "inbarnametavasotehamedjjsakhteshodeast";

mHelper.launchPurchaseFlow(this, SKU_PREMIUM, RC_REQUEST,
mPurchaseFinishedListener, payload);
}
}






//Enables or disables the "please wait" screen.
void setWaitScreen(boolean set) {
findViewById(R.id.screen_wait).setVisibility(set ? View.VISIBLE : View.GONE);
}


void complain(String message) {
Log.e(TAG, "**** testbilling Error: " + message);
alert("Error: " + message);
}

void alert(String message) {
AlertDialog.Builder bld = new AlertDialog.Builder(this);
bld.setMessage(message);
bld.setNeutralButton("OK", null);
Log.d(TAG, "Showing alert dialog: " + message);
bld.create().show();

}


}

hamedjj
چهارشنبه 25 تیر 1393, 20:57 عصر
حامد جان ممنون از آموزش خوبی که گذاشتی.
چندتا سوال واسم پیش اومده اگه لطف کنی و جواب بدی ممنون میشم:

1 - tag برای شناسایی ارورهای logcat هست و تاثیری در خرید نداره
2 - چیز مهم نیست هر چی خواستی بزار
3 - به گفته خود بازار string payload یه رشته امنیتی برای ویرفای کردن پرداخت که اگه از خود بازار بپرسی نمیدونه و میگه به مستندات گوگل مراجعه کن .... فقط انگشتاتو بزار رو کیبورد یه چیز تایپ کن
4 - من تو فایل String.xml رشته نامعلومی مشاهده نکردم .
5 - آره باید بازار نصب باشه
6 - به نظر که مشکلی نداره ..... متد UpdateUi را کامل و اجرا کن ببین چی میشه

Amin-rz
سه شنبه 31 تیر 1393, 15:50 عصر
حامد جان اگه بخوام با زدن يه دكمه عمليات (چك كردن خريد و ..) شروع بشه بايد چكار كنم؟
اينطوري كه الان هست به محض اجراي اكتيويتي,عمليات (خريد,آپديت و ...) شروع ميشه.

hamedjj
سه شنبه 31 تیر 1393, 17:54 عصر
حامد جان اگه بخوام با زدن يه دكمه عمليات (چك كردن خريد و ..) شروع بشه بايد چكار كنم؟
اينطوري كه الان هست به محض اجراي اكتيويتي,عمليات (خريد,آپديت و ...) شروع ميشه.

این کد که شما را به صفحه خرید هدایت میکنه
mHelper.launchPurchaseFlow(this, SKU_PREMIUM, RC_REQUEST,
mPurchaseFinishedListener, payload);



با کلیک روی دکمه کد بالا اجرا میشه

payload هم که همون رشته String :
String payload = "inbarnametavasotehamedjjsakhteshodeast";

Amin-rz
سه شنبه 31 تیر 1393, 21:48 عصر
چطور ميشه فهميد بازار رو گوشي نصبه يا نه؟

hamedjj
سه شنبه 31 تیر 1393, 23:33 عصر
چطور ميشه فهميد بازار رو گوشي نصبه يا نه؟

این سوال قبلا مطرح شده بود باید تو تالار سرچ کنی
اگر هم پیدا نشد یک تاپیک جدا براش درست کن ...

momayyezi_m
پنج شنبه 02 مرداد 1393, 13:56 عصر
ایا راهی داره که همزمان پرداخت درون برنامه ای بازار و کندو رو داشته باشیم؟
کلید های عمومی برنامه رو که مارکت ها میدن ،متفاوت نیستند؟
و اینکه مجوزی که باید تو مانیفست وارد کنیم ،فرقی میکنه برای کندو

از طرفی تو مارکت کندو نوشته دسترسی نمیخواد؟

Amin-rz
پنج شنبه 02 مرداد 1393, 19:56 عصر
حامد جان موقع ورود به اكتيويتي آپديت ,نرم افزار بسته ميشه(رو گوشي نه امولاتور)
كجاش ايراد داره؟

hamedjj
پنج شنبه 02 مرداد 1393, 20:12 عصر
حامد جان موقع ورود به اكتيويتي آپديت ,نرم افزار بسته ميشه(رو گوشي نه امولاتور)
كجاش ايراد داره؟

رو امولاتور مشکلی نداره؟؟

Amin-rz
پنج شنبه 02 مرداد 1393, 21:20 عصر
رو امولاتور كه پست اول گفتم اصلا چون بازار نصب نيست از برنامه خارج ميشه.:(
تو الان اينو تست مي كني كار ميده؟

hamedjj
پنج شنبه 02 مرداد 1393, 21:38 عصر
رو امولاتور كه پست اول گفتم اصلا چون بازار نصب نيست از برنامه خارج ميشه.:(
تو الان اينو تست مي كني كار ميده؟

من که پروژه را خودم که هیچ ... بالای 10 نفر دیگه هم امتحان کردند مشکلی نداشت
رو امولاتور بازار را نصب کن و برنامه را اجرا کن
logcat را بزار ببینیم

Amin-rz
دوشنبه 06 مرداد 1393, 21:06 عصر
چطور بازار رو رو امولاتور نصب کنم؟چندتا تاپیک خوندم نتونستم.
پروژه ای که گذاشتید درست عمل می کنه.

با پروژه خودت تست کردم و محصول رو خریداری هم کردم.
ولی پروژه خودم کار نمیده.
برای مراحل مختلف پردازش خرید اومدم پروگرس دیالوگ گذاشتم تا ببینم کجا متوقف میشه.
رو پیام "در حال بررسی" متوقف میشه.با اینکه محصول رو خریدم.
ببین این فایل جاوای منه:
اگه محصول خریداری شده باشه i=1 میشه مگرنه به صفحه خرید باید هدایت بشه.
محصول رو که اکانت بازار من خریده پس دیگه قرار نیست به صفحه خرید بره پس باید i=1 بشه که نمیشه.
رو پیام "در حال بررسی" متوقف میشه.

package com.example.smsbaaz;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.entity.BufferedHttpEntity;
import org.apache.http.impl.client.DefaultHttpClient;

import util.IabHelper;
import util.IabResult;
import util.Inventory;
import util.Purchase;

import android.app.ActionBar.LayoutParams;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.View;
import android.view.View.MeasureSpec;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class UpdateActivity extends Activity {

ProgressDialog progressDialog;
private ArrayAdapter arrayAdapter;
int i=0;

Button btn1;
//Debug tag, for logging
static final String TAG = "SmsBaaz";
//SKUs for our products: the premium upgrade (non-consumable)
static final String SKU_PREMIUM = "asd123-._hds";
//Does the user have the premium upgrade?
boolean mIsPremium = false;
//(arbitrary) request code for the purchase flow
static final int RC_REQUEST = 10001;
//The helper object
IabHelper mHelper;



@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.update);



// show loading dialog with ProgressDialog
progressDialog = new ProgressDialog(UpdateActivity.this);
progressDialog.setMessage("در حال بررسی");
progressDialog.show();
progressDialog.setCanceledOnTouchOutside(false);
progressDialog.setCancelable(false);




String base64EncodedPublicKey = "MIHNMA0GCSqGSIb3DQEBAQUAA4G7ADCBtwKBrwDGhl8/QU3vPjgmTutAbItCBpdwwgFWSAFvzM/OOXVSMHaeH9fjRIxa3aLXVAfuoRJ3Q1ynbQL1Dc2hAvlTAgEeR FNmVkkjypzhZxK3O18wIYJiNleLd/pXZyWaoHeQB6s3eH3KB8uDn2TdZoYzmXxZkvMoDW2db3mT1NmP xJYm+xF7AN/p/Sr9YqEXpIpzsXbe6T30seUHmPDdM4r7h/r6hx/R/2hHvR/vnN0i6w8CAwEAAQ==";
// You can find it in your Bazaar console, in the Dealers section.
// It is recommended to add more security than just pasting it in your source code;
mHelper = new IabHelper(this, base64EncodedPublicKey);


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
public void onIabSetupFinished1(IabResult result) {
// TODO Auto-generated method stub

}
});




}






//با آغاز اکتیویتی کد زیر اجرا میشود که برای جستجو premium بودن میباشد.
//اگر کاربر premium باشد دیالوگ loading مخفی میشه dialog.hide() متد UpdateUi() اجرا میشه و محتوای این متد را در باتن قرار میده.
//اگر کاربر premium نباشه هم منتظر لمس کردن کاربر بر روی دکمه میشه که متد onOnlineUpgradeAppButtonClicked را فراخوانی کند.
IabHelper.QueryInventoryFinishedListener 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 {

progressDialog.setMessage("بررسی سبد خرید...");
progressDialog.show();

Log.d(TAG, "Query inventory was successful.");
// does the user have the premium upgrade?
mIsPremium = inventory.hasPurchase(SKU_PREMIUM);

// update UI accordingly

Log.d(TAG, "User is " + (mIsPremium ? "PREMIUM" : "NOT PREMIUM"));
}
updateUi();
Log.d(TAG, "Initial inventory query finished; enabling main UI.");

}

};



@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.");
}

}

boolean verifyDeveloperPayload(Purchase p) {
String payload = p.getDeveloperPayload();

return true;
}

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
Log.d(TAG, "Purchase finished: " + result + ", purchase: " + purchase);
if (result.isFailure()) {
Log.d(TAG, "Error purchasing: " + result);
return;
}
if (!verifyDeveloperPayload(purchase)) {
complain("Error purchasing. Authenticity verification failed.");
return;
}

Log.d(TAG, "Purchase successful.");

if (purchase.getSku().equals(SKU_PREMIUM)) {
Log.d(TAG, "Purchase is premium upgrade. Congratulating user.");
Toast.makeText(getApplicationContext(),"از اینکه نرم افزار را خریداری نمودید متشکریم",Toast.LENGTH_LONG).show();
mIsPremium = true;
updateUi();

}
}
};

@Override
public void onDestroy() {
super.onDestroy();

Log.d(TAG, "Destroying helper.");
if (mHelper != null) mHelper.dispose();
mHelper = null;
}



// اگر کاربر پریمیوم باشد دستورات آپدیت را انجام میدهد در غیر اینصورت به صفحه خرید هدایت می شود.
public void updateUi() {

if (mIsPremium) {

progressDialog.dismiss();
Toast.makeText(getApplicationContext(),"نرم افزار خریداری شده است",Toast.LENGTH_LONG).show();

//دستورات آپدیت در اینجا
i=1;

}

else
{

progressDialog.dismiss();
Toast.makeText(getApplicationContext(),"نرم افزار خریداری نشده است",Toast.LENGTH_LONG).show();
Toast.makeText(getApplicationContext(),"به صفحه خرید هدایت می شوید",Toast.LENGTH_LONG).show();

Log.d(TAG, "Upgrade button clicked; launching purchase flow for upgrade.");

/* TODO: for security, generate your payload here for verification. See the comments on
* verifyDeveloperPayload() for more info. Since this is a SAMPLE, we just use
* an empty string, but on a production app you should carefully generate this. */
String payload = "inbarnametavasotehamedjjsakhteshodeast";

mHelper.launchPurchaseFlow(this, SKU_PREMIUM, RC_REQUEST,
mPurchaseFinishedListener, payload);
}
}



void complain(String message) {
Log.e(TAG, "**** testbilling Error: " + message);
alert("Error: " + message);
}

void alert(String message) {
AlertDialog.Builder bld = new AlertDialog.Builder(this);
bld.setMessage(message);
bld.setNeutralButton("OK", null);
Log.d(TAG, "Showing alert dialog: " + message);
bld.create().show();

}

}

hamedjj
دوشنبه 06 مرداد 1393, 21:44 عصر
بازار این اسم محصول را قبول کرد !!! آخه ( - ) فکر نکنم مورد تایید بازار باشه. عجیبه ...

شما متد آپدیت را به این شکل تغییر بده .... else و progressdialog را بردار

public void updateUi() {

if (mIsPremium) {



Toast.makeText(getApplicationContext(),"نرم افزار خریداری شده است",Toast.LENGTH_LONG).show();

//دستورات آپدیت در اینجا

}



ببین نتیجه چی میشه خبر بده
به i هم کاری نداشته باش

Amin-rz
دوشنبه 06 مرداد 1393, 23:22 عصر
بازار رو چطور رو امولاتور نصب كنم؟!

hamedjj
سه شنبه 07 مرداد 1393, 00:08 صبح
بازار رو چطور رو امولاتور نصب كنم؟!

از داخل browser امولاتور برو تو این آدرس دانلود کن
http://getbazaar.com/en/

zhonos
سه شنبه 07 مرداد 1393, 00:41 صبح
بازار رو چطور رو امولاتور نصب كنم؟!
میتونی از این راه بری:
مرحله اول:
فایل APK بازار رو دانلود کن و آماده داشته باش (من خودم از بازار 4 استفاده میکنم، سبک تره و روی امولاتور با رم پایین خطای نصب نمیده).
برو توی مسیر پوشۀ Android (احتمالا داخل Program Files باید باشه) و بعد android-sdk و بعد پوشۀ platform-tools رو باز کن.
فایل APK بازار رو اینجا کپی کن.
مرحله دوم:
حالا دکمه Winkey+R رو بزن؛
تایپ کن cmd و OK رو بزن تا باز بشه.
وارد مسیر پوشۀ بالا بشو (پوشه ی platform-tools) که مثلا من برای وارد شدنش توی سیستم خودم اینو تایپ میکنم و اینتر میزنم:
cd C:\Program Files (x86)\Android\android-sdk\platform-tools
خب حالا دستور زیر رو اجرا کن و صبر کن تا فایل نصب بشه:
adb install BazaarFileName.APK
وقتی نصب تموم بشه پیغام successful میده.

zhonos
سه شنبه 07 مرداد 1393, 00:49 صبح
رو امولاتور كه پست اول گفتم اصلا چون بازار نصب نيست از برنامه خارج ميشه.:(
تو الان اينو تست مي كني كار ميده؟
همیشه هم روی امولاتور جواب نمیده.
یعنی روی امولاتور setup اولیه همیشه درست انجام میشه اما ممکنه به محض باز کردن صفحه بازار (مثلا اگه ورژن پایین باشه) خطا بده. البته خطاش یه جور دیگه ست و خیلی دوست داشتنیه :لبخند: چون نشونۀ اینه که روی دستگاه واقعی کار میکنه :لبخند:
خلاصه اینکه موقع تست پرداخت درون برنامه ای، امولاتور رو بی خیال شو. یه گوشی واقعی بردار، USB Debugging رو فعال کن و با کابل بزنش به سیستم و برنامه رو روی اون تست کن.

zhonos
سه شنبه 07 مرداد 1393, 00:56 صبح
ایا راهی داره که همزمان پرداخت درون برنامه ای بازار و کندو رو داشته باشیم؟
کلید های عمومی برنامه رو که مارکت ها میدن ،متفاوت نیستند؟
و اینکه مجوزی که باید تو مانیفست وارد کنیم ،فرقی میکنه برای کندو

از طرفی تو مارکت کندو نوشته دسترسی نمیخواد؟

پرداخت درون برنام ای کندو دقیقا مشابه بازار هست و مشابه مایکت و ... همه اینها نسخه 3 گوگل هستن.
واسه کندو توی مانیفست مجوز نمیخواد. ولی مثلا واسه بازار و مایکت حتما میخواد.
برنامه رو توی هر مارکت آپلود میکنی کلید عمومی خودشو بهت میده که با مارکت دیگه فرق داره.
نمیشه همزمان یه برنامه بتونه توی دوتا مارکت قابلیت خرید داشته باشه، چون اون serviceIntent توی فایل IabHelper.java برای هر مارکت مخصوص به خودش هست.

hamedjj
سه شنبه 07 مرداد 1393, 01:10 صبح
پرداخت درون برنام ای کندو دقیقا مشابه بازار هست و مشابه مایکت و ... همه اینها نسخه 3 گوگل هستن.
واسه کندو توی مانیفست مجوز نمیخواد. ولی مثلا واسه بازار و مایکت حتما میخواد.
برنامه رو توی هر مارکت آپلود میکنی کلید عمومی خودشو بهت میده که با مارکت دیگه فرق داره.
نمیشه همزمان یه برنامه بتونه توی دوتا مارکت قابلیت خرید داشته باشه، چون اون serviceIntent توی فایل IabHelper.java برای هر مارکت مخصوص به خودش هست.

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

aryan1990sh
جمعه 10 مرداد 1393, 12:30 عصر
سلام آقای حامد
اول خیلی خیلی ممنونم ازتون به خاطر این پروژه ی پرداخت درون برنامه ای که نوشتین.

من دو کلاس CustomPremium و PurchaseApp رو داخل برنامه ام کپی کردم. برنامه درست کار میکنه.
فقط مشکلی که هست اینه که بعد از بسته شدن برنامه، رنگ دکمه ی Active و بقیه چیزا به حالت اول برمیگرده و لازمه مجددا کلاس PurchaseApp باز بشه تا حساب کاربر رو شناسایی کنه.

میشه لطفا منو راهنمایی کنید تا این مشکلو حل کنم. خیلی ممنونم

hamedjj
جمعه 10 مرداد 1393, 13:40 عصر
سلام آقای حامد
اول خیلی خیلی ممنونم ازتون به خاطر این پروژه ی پرداخت درون برنامه ای که نوشتین.

من دو کلاس CustomPremium و PurchaseApp رو داخل برنامه ام کپی کردم. برنامه درست کار میکنه.
فقط مشکلی که هست اینه که بعد از بسته شدن برنامه، رنگ دکمه ی Active و بقیه چیزا به حالت اول برمیگرده و لازمه مجددا کلاس PurchaseApp باز بشه تا حساب کاربر رو شناسایی کنه.

میشه لطفا منو راهنمایی کنید تا این مشکلو حل کنم. خیلی ممنونم

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

1 - برای حل چنین مشکلی باید یه کلاس براش درست کنی که از Applcation اکستندز شه باشه : (یه کلاس بساز و کد زیر را توش کپی کن)

public class App extends Application{

public static boolean mIsPremium = false;
SharedPreferences preferences = null ;
private String PACKAGENAME = "" ;
final String KEY = "PERIMIUM" ;

@Override
public void onCreate() {
super.onCreate();

// load your setting that are you premium or not?
preferences = getSharedPreferences(PACKAGENAME,Context.MODE_PRIV ATE);
PACKAGENAME = getClass().getName();
mIsPremium = preferences.getBoolean(KEY, false);
if (PurchaseApp.ispremium == true) {
// change the mIsPremium to true
SharedPreferences.Editor newtask = preferences.edit();
newtask.putBoolean(KEY, true);
newtask.commit();
}
}

2 - بعد باید در مانیفست در تگ application معرفی کنی :
<application
android:name=".App"

3 - در کلاس PurchasApp یه متغییر static به نام ispremium درست کن و mIsPremium2 را حذف کن:
public static boolean ispremium = false;

و در متد UpdateUi این متغییر را برابر true بذار :
ispremium = true;

4 - و در آخر هر جا که تا الان mIsPremium2 بود App.mIsPremium قرار بده

aryan1990sh
جمعه 10 مرداد 1393, 15:29 عصر
واقعا ممنونم از وقتی که میگذارید. سپاس فراوان:قلب:

aryan1990sh
جمعه 10 مرداد 1393, 16:37 عصر
من تغییراتی رو که گفتین اعمال کردم، اما مشکل حل نشد متاسفانه:ناراحت:

hamedjj
جمعه 10 مرداد 1393, 19:18 عصر
من تغییراتی رو که گفتین اعمال کردم، اما مشکل حل نشد متاسفانه:ناراحت:

رو پروژه من امتحان کن ببین هنوز مشکلی پیش میاد؟

aryan1990sh
جمعه 10 مرداد 1393, 20:35 عصر
با پروژه شما هم امتحان کردم، باز درست نشد. :افسرده:

hamedjj
شنبه 11 مرداد 1393, 00:15 صبح
با پروژه شما هم امتحان کردم، باز درست نشد. :افسرده:

تو کلاس CustomPremium در متد Updatebtn به جای PurchaseApp.mIsPremium2 را با App.mIsPremium تغییر بده

aryan1990sh
شنبه 11 مرداد 1393, 07:58 صبح
تو کلاس CustomPremium در متد Updatebtn به جای PurchaseApp.mIsPremium2 را با App.mIsPremium تغییر بده

این تغییر رو انجام داده بودم. بعد از حذف mIsPremium2 طبیعتا این مورد باید عوض میشد.

می تونم بپرسم خصوصیات شی Application چیه؟ چرا کلاس App ازش اکستندز میشه؟

hamedjj
شنبه 11 مرداد 1393, 12:05 عصر
این تغییر رو انجام داده بودم. بعد از حذف mIsPremium2 طبیعتا این مورد باید عوض میشد.

می تونم بپرسم خصوصیات شی Application چیه؟ چرا کلاس App ازش اکستندز میشه؟

بیا رو پروژه پیاده سازی کردم :
http://up.ashiyane.org/images/78b9d8r2kpsrz8emz29.rar

مشکل از اونجا بود که در کلاس PurchaseApp در بابا قسمت sharedprerefences یادم رفته بود بگم ispremium بزاری: (کد را رو هوا بنویسی همین میشه دیگه)

// load your setting that are you premium or not?
preferences = getSharedPreferences(PACKAGENAME,Context.MODE_PRIV ATE);
PACKAGENAME = getClass().getName();
Log.e("TAG", PACKAGENAME);
ispremium = preferences.getBoolean(KEY, false);


متغییر هایی که درکلاس Application قرار دارد در اول برنامه صدا زده میشه و تا آخر برنامه در حال اجرا هستند ولی در وقتی در کلاس purchaseApp قرار داشت در اول برنامه صدا زده نمیشد و باید حتما در وارد کلاس بشی و متغییر خوانده بشه و برنامه بفهمه که true است و سپس برنامه را آپدیت میکنه

aryan1990sh
شنبه 11 مرداد 1393, 15:43 عصر
خیلی ممنون آقا حامد . حیف که فقط یه بار می تونم تشکر کنم:تشویق:

zhonos
یک شنبه 12 مرداد 1393, 11:53 صبح
من میخواستم یه لایبری برای همین پرداخت 4 تا مارکت درست کنم که وقتی روش کلیک شد یه دیالوگ بیاد بالا و مارکت را انتخاب کنی
مثل اینکه مایکت اگه مجوز بازار تو برنامت باشه قبول نمیکنه و بررسی نمیشه بازار هم که هیچ وقت برنامه را قبول نمیکنه ... بیخیال شدم

چرا اتفاقا کار میکنه. میشه در لحظۀ انتخاب مارکت از دیالوگ، اطلاعات مارکت رو توی SharedPreferences ذخیره کرد. بعد واسه اون serviceIntent و کلید عمومی میشه Switch Case گذاشت که SharedPreferences رو بخونه و هر مارکتی که انتخاب شده باز میشه.
اگه بخوای با مایکت خرید کنی و مجوز بازار هم توی مانیفست باشه، هیچ مشکلی پیش نمیاد و صفحه خرید مایکت باز میشه. برعکسشم همینطور. یعنی صفحه پرداخت بازار هم -با وجود مجوز مایکت توی مانیفست- همچنان کار میکنه و باز میشه.

البته آپلود نکردم که ببینم بازار یا مایکت وقتی ببینن مجوز یه مارکت رقیب توی برنامه ت هست، اکسپت میکنن یا نه!

tirozh
جمعه 17 مرداد 1393, 20:28 عصر
یه سوال . اگه با زامارین برنامه تحت اندروید بنویسیم میتونیم از این امکان خرید درون برنامه استفاده کنیم ؟لطفا کد شو بزارید .باتشکر

daniel021
یک شنبه 19 مرداد 1393, 12:03 عصر
من یه پروژه تریال دارم تمام فایلای پرداخت درون برنامه ای رو حالا چطوری روش عملی کنم؟ پروژه رو هم گذاشتم.. کداشو کامل کنید بذارید .. ممنون



دانلود سوروس (http://www.uplooder.net/cgi-bin/dl.cgi?key=8a3788c2dcd1536cdc68b68587b5f50f)

k12612
جمعه 07 شهریور 1393, 14:25 عصر
سلام
با تشکر از کار خوب شما
یه سوال داشتم :
بعد اینکه کد RSA رو به برنامه اضافه کردیم و محصول را ساختیم باید چی کار کرد؟ کد جدید رو باید دوباره آپلود کرد؟
لطفاً راهنمایی کنید.

esideli
شنبه 15 شهریور 1393, 06:10 صبح
سلام
اولین برنامم هست که می خوام توی بازار بزارم.
لطفا منو راهنمایی کنید.
من می خوام برنامم رو توی بازار بزارم.توی برنامم وقتی که کاربر عادی هست، کاربر به یه یک اکتیویتی مخصوص افراد عادی منتقل میشه که فقط دو دکمه توی اکتیوی کار می کنه و کاربر می تونه برنامه رو تست کنه و با زدن باقی دکمه ها ، از کاربر خواسسته می شه که برنامه رو به نسخه کامل ارتقا بده. وقتی هم که کاربر ویژه هست، کاربر به یه اکتیویتی که مخصوص کاربران وبژه هست منتقل میشه که شکلش با اکتیویتی کاربر عادی فرق آنچنانی نداره فقط تمام دکمه ها کار می کنه.
1_حالا سوال من اینجاست که وقتی می خوام از برنامم خروجی بگیرم و توی بازار آپلود کنم که بتونم براش محصول درون برنامه ای تعریف کنم، باید تعین کنم که برنامم به اکتیویتی کاربر ویژه بره یا کاربر عادی؟ یا کلا برای بازار فرقی نمی کنه و بعد از تکمیل برنامه اون رو تست میکنه و مجوز انتشار رو صادر می کنه؟
2_ وقتی که شناسه کالا و کلید عمومی رو به برنامم اضافه کردم باید دوباره از اون خروجی بگیرم و برای بازار بفرستم دیگه؟ اگه اینحوریه که فکر کنم هست ،برنامه رو از چه قسمتی باید برای بازار بفرستم که بفهمه نصخه اصلی هست؟

hamedjj
شنبه 15 شهریور 1393, 11:45 صبح
سلام
اولین برنامم هست که می خوام توی بازار بزارم.
لطفا منو راهنمایی کنید.
من می خوام برنامم رو توی بازار بزارم.توی برنامم وقتی که کاربر عادی هست، کاربر به یه یک اکتیویتی مخصوص افراد عادی منتقل میشه که فقط دو دکمه توی اکتیوی کار می کنه و کاربر می تونه برنامه رو تست کنه و با زدن باقی دکمه ها ، از کاربر خواسسته می شه که برنامه رو به نسخه کامل ارتقا بده. وقتی هم که کاربر ویژه هست، کاربر به یه اکتیویتی که مخصوص کاربران وبژه هست منتقل میشه که شکلش با اکتیویتی کاربر عادی فرق آنچنانی نداره فقط تمام دکمه ها کار می کنه.
1_حالا سوال من اینجاست که وقتی می خوام از برنامم خروجی بگیرم و توی بازار آپلود کنم که بتونم براش محصول درون برنامه ای تعریف کنم، باید تعین کنم که برنامم به اکتیویتی کاربر ویژه بره یا کاربر عادی؟ یا کلا برای بازار فرقی نمی کنه و بعد از تکمیل برنامه اون رو تست میکنه و مجوز انتشار رو صادر می کنه؟
2_ وقتی که شناسه کالا و کلید عمومی رو به برنامم اضافه کردم باید دوباره از اون خروجی بگیرم و برای بازار بفرستم دیگه؟ اگه اینحوریه که فکر کنم هست ،برنامه رو از چه قسمتی باید برای بازار بفرستم که بفهمه نصخه اصلی هست؟

1 - وقتی پروژه خام است و هیچ چیزی توش ننوشتی هم میتونی مجوز بازار را قرار بدی و در بازار آپلود کنی (پس فرقی نمیکنه)

2 - آره باید برنامه کامل را دوباره خروجی بگیری و برای بازار بفرستی

https://github.com/hamedjj/BazaarInAppBilling

esideli
سه شنبه 18 شهریور 1393, 10:35 صبح
1 - وقتی پروژه خام است و هیچ چیزی توش ننوشتی هم میتونی مجوز بازار را قرار بدی و در بازار آپلود کنی (پس فرقی نمیکنه)

2 - آره باید برنامه کامل را دوباره خروجی بگیری و برای بازار بفرستی

https://github.com/hamedjj/BazaarInAppBilling

حامد جان واقعا دستت درد نکنه.
با توجه به پروژه ای که توی گیت هاب گذاشتید برنامه رو تکمیل کردم و برای بازار فرستادم تا تایید کنه. در ضمن اینو برای افراد تازه کار بگم که تا ورژن برنامه رو بالا نبرین نمی تونین نسخه تکمیل شده رو آپلود کنین.

فقط یه سوال برام پیش اومده. موقع زدن دکمه کاربر ویژه روی شبیه ساز بعضی مواقع برنامه ارور میده و وقتی دکمه بَک رو میزنم برنامه بسته می شه ولی بعد از چند بار ارور دادن و خارج شدن از برنامه ، برنامه درست میشه و محصولم رو نشون میده!!!

esideli
سه شنبه 18 شهریور 1393, 12:44 عصر
1 - وقتی پروژه خام است و هیچ چیزی توش ننوشتی هم میتونی مجوز بازار را قرار بدی و در بازار آپلود کنی (پس فرقی نمیکنه) 2 - آره باید برنامه کامل را دوباره خروجی بگیری و برای بازار بفرستی https://github.com/hamedjj/BazaarInAppBilling

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

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

armin8651
سه شنبه 18 شهریور 1393, 20:07 عصر
برای تست کردن برنامه که ببینیم درست کار میکنه یا نه باید چی کار کنیم؟
هر بار که نمیشه برنامه رو خرید!

raha_jon
سه شنبه 18 شهریور 1393, 20:17 عصر
برای تست کردن برنامه که ببینیم درست کار میکنه یا نه باید چی کار کنیم؟
هر بار که نمیشه برنامه رو خرید!
یکبار بخری دیگه با اون حسابت وارد بشی می دونه دیگه خریده ای:لبخندساده:

armin8651
سه شنبه 18 شهریور 1393, 20:21 عصر
یکبار بخری دیگه با اون حسابت وارد بشی می دونه دیگه خریده ای:لبخندساده:

ممنون از جوابتون
الان بازار پیام داده که بعد از خرید برنامه Force close میده، من میخوام امتحان کنم و بعد مشکلش رو رفع کنم
یک باز که خریدم و خطا داد، برای دفعه های بعدی چی کار کنم که بتونم مراحل خرید رو از اول تا انتها تست کنم؟
ممنون

omid.n1990
سه شنبه 18 شهریور 1393, 22:31 عصر
خوب میتونید تغییر قیمت بدید و قیمت برنامه رو صد تومن بذارید و تست کنید! :)
تو تغییر قیمت محصولات درون برنامه ای هم سریع تغییر قیمت اعمال میشه و نیازی به تایید بازار برای تغییر قیمت نیست. البته چون تقریبا دو سوم پول دوباره برمیگرده به خودتون فکرنکنم موضوع مهمی باشه
این از بحث هزینه.
برای اینکه هم شما رو تشخیص نده که قبلا خریدید، راهی به ذهنم نمیرسه مگر اینکه با یک نام دیگه تو پنل بازار لاگین کنید، یا اینکه اسم محصول رو تغییر بدید!

pedram.11
چهارشنبه 19 شهریور 1393, 20:17 عصر
برای دریافت کد base64EncodedPublicKey باید اول برنامه بدون رجیستر رو آپلود کرد؟ بعدش چطور برنامه جدید رو دوباره قرار بدیم؟!

hamedjj
چهارشنبه 19 شهریور 1393, 23:04 عصر
برای دریافت کد base64EncodedPublicKey باید اول برنامه بدون رجیستر رو آپلود کرد؟ بعدش چطور برنامه جدید رو دوباره قرار بدیم؟!

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

pedram.11
چهارشنبه 19 شهریور 1393, 23:08 عصر
ممنون از جوابتون، ببخشید کد RC_REQUEST اصل کاریه دیگه نه؟ base64EncodedPublicKey مهمه؟

hamedjj
پنج شنبه 20 شهریور 1393, 18:45 عصر
ممنون از جوابتون، ببخشید کد RC_REQUEST اصل کاریه دیگه نه؟ base64EncodedPublicKey مهمه؟

1 - کدیه برای پیگیری پرداخت (تو کامنت انگلیسیش انطوری نوشته) ... یه عدد بزار
2 - توضیحات بازار را مطالعه کن :
(( پنل پرداخت بازار یک کلید عمومی در اختیار شما قرار می‌دهد که باید در برنامهٔ خود از آن استفاده کنید. این کلید برای هر برنامه منحصر به فرد است. ))

raha_jon
جمعه 21 شهریور 1393, 10:15 صبح
مستندات بازار را بخون

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



http://pardakht.cafebazaar.ir/static/doc/apps-fa.png



چطوری میشه از این کلید محافظت کرد؟؟؟؟

اگه از این کد محافظت نکنیم چه خطری تهدید می کنه؟
خواهشا راهنمایی کنید.

esmail3309
شنبه 29 شهریور 1393, 09:12 صبح
سلام دوستان

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

برنامم چهار قسمت کلی داره که توی هر قسمت تعدادی گزینه وجود داره که درون گزینه ها اطلاعات برنامه موجوده

خب من میخوام یک صفحه ی خرید با چهار گزینه به برنامم اذافه کنم که هر گزینه برای خرید یکی از بخش های برنامه باشه

آیا پروژه ای که به صورت رایگان (با پرداخت درون برنامه ای) در بازار قرار میدم باید کل فایل های برنامه رو داشته باشه ولی مثلا وقتی یک دکمه رو انتخاب میکنیم یک توست نشون بده و بعد از ارتقاع برنامه به جای توست به اکتیویتی مشخصی بره یا بعد از ارتقاع برنامه اطلاعات برنامه دانلود بشه؟

میتونید راهنماییم کنید؟

esmail3309
شنبه 29 شهریور 1393, 10:24 صبح
سلام دوستان

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

برنامم چهار قسمت کلی داره که توی هر قسمت تعدادی گزینه وجود داره که درون گزینه ها اطلاعات برنامه موجوده

خب من میخوام یک صفحه ی خرید با چهار گزینه به برنامم اذافه کنم که هر گزینه برای خرید یکی از بخش های برنامه باشه

آیا پروژه ای که به صورت رایگان (با پرداخت درون برنامه ای) در بازار قرار میدم باید کل فایل های برنامه رو داشته باشه ولی مثلا وقتی یک دکمه رو انتخاب میکنیم یک توست نشون بده و بعد از ارتقاع برنامه به جای توست به اکتیویتی مشخصی بره یا بعد از ارتقاع برنامه اطلاعات برنامه دانلود بشه؟

میتونید راهنماییم کنید؟

.........up

Amin-rz
سه شنبه 01 مهر 1393, 22:07 عصر
آقا من پرداخت درون برنامه ای رو تو برنامه اولم بدرستی اجرا کردم.
الان عین همون کارها رو برای 3 برنامه دیگه انجام دادم ولی کار نمیده.
این لینک (http://smsbaaz.ir/wp-content/uploads/2014/09/fblike.zip)یکی از برنامه هایی که ساختم لطفا تست کنید.
قیمت هم صفر گذاشتم.
از منوی سمت راست گزینه یکی به آخر مونده "افزایش لایک فیسبوک" رو بزنید تا وارد صفحه پرداخت بشید.

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


package com.example.smsbaaz;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.entity.BufferedHttpEntity;
import org.apache.http.impl.client.DefaultHttpClient;

import com.example.facebooklike.R;

import util.IabHelper;
import util.IabResult;
import util.Inventory;
import util.Purchase;

import android.app.ActionBar.LayoutParams;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundExce ption;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.View;
import android.view.View.MeasureSpec;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class UpdateActivity extends Activity {

int update = 0;
public ProgressDialog dialog ;
ImageButton btn1;
ImageButton btn2;
SharedPreferences sp;

//Debug tag, for logging
static final String TAG = "SmsBaaz";
//SKUs for our products: the premium upgrade (non-consumable)
static final String SKU_PREMIUM = "jhgiopjogyu2hu";
//Does the user have the premium upgrade?
boolean mIsPremium = false;
//(arbitrary) request code for the purchase flow
static final int RC_REQUEST = 10001;
//The helper object
IabHelper mHelper;



@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.update);



// show loading dialog with ProgressDialog
dialog = new ProgressDialog(this);
dialog.setCancelable(false);
dialog.setInverseBackgroundForced(false);





btn1 = (ImageButton) findViewById(R.id.button1);
btn1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

finish();
startActivity(new Intent(UpdateActivity.this,MainActivity.class));

}
});

btn2 = (ImageButton) findViewById(R.id.button2);


sp = PreferenceManager.getDefaultSharedPreferences(this );




if(!isPackageInstalled("com.farsitel.bazaar", UpdateActivity.this)){
Toast.makeText(getApplicationContext(),"نرم افزار بازار هنوز نصب نشده است",Toast.LENGTH_LONG).show();
}
else{
if(isNetworkConnected()){

dialog.setMessage("بررسی سبد خرید");
dialog.show();
String base64EncodedPublicKey = "MIHNMA0GCSqGSIb3DQEBAQUAA4G7ADCBtwKBrwC9eqtpO4UqFb umNBZsFtCM+knU+9kcFNGX3mgD87fojwiXlwvfk8SigLmCVnya hPwAgqBWTYZNwj7ae/B5ZlFft4JyYKIvi/PJPx5he6okOyLjy+wIYQ3/7sTpe3sqgqln266spL3MfOxa3xYVC038Ig04Cuy0rW6QFGnQFI riZCHEcb2bymWJCVy2YP5Omw1PrQRD6Z+R816p1DQn6b3mOQb2 ggCFDRL/PKmHfGcCAwEAAQ==";
// You can find it in your Bazaar console, in the Dealers section.
// It is recommended to add more security than just pasting it in your source code;
mHelper = new IabHelper(this, base64EncodedPublicKey);


Log.d(TAG, "Starting setup.");
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result) {
Log.d(TAG, "Setup finished.");

if (!result.isSuccess()) {
Toast.makeText(getApplicationContext(),"وارد اکانت حساب کاربری خود در بازار شوید."+"\n"+"یا اتصال به اینترنت را بررسی کنید.",Toast.LENGTH_LONG).show();

// 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) ;

}


});



}
}





}






//با آغاز اکتیویتی کد زیر اجرا میشود که برای جستجو premium بودن میباشد.
//اگر کاربر premium باشد دیالوگ loading مخفی میشه dialog.hide() متد UpdateUi() اجرا میشه و محتوای این متد را در باتن قرار میده.
//اگر کاربر premium نباشه هم منتظر لمس کردن کاربر بر روی دکمه میشه که متد onOnlineUpgradeAppButtonClicked را فراخوانی کند.
IabHelper.QueryInventoryFinishedListener 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);
dialog.hide();
Toast.makeText(getApplicationContext(),"خطا در ارتباط با سرور."+"\n"+"وارد اکانت حساب کاربری خود در بازار شوید."+"\n"+"یا اتصال به اینترنت را بررسی کنید.",Toast.LENGTH_LONG).show();
return;
}
else {



Log.d(TAG, "Query inventory was successful.");
// does the user have the premium upgrade?
mIsPremium = inventory.hasPurchase(SKU_PREMIUM);

// update UI accordingly

Log.d(TAG, "User is " + (mIsPremium ? "PREMIUM" : "NOT PREMIUM"));
}
dialog.hide();
updateUi();
Log.d(TAG, "Initial inventory query finished; enabling main UI.");

}

};



@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.");
}

}

boolean verifyDeveloperPayload(Purchase p) {
String payload = p.getDeveloperPayload();

return true;
}

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
Log.d(TAG, "Purchase finished: " + result + ", purchase: " + purchase);
if (result.isFailure()) {
Toast.makeText(getApplicationContext(),"وارد اکانت حساب کاربری خود در بازار شوید."+"\n"+"یا اتصال به اینترنت را بررسی کنید.",Toast.LENGTH_LONG).show();
Log.d(TAG, "Error purchasing: " + result);
return;
}
if (!verifyDeveloperPayload(purchase)) {
Toast.makeText(getApplicationContext(),"وارد اکانت حساب کاربری خود در بازار شوید."+"\n"+"یا اتصال به اینترنت را بررسی کنید.",Toast.LENGTH_LONG).show();
complain("Error purchasing. Authenticity verification failed.");
return;
}

Log.d(TAG, "Purchase successful.");

if (purchase.getSku().equals(SKU_PREMIUM)) {
Log.d(TAG, "Purchase is premium upgrade. Congratulating user.");
mIsPremium = true;
updateUi();
Toast.makeText(getApplicationContext(),"با تشکر از خرید شما",Toast.LENGTH_LONG).show();


}
}
};

@Override
public void onDestroy() {
super.onDestroy();

Log.d(TAG, "Destroying helper.");
if (mHelper != null) mHelper.dispose();
mHelper = null;
}



// اگر کاربر پریمیوم باشد دستورات آپدیت را انجام میدهد در غیر اینصورت به صفحه خرید هدایت می شود.
public void updateUi() {

if (mIsPremium) {

update = 224;

Editor e = sp.edit();
e.putInt("update", 224);
e.commit();

Toast.makeText(getApplicationContext(),"شما کاربر ویژه هستید",Toast.LENGTH_LONG).show();


}

else
{

Toast.makeText(getApplicationContext(),"نرم افزار خریداری نشده است",Toast.LENGTH_LONG).show();

}
}






void complain(String message) {
Log.e(TAG, "**** testbilling Error: " + message);
}





private boolean isNetworkConnected() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni == null) {
Toast.makeText(getApplicationContext(), "اتصال به اینترنت برقرار نیست", Toast.LENGTH_LONG).show();
return false;
} else
return true;
}

public static boolean isPackageInstalled(String packagename,Context context) {
PackageManager pm = context.getPackageManager();
try {
pm.getPackageInfo(packagename, PackageManager.GET_ACTIVITIES);
return true;}
catch (NameNotFoundException e) {
return false;}
}

public void onOnlineUpgradeAppButtonClicked(View arg0) {



if(!isPackageInstalled("com.farsitel.bazaar", UpdateActivity.this)){
Toast.makeText(getApplicationContext(),"نرم افزار بازار هنوز نصب نشده است",Toast.LENGTH_LONG).show();
}
else{
if(isNetworkConnected()){


Log.d(TAG, "Upgrade button clicked; launching purchase flow for upgrade.");

/* TODO: for security, generate your payload here for verification. See the comments on
* verifyDeveloperPayload() for more info. Since this is a SAMPLE, we just use
* an empty string, but on a production app you should carefully generate this. */
String payload = "inbarnametavasotehamedjjsakhteshodeast";

mHelper.launchPurchaseFlow(UpdateActivity.this, SKU_PREMIUM, RC_REQUEST,
mPurchaseFinishedListener, payload);



}
}


}





private static long back_pressed = 0L;
@Override
public void onBackPressed()
{
finish();
startActivity(new Intent(UpdateActivity.this,MainActivity.class));
}






}

Amin-rz
چهارشنبه 02 مهر 1393, 14:18 عصر
يه نفر تست كنه لطفا..

Amin-rz
پنج شنبه 03 مهر 1393, 08:50 صبح
مشکل حل شد.کلید عمومی نرم افزار رو مطابق با اونچه بازار تو پنلم داده بود عوض نکرده بودم.
در واقع کلید عمومی نرم افزار قبلیم رو تو این نرم افزار استفاده کردم که خطا میداد.

Fameli
یک شنبه 06 مهر 1393, 22:50 عصر
با سلام و تشکر، چرا همه لینک ها "قسمت 1 از 3" می باشد؟!

daniel021
دوشنبه 07 مهر 1393, 19:00 عصر
دانلود سورس سالم پرداخت درون برنامه ای برای همه ی API ها
:شیطان:
دریافت سورس (http://p30droid.com/Uploader/do.php?id=418):کف:

ali_fattahi
دوشنبه 14 مهر 1393, 12:57 عصر
میتونید از سیستم پرداخت درون برنامه ای همراه پی هم استفاده کنید
http://hamrahpay.com

mehdiyamani
چهارشنبه 16 مهر 1393, 16:49 عصر
سلام دوسنان من یک مشکلی دارم . تمام کدها رو پیاده سازی کردم . وقتی میزنم خرید ، میره بازار رو باز میکنه ولی ارور 404 یافت نشد میده . دلیل چنین اروری چی میتونه باشه ؟
مقدار این رشته باید چی یباشه ؟ static final String SKU_PREMIUM
من برای این رشته ، "شناسهٔ کالا" که در بازار ایجاد کردم رو گذاشتم . مثلا gold

کد RSA هم گذاشتم در base64EncodedPublicKey

راستی ، برنامم هنوز تایید نشده . آیا این میتونه دلیلش باشه ؟
ممنون میشم راهنمایی کنید با تشکر

mehdiyamani
سه شنبه 22 مهر 1393, 14:28 عصر
دوستان من همچنان مشکلی که در پست قبلی یرو گفتم رو دارم . کسی نمیدونه مشکل از چی میتونه باشه ؟ ممنون میشم راهنمایی کنید

mehdiyamani
چهارشنبه 23 مهر 1393, 06:49 صبح
سلام دوستان
دوستان کسی پرداخت درون برنامه ای پیاده سازی کرده که بعد از خرید کاربر ، اون خرید مصرف بشه و اگه کاربر دوباره خواست بخره ؟ در مثال TrivialDrive چنین چیزی هست ولی من تست میکنم اشکال داره . ارور زیر رو میده :
Consumption finished. Purchase: PurchaseInfo(type:subs):{"orderId": "-vmhoD_kwxMs6Ksb", "purchaseToken": "-vmhoD_kwxMs6Ksb", "developerPayload": "", "packageName": "com.example.package", "purchaseState": 0, "purchaseTime": 1413292833534, "productId": "goldvip1"}, result: IabResult: Items of type 'subs' can't be consumed. (response: -1010:Invalid consumption attempt)
نمیدونم مشکلش چی هست . ممنون میشم اگه کسی چنین کدی داره بهم بده
با تشکر فراوان

zikimiki
یک شنبه 27 مهر 1393, 22:05 عصر
با سلام و خسته نباشید.
متاسفانه بنده نتونستم پروؤه اصلاح شده دوستم عزیزمون hamedjj (http://barnamenevis.org/member.php?290105-hamedjj) رو دانلود کنم اصلا سایت https://github.com/hamedjj/BazaarInAppBilling برام باز نمی شه؟ :|

کسی از دوستان می تونه پروژه تکمیل شده ایشون رو برام در یک جای دیگه آپلود کنه؟

hamedjj
یک شنبه 27 مهر 1393, 22:52 عصر
با سلام و خسته نباشید.
متاسفانه بنده نتونستم پروؤه اصلاح شده دوستم عزیزمون hamedjj (http://barnamenevis.org/member.php?290105-hamedjj) رو دانلود کنم اصلا سایت https://github.com/hamedjj/BazaarInAppBilling برام باز نمی شه؟ :|

کسی از دوستان می تونه پروژه تکمیل شده ایشون رو برام در یک جای دیگه آپلود کنه؟

http://uplod.ir/fjeb73o4eaen/BazaarInAppBilling-master.zip.htm

Amin-rz
یک شنبه 27 مهر 1393, 22:58 عصر
پست شماره 209 همين بالا ↑

saeed_g21
یک شنبه 27 مهر 1393, 23:08 عصر
http://uplod.ir/fjeb73o4eaen/BazaarInAppBilling-master.zip.htm
این که همه گزینه هاش خطا میده !؟

hamedjj
دوشنبه 28 مهر 1393, 13:56 عصر
این که همه گزینه هاش خطا میده !؟

برای من که خیلی شیک و مجلسی run میشه :لبخند::لبخند::لبخند::لبخند:: بخند:

چطوری ایمپورت کردی؟
همون فایل rar را ایمپورت کن و یه کپی تو پوشه پروژه های خودتم قرار بده

saeed_g21
دوشنبه 28 مهر 1393, 15:11 عصر
در Import مشکلی ندارم موقع Run روی ماشین واقعی هر باتنی که میزنم میندازه بیرون و خطای زیر رو میده

10-20 15:41:48.743: E/AndroidRuntime(10460): FATAL EXCEPTION: main10-20 15:41:48.743: E/AndroidRuntime(10460): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hamedjj.bazaarinappbilling/com.hamedjj.bazaarinappbilling.OnlinePremium}: java.lang.IllegalStateException: IAB helper is not set up. Can't perform operation: queryInventory
10-20 15:41:48.743: E/AndroidRuntime(10460): at android.app.ActivityThread.performLaunchActivity(A ctivityThread.java:2059)
10-20 15:41:48.743: E/AndroidRuntime(10460): at android.app.ActivityThread.handleLaunchActivity(Ac tivityThread.java:2084)
10-20 15:41:48.743: E/AndroidRuntime(10460): at android.app.ActivityThread.access$600(ActivityThre ad.java:130)
10-20 15:41:48.743: E/AndroidRuntime(10460): at android.app.ActivityThread$H.handleMessage(Activit yThread.java:1195)
10-20 15:41:48.743: E/AndroidRuntime(10460): at android.os.Handler.dispatchMessage(Handler.java:99 )
10-20 15:41:48.743: E/AndroidRuntime(10460): at android.os.Looper.loop(Looper.java:137)
10-20 15:41:48.743: E/AndroidRuntime(10460): at android.app.ActivityThread.main(ActivityThread.jav a:4745)
10-20 15:41:48.743: E/AndroidRuntime(10460): at java.lang.reflect.Method.invokeNative(Native Method)
10-20 15:41:48.743: E/AndroidRuntime(10460): at java.lang.reflect.Method.invoke(Method.java:511)
10-20 15:41:48.743: E/AndroidRuntime(10460): at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:786)
10-20 15:41:48.743: E/AndroidRuntime(10460): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:553)
10-20 15:41:48.743: E/AndroidRuntime(10460): at dalvik.system.NativeStart.main(Native Method)
10-20 15:41:48.743: E/AndroidRuntime(10460): Caused by: java.lang.IllegalStateException: IAB helper is not set up. Can't perform operation: queryInventory
10-20 15:41:48.743: E/AndroidRuntime(10460): at com.hamedjj.bazaarinappbilling.util.IabHelper.chec kSetupDone(IabHelper.java:756)
10-20 15:41:48.743: E/AndroidRuntime(10460): at com.hamedjj.bazaarinappbilling.util.IabHelper.quer yInventoryAsync(IabHelper.java:589)
10-20 15:41:48.743: E/AndroidRuntime(10460): at com.hamedjj.bazaarinappbilling.util.IabHelper.quer yInventoryAsync(IabHelper.java:616)
10-20 15:41:48.743: E/AndroidRuntime(10460): at com.hamedjj.bazaarinappbilling.OnlinePremium$3.onI abSetupFinished(OnlinePremium.java:71)
10-20 15:41:48.743: E/AndroidRuntime(10460): at com.hamedjj.bazaarinappbilling.util.IabHelper.star tSetup(IabHelper.java:267)
10-20 15:41:48.743: E/AndroidRuntime(10460): at com.hamedjj.bazaarinappbilling.OnlinePremium.onCre ate(OnlinePremium.java:62)
10-20 15:41:48.743: E/AndroidRuntime(10460): at android.app.Activity.performCreate(Activity.java:5 008)
10-20 15:41:48.743: E/AndroidRuntime(10460): at android.app.Instrumentation.callActivityOnCreate(I nstrumentation.java:1079)
10-20 15:41:48.743: E/AndroidRuntime(10460): at android.app.ActivityThread.performLaunchActivity(A ctivityThread.java:2023)
10-20 15:41:48.743: E/AndroidRuntime(10460): ... 11 more







-------------------------------------------------------------------------------------------------------
مورد حل شد

کافه بازار رو نصب کردم خطا رفع شد

و همچنین تشکر ویژه دارم از دوست عزیز esmail3309 که با صبر و شکیبایی به سوالاتم جواب داد

hosseinaryai
شنبه 03 آبان 1393, 03:15 صبح
من تمام پست های اینجا رو خوندم اما باز نتونستم به جواب خودم برسم ..
سوالم اینه ، اگه بخوام توی برنامه ام (بازی)مثلن انرژی بخرم .. اینجوری که من فهمیدم اگه توی بازار با این دهایی که دوستان نوشتن بخوام این عملیاتو پیاده سازی کنم قط یکبار می تونم بخرم و بازار برای بار بعدی میگه یبار خریداری شده .. اینو چطور باید برطرف کنم ؟

hamedjj
شنبه 03 آبان 1393, 11:31 صبح
من تمام پست های اینجا رو خوندم اما باز نتونستم به جواب خودم برسم ..
سوالم اینه ، اگه بخوام توی برنامه ام (بازی)مثلن انرژی بخرم .. اینجوری که من فهمیدم اگه توی بازار با این دهایی که دوستان نوشتن بخوام این عملیاتو پیاده سازی کنم قط یکبار می تونم بخرم و بازار برای بار بعدی میگه یبار خریداری شده .. اینو چطور باید برطرف کنم ؟

باید api محصولات مصرف را پیاده سازی کنید که متاسفانه این آموزش هنوز در پست قرار داده نشده است
از مستندات بازار استفاده کنید

hamed63
چهارشنبه 07 آبان 1393, 11:32 صبح
سلام دوستان
کسی میتونه بگه چجوری می تونم خرید داخل برنامه رو قبل از اینکه برنامه رو پابلیش کنم تست کنم. من برنامه رو تو بازار آپلود کردم، محصولات هم تعریف کردم ولی نمی تونم از طریق QR دانلودش کنم تا تستش کنم ببینم کار میکنه یا نه، میگه این برنامه تو بازار وجود نداره. اگه پابلیش کنم که همه می بیننش!!!
خیلی ممنون

diapason
چهارشنبه 07 آبان 1393, 12:24 عصر
سلام. آیا می‌شود برای برنامۀ غیررایگان که قبلاً منتشر شده، هم پرداخت درون‌برنامه‌ای اضافه کرد؟ برای مثال محصولی فروخته شود، اما پس از آن برای قابلیتی مجزا، نیاز به پرداخت درون برنامه‌ای باشد.

Amin-rz
چهارشنبه 07 آبان 1393, 13:37 عصر
سلام دوستان
کسی میتونه بگه چجوری می تونم خرید داخل برنامه رو قبل از اینکه برنامه رو پابلیش کنم تست کنم. من برنامه رو تو بازار آپلود کردم، محصولات هم تعریف کردم ولی نمی تونم از طریق QR دانلودش کنم تا تستش کنم ببینم کار میکنه یا نه، میگه این برنامه تو بازار وجود نداره. اگه پابلیش کنم که همه می بیننش!!!
خیلی ممنون
مگه برنامه رو خودت آپلود نکردی؟خب همونی که از کامپیوترت آپلود کردی رو تست کن. چه فرقی داره با اونی که تو بازار گذاشتی :دی


سلام. آیا می‌شود برای برنامۀ غیررایگان که قبلاً منتشر شده، هم پرداخت درون‌برنامه‌ای اضافه کرد؟ برای مثال محصولی فروخته شود، اما پس از آن برای قابلیتی مجزا، نیاز به پرداخت درون برنامه‌ای باشد.

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

diapason
چهارشنبه 07 آبان 1393, 13:43 عصر
اگه برای قابلیت های جدید که قبلا نبوده نیاز به پول باشه که فکر نکنم بازار کاری داشته باشه.مگه اینکه سیستم پنل نذاره آپلود کنی.
به بازار ایمیل بده بپرس.

ممنون از شما. از بازار سوال می‌کنم. نتیجه رو اعلام می‌کنم.

diapason
شنبه 10 آبان 1393, 08:23 صبح
در رابطه با پست 227 خودم. جهت اطلاع دستان عزیز، پاسخ بازار به این شرح بود که:


... برای اضافه کردن پرداخت درون‌برنامه‌ای در نسخهٔ غیررایگان مشکلی وجود ندارد. اما همیشه چنین شرایطی برای ما قابل قبول نیست و نیاز به بررسی برنامه دارد.

واقعاً عملکرد عالی و پاسخگویی سریع بازار، جای تقدیر داره.

javdanmj
شنبه 17 آبان 1393, 14:18 عصر
سلام دوستان
دوستان کسی پرداخت درون برنامه ای پیاده سازی کرده که بعد از خرید کاربر ، اون خرید مصرف بشه و اگه کاربر دوباره خواست بخره ؟ در مثال TrivialDrive چنین چیزی هست ولی من تست میکنم اشکال داره . ارور زیر رو میده :
Consumption finished. Purchase: PurchaseInfo(type:subs):{"orderId": "-vmhoD_kwxMs6Ksb", "purchaseToken": "-vmhoD_kwxMs6Ksb", "developerPayload": "", "packageName": "com.example.package", "purchaseState": 0, "purchaseTime": 1413292833534, "productId": "goldvip1"}, result: IabResult: Items of type 'subs' can't be consumed. (response: -1010:Invalid consumption attempt)
نمیدونم مشکلش چی هست . ممنون میشم اگه کسی چنین کدی داره بهم بده
با تشکر فراوان

سلام،من اینجوری درستش کردم
برو تو کلاس IabHelper
توی متد consume
اینا رو پاک کن

if (!itemInfo.mItemType.equals(ITEM_TYPE_INAPP)) {
throw new IabException(IABHELPER_INVALID_CONSUMPTION,
"Items of type '" + itemInfo.mItemType + "' can't be consumed.");
}

dalmif
شنبه 17 آبان 1393, 15:42 عصر
سلام دوستان.
ببخشید من هم این تایپیک رو خودندم.
اما جای سوال هست برام که حالا یارو باید پریمیوم بشه؟
نمیشه مثل بازی های آفتابه و امثالش یه گزینه باشه که وقتی بزنی برات سکه بخره؟
اگه میشه لطفا بگید اسمش چیه و از کجا می تونم آموزشاش رو پیدا کنم.
از سورس آقای daniel021 (http://barnamenevis.org/member.php?329098-daniel021)
استفاده کردم و واقعا خیلی عالی بود و کار کرد.
فقط مشکلم باهاش اینه که من نمی خوام با هر بار ورود کاربر به نرم افزار، نرم افزار به بازار وصل شه و چک کنه بلکه می خوام مثل همون خرید سکه درست کنم برای بازی و برنامه های خودم
توررو خدا یکی کمکم کنه.
ممنون از اساتید

hamedjj
شنبه 17 آبان 1393, 18:35 عصر
سلام دوستان.
ببخشید من هم این تایپیک رو خودندم.
اما جای سوال هست برام که حالا یارو باید پریمیوم بشه؟
نمیشه مثل بازی های آفتابه و امثالش یه گزینه باشه که وقتی بزنی برات سکه بخره؟
اگه میشه لطفا بگید اسمش چیه و از کجا می تونم آموزشاش رو پیدا کنم.
از سورس آقای daniel021 (http://barnamenevis.org/member.php?329098-daniel021)
استفاده کردم و واقعا خیلی عالی بود و کار کرد.
فقط مشکلم باهاش اینه که من نمی خوام با هر بار ورود کاربر به نرم افزار، نرم افزار به بازار وصل شه و چک کنه بلکه می خوام مثل همون خرید سکه درست کنم برای بازی و برنامه های خودم
توررو خدا یکی کمکم کنه.
ممنون از اساتید


اگر تاپیک را کامل مطالعه کرده بودید این سوال را نمی پرسیدید
به بخش محصولات مصرفی مراجعه کنید:
http://pardakht.cafebazaar.ir/doc/?l=fa

dalmif
شنبه 17 آبان 1393, 19:13 عصر
سلام حامد جان.
خیلی ممنونم که جواب دادید.
اما من این صفحه ها رو مطالعه کردم که لینک دادید.
منظور من رو شما متوجه نشدید.
میگم که من یه برنامه دارم که می خوام توش سکه بفروشم اما بلد نیستم.
حالا شما دیدم که ارتقا به کاربر ویژه رو قرار دادید.
من هم درخواست دارم تا اینکه شما کدی برای خرید سکه بگذارید.
البته من فکرم اینه که میشه همین کد رو تغییر داد تا بعد از خرید به دیتابیس سکه اضافه کنه و برای دفعه بعد به بازار نره تا چک کنه
اما چون توی جاوا تازه کارم نمی دونم باس کدوم کد ها رو تغییر بدم.
اگه شما بگید ممنون میشم

hamedjj
شنبه 17 آبان 1393, 23:35 عصر
سلام حامد جان.
خیلی ممنونم که جواب دادید.
اما من این صفحه ها رو مطالعه کردم که لینک دادید.
منظور من رو شما متوجه نشدید.
میگم که من یه برنامه دارم که می خوام توش سکه بفروشم اما بلد نیستم.
حالا شما دیدم که ارتقا به کاربر ویژه رو قرار دادید.
من هم درخواست دارم تا اینکه شما کدی برای خرید سکه بگذارید.
البته من فکرم اینه که میشه همین کد رو تغییر داد تا بعد از خرید به دیتابیس سکه اضافه کنه و برای دفعه بعد به بازار نره تا چک کنه
اما چون توی جاوا تازه کارم نمی دونم باس کدوم کد ها رو تغییر بدم.
اگه شما بگید ممنون میشم

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

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

موفق باشی

saeid222
دوشنبه 03 آذر 1393, 17:39 عصر
با سلام
من پرداخت درون برنامه ای رو به برنامم اضافه کرده ام . ولی نمیدونم کجا باید متدی که دیتا ها را برای یوزر آپدیت میکنه بنویسم .
1- اگه خرید موفقیت امیز بود کجا میشه ؟
2- اگه قبلا خریده بود کجا میشه ؟

ممنون راهنمایی کنید

Amin-rz
دوشنبه 03 آذر 1393, 20:02 عصر
با سلام
من پرداخت درون برنامه ای رو به برنامم اضافه کرده ام . ولی نمیدونم کجا باید متدی که دیتا ها را برای یوزر آپدیت میکنه بنویسم .
1- اگه خرید موفقیت امیز بود کجا میشه ؟
2- اگه قبلا خریده بود کجا میشه ؟

ممنون راهنمایی کنید

تو اکتیویتی خرید , تابع updateUi() رو پیدا کن و به این نمونه توجه کن:

public void updateUi() {

if (mIsPremium) {

"اگر کاربر ویژه باشه این کد ها اجرا بشه"
}

else
{

"اگر کاربر ویژه نباشه این کد ها اجرا بشه"

}
}

saeid222
دوشنبه 03 آذر 1393, 20:41 عصر
گفتم اگه کاربر Premium بود دیتاهای اضافی توی دیتابیس ریخته بشه . اینجا


if (mIsPremium) {
"اگر کاربر ویژه باشه این کد ها اجرا بشه"
}



بعد کد مربوط به payload رو تغییر دادم تا با اون چیزی که خریدم فرق داشته باشه .
حالا کلا میگه کاربر premium است !!!!
کجا رو میشه اشتباه کرده باشم .
تا دکمه خرید رو میزنم یه لحظه بازار باز میشه و مینویسه انجام شد)

<ویرایش>
این کد توی متد onCreate اجرا میشه :

IabHelper.QueryInventoryFinishedListener
توی این متد بود که گفت کاربر premium است

mIsPremium = inventory.hasPurchase(SKU_PREMIUM);
و مقدار true ریخته میشه توی mIsPremium

saeid222
پنج شنبه 06 آذر 1393, 11:18 صبح
دوستان کسی در مورد پرداخت درون برنامه ای نمیتونخ کمک کنه ؟
کاملا گیج شدم م :گیج::افسرده:م م م

hamedg1366
یک شنبه 09 آذر 1393, 11:21 صبح
با سلام خدمت همه دوستان مخصوصا آقا حامد گل که خیلی زحمت میکشن

دوستان من با کمک برنامه حامد یه پرداخت درون برنامه ای درست کردم امتحانشم کردم ، رفت صفحه درون پرداخت رو باز کرد و خرید انجام شد و برگشت به برنامه و پیغام "KHARID" رو هم نشون داد فقط چون کد ها رو کپی کردم و چیزی ازشون سر نمیارم نمیدونم که آیا درست انجام دادم یا نه

کد ها رو میذارم لطفا یه چک بکنید و همچنین در صورت امکان جاهائی که توضیح خواستم در حد چند کلمه بگین چی کار میکنن

سوالات :
1- قسمت تعاریف میباشد

2- چیه و چرا ؟

3-چک میکنه که آیا کاربر VIP هی یا نه

3_A نمیدونم

3_B با کلیک بر روی دکمه به صفحه پرداخت درون برنامه ای میرود

3_C نمیدونم

3_D نمیدونم

1_4 نمیدونم

2_4 نمیدونم

3_4 بعد از پرداخت این تابع فراخانی میشود


public class Begin extends Activity {


private Button btn_free;
private Button btn_bronzi;

/////// 1
static final String TAG = "Kharid_daron Barnamei";
static final String SKU_PREMIUM = "bronzi";
boolean mIsPremium = false;
static final int RC_REQUEST = 10001 ;
IabHelper mHelper;
//////////////////////// end 1

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.begin);

btn_bronzi = (Button) findViewById(R.id.btn_bronzi);


////////// 2
String base64EncodedPublicKey = "MIHNMA0GCSqGSIb3DQEBAQUAA4G7ADCBtwKBrwDX7ntTlHQys2 zu7liNpiNo9RyPY1Q8/UEAtmAw8KnoPQir7qgaQhY15n1osaenZeLD2GWRquzrQ5ub2lG NwoOIpOoIMkzQcVuZt/sSOlY6a1PQkEFElLtbOyQcweSkIwy4PDJ4FlFuE1jBqKPKY7UT adnDNym0xck1s5PbkxsmrhGkNKTyCnJLsXTgs5D2X9Ic3XbmWN k/DwhVEUFKzgw5/CnwnD5iiACuRG7z9r0CAwEAAQ==";

mHelper = new IabHelper(this, base64EncodedPublicKey);
Log.d(TAG, "Starting setup.");
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result) {
Log.d(TAG, "Setup finished.");
if (!result.isSuccess()) {
Log.d(TAG, "Problem setting up In-app Billing: " + result);
}
mHelper.queryInventoryAsync(mGotInventoryListener) ;
}
});
}
////////////////////////end 2


//////////////////////3

/////3_A baraye inke bedonim karbar az aval vip has ya na
IabHelper.QueryInventoryFinishedListener 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.");
mIsPremium = inventory.hasPurchase(SKU_PREMIUM);

Log.d(TAG, "User is " + (mIsPremium ? "PREMIUM" : "NOT PREMIUM"));
}

Log.d(TAG, "Initial inventory query finished; enabling main UI.");
}

};
////End 3_A

////3_B ba click bar roye dokme etefagh miyoftad

public void onOnlineUpgradeAppButtonClickedbronzi(View arg0) {
Log.d(TAG, "Upgrade button clicked; launching purchase flow for upgrade.");
String payload = "inbarnametavasotehamedjjsakhteshodeast";
mHelper.launchPurchaseFlow(this, SKU_PREMIUM, RC_REQUEST,
mPurchaseFinishedListener, payload);
}

/////end 3_B

///// 3_C bayad hamontory bashad
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "onActivityResult(" + requestCode + "," + resultCode + "," + data);
if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {
super.onActivityResult(requestCode, resultCode, data);
} else {
Log.d(TAG, "onActivityResult handled by IABUtil.");
}

}
////end 3_C

//////3_D

boolean verifyDeveloperPayload(Purchase p) {
String payload = p.getDeveloperPayload();
return true;
}
////////

////////////////////////////////////////end 3

//////4_1
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
Log.d(TAG, "Purchase finished: " + result + ", purchase: " + purchase);
if (result.isFailure()) {
Log.d(TAG, "Error purchasing: " + result);
return;
}
if (!verifyDeveloperPayload(purchase)) {

return;
}

Log.d(TAG, "Purchase successful.");

if (purchase.getSku().equals(SKU_PREMIUM)) {
Log.d(TAG, "Purchase is premium upgrade. Congratulating user.");
mIsPremium = true;
updateUi();

}
}
};
//////////////////end 4_1

//////4_2

@Override
public void onDestroy() {
super.onDestroy();

Log.d(TAG, "Destroying helper.");
if (mHelper != null) mHelper.dispose();
mHelper = null;
}
//////end 4_2

//////4_3
public void updateUi() {

if (mIsPremium) {

Toast.makeText(getApplicationContext(), "KHARID", Toast.LENGTH_SHORT).show();
}

}

/////////end 4_3
/////end 4

}

hamedg1366
یک شنبه 09 آذر 1393, 11:31 صبح
و برای اینکه کاربر بتونه N بار از یک محصول خرید کنه چیکار باید بکنیم ،؟

(محصول نه VIP بودن کاربر باشه ، نه یک محصول مصرفی)

hamedg1366
یک شنبه 09 آذر 1393, 17:24 عصر
UP...


(با عرض معذرت)

hamedg1366
یک شنبه 09 آذر 1393, 17:27 عصر
برای سوال دومم این رو پیدا کردم که مدیر محترم بخش اندروید قرار دادن ، حالا چطور این رو پیاده سازیش کنم !



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

mHelper.consumeAsync(purchase, mConsumeFinishedListener);

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

IabHelper.OnConsumeFinishedListener mConsumeFinishedListener = new IabHelper.OnConsumeFinishedListener() {
public void onConsumeFinished(Purchase purchase, IabResult result) {
Log.d(TAG, "Consumption finished. Purchase: " + purchase + ", result: " + result);
if (mHelper == null) return;
if (result.isSuccess()) {
Log.d(TAG, "Consumption successful. Provisioning.");
}
else {
complain("Error while consuming: " + result);
}
setWaitScreen(false);
Log.d(TAG, "End consumption flow.");
}
};

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

hamedg1366
یک شنبه 09 آذر 1393, 20:26 عصر
دوستان عزیز با کمک کدی که آقای rubiks.kde (مدیر محترم) قرار داده بودن تونستم به تعداد نامتناهی خرید از یک محصول رو پیاده سازی کنم فقط لطفا بو مورد زیر یه نظر بدین ممنونم از همتون






با سلام خدمت همه دوستان مخصوصا آقا حامد گل که خیلی زحمت میکشن

دوستان من با کمک برنامه حامد یه پرداخت درون برنامه ای درست کردم امتحانشم کردم ، رفت صفحه درون پرداخت رو باز کرد و خرید انجام شد و برگشت به برنامه و پیغام "KHARID" رو هم نشون داد فقط چون کد ها رو کپی کردم و چیزی ازشون سر نمیارم نمیدونم که آیا درست انجام دادم یا نه

کد ها رو میذارم لطفا یه چک بکنید و همچنین در صورت امکان جاهائی که توضیح خواستم در حد چند کلمه بگین چی کار میکنن

سوالات :

1- قسمت تعاریف میباشد

2- چیه و چرا ؟

3-چک میکنه که آیا کاربر VIP هی یا نه

3_A نمیدونم (چیه و چرا ؟)

3_B با کلیک بر روی دکمه به صفحه پرداخت درون برنامه ای میرود

3_C نمیدونم (چیه و چرا ؟)

3_D نمیدونم (چیه و چرا ؟)

1_4 نمیدونم (چیه و چرا ؟)

2_4 نمیدونم (چیه و چرا ؟)

3_4 بعد از پرداخت این تابع فراخانی میشود


public class Begin extends Activity {


private Button btn_free;
private Button btn_bronzi;

/////// 1
static final String TAG = "Kharid_daron Barnamei";
static final String SKU_PREMIUM = "bronzi";
boolean mIsPremium = false;
static final int RC_REQUEST = 10001 ;
IabHelper mHelper;
//////////////////////// end 1

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.begin);

btn_bronzi = (Button) findViewById(R.id.btn_bronzi);


////////// 2
String base64EncodedPublicKey = "MIHNMA0GCSqGSIb3DQEBAQUAA4G7ADCBtwKBrwDX7ntTlHQys2 zu7liNpiNo9RyPY1Q8/UEAtmAw8KnoPQir7qgaQhY15n1osaenZeLD2GWRquzrQ5ub2lG NwoOIpOoIMkzQcVuZt/sSOlY6a1PQkEFElLtbOyQcweSkIwy4PDJ4FlFuE1jBqKPKY7UT adnDNym0xck1s5PbkxsmrhGkNKTyCnJLsXTgs5D2X9Ic3XbmWN k/DwhVEUFKzgw5/CnwnD5iiACuRG7z9r0CAwEAAQ==";

mHelper = new IabHelper(this, base64EncodedPublicKey);
Log.d(TAG, "Starting setup.");
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result) {
Log.d(TAG, "Setup finished.");
if (!result.isSuccess()) {
Log.d(TAG, "Problem setting up In-app Billing: " + result);
}
mHelper.queryInventoryAsync(mGotInventoryListener) ;
}
});
}
////////////////////////end 2


//////////////////////3

/////3_A baraye inke bedonim karbar az aval vip has ya na
IabHelper.QueryInventoryFinishedListener 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.");
mIsPremium = inventory.hasPurchase(SKU_PREMIUM);

Log.d(TAG, "User is " + (mIsPremium ? "PREMIUM" : "NOT PREMIUM"));
}

Log.d(TAG, "Initial inventory query finished; enabling main UI.");
}

};
////End 3_A

////3_B ba click bar roye dokme etefagh miyoftad

public void onOnlineUpgradeAppButtonClickedbronzi(View arg0) {
Log.d(TAG, "Upgrade button clicked; launching purchase flow for upgrade.");
String payload = "inbarnametavasotehamedjjsakhteshodeast";
mHelper.launchPurchaseFlow(this, SKU_PREMIUM, RC_REQUEST,
mPurchaseFinishedListener, payload);
}

/////end 3_B

///// 3_C bayad hamontory bashad
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "onActivityResult(" + requestCode + "," + resultCode + "," + data);
if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {
super.onActivityResult(requestCode, resultCode, data);
} else {
Log.d(TAG, "onActivityResult handled by IABUtil.");
}

}
////end 3_C

//////3_D

boolean verifyDeveloperPayload(Purchase p) {
String payload = p.getDeveloperPayload();
return true;
}
////////

////////////////////////////////////////end 3

//////4_1
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
Log.d(TAG, "Purchase finished: " + result + ", purchase: " + purchase);
if (result.isFailure()) {
Log.d(TAG, "Error purchasing: " + result);
return;
}
if (!verifyDeveloperPayload(purchase)) {

return;
}

Log.d(TAG, "Purchase successful.");

if (purchase.getSku().equals(SKU_PREMIUM)) {
Log.d(TAG, "Purchase is premium upgrade. Congratulating user.");
mIsPremium = true;
updateUi();

}
}
};
//////////////////end 4_1

//////4_2

@Override
public void onDestroy() {
super.onDestroy();

Log.d(TAG, "Destroying helper.");
if (mHelper != null) mHelper.dispose();
mHelper = null;
}
//////end 4_2

//////4_3
public void updateUi() {

if (mIsPremium) {

Toast.makeText(getApplicationContext(), "KHARID", Toast.LENGTH_SHORT).show();
}

}

/////////end 4_3
/////end 4

}

virus2009
دوشنبه 10 آذر 1393, 00:02 صبح
سوالات :

1- قسمت تعاریف میباشد

2- چیه و چرا ؟

3-چک میکنه که آیا کاربر VIP هی یا نه

3_A نمیدونم (چیه و چرا ؟)

3_B با کلیک بر روی دکمه به صفحه پرداخت درون برنامه ای میرود

3_C نمیدونم (چیه و چرا ؟)

3_D نمیدونم (چیه و چرا ؟)

1_4 نمیدونم (چیه و چرا ؟)

2_4 نمیدونم (چیه و چرا ؟)

3_4 بعد از پرداخت این تابع فراخانی میشود

1 - تعریف متغییر ها
2- درگاه درون پرداخت را راه اندازی می کند و در صورت نصب بودن بازار Setup finished. نمایش داده می شود. و می توانید پرداخت انجام دهید
3- بررسی کردن پریمیوم بودن کاربر، اگر کاربر پریمیوم باشد mIsPremium = true می شود.
3-ب : اینم که دکمه خرید است.
3-سی : وقتی صفحه درگاه پرداخت بسته می شود این متد اجرا می شود و جواب برگشت داده شده از درگاه را پردازش می کند.
3-دی : این متد کلا بلا استفاده است و همیشه true بر می گردونه، شکل درستش هم زیاد کاربرد نداره چون شما موقع خرید developer payload رو یک رشته ثابت تعریف کردی، ولی برای اطمینان می تونی با شکل درست این متد payload برگشتی از بازار رو با payload ـه موقع خرید چک کنی. ( که همیشه true است !!)
4-1 : این یک listener برای نتیجه خرید است، اگر خرید موفقیت آمیز باشید Purchase successful. نمایش داده می شود.
4-2 : موقع بستن اکتیوی این متد صدا زده می شود و چون دیگر نیازی به درگاه پرداخت ندارید آن را می بندد.
4.3 : این یک متد معمولی است و کار خاصی انجام نمی دهد، بعد از مرحله 2 ، متد مرحله 3 صدا زده می شود و اگر کاربر پریمیوم بود ( به صورت آنلاین بررسی می شود) دیگر نیازی به خرید نیست، این متد هم پریمیوم بودن کاربر رو چک میکنه.

hamedg1366
دوشنبه 10 آذر 1393, 08:35 صبح
1 - تعریف متغییر ها
2- درگاه درون پرداخت را راه اندازی می کند و در صورت نصب بودن بازار Setup finished. نمایش داده می شود. و می توانید پرداخت انجام دهید
3- بررسی کردن پریمیوم بودن کاربر، اگر کاربر پریمیوم باشد mIsPremium = true می شود.
3-ب : اینم که دکمه خرید است.
3-سی : وقتی صفحه درگاه پرداخت بسته می شود این متد اجرا می شود و جواب برگشت داده شده از درگاه را پردازش می کند.
3-دی : این متد کلا بلا استفاده است و همیشه true بر می گردونه، شکل درستش هم زیاد کاربرد نداره چون شما موقع خرید developer payload رو یک رشته ثابت تعریف کردی، ولی برای اطمینان می تونی با شکل درست این متد payload برگشتی از بازار رو با payload ـه موقع خرید چک کنی. ( که همیشه true است !!)
4-1 : این یک listener برای نتیجه خرید است، اگر خرید موفقیت آمیز باشید Purchase successful. نمایش داده می شود.
4-2 : موقع بستن اکتیوی این متد صدا زده می شود و چون دیگر نیازی به درگاه پرداخت ندارید آن را می بندد.
4.3 : این یک متد معمولی است و کار خاصی انجام نمی دهد، بعد از مرحله 2 ، متد مرحله 3 صدا زده می شود و اگر کاربر پریمیوم بود ( به صورت آنلاین بررسی می شود) دیگر نیازی به خرید نیست، این متد هم پریمیوم بودن کاربر رو چک میکنه.


دوست عزیز خیلی ممنون ، حیف فقط یه بار میتونم دکمه تشکر رو بزنم برات:قلب:

hamedg1366
سه شنبه 11 آذر 1393, 22:49 عصر
دوستان من از پرداخت درون برنامه ای استفاده میکنم (از کدهای آقا حامد)



برنامه اکثرا خوب و کامل اجرا میشه اما متاسفانه در بعضی اجرا ها به محض کلیک بر روی کلید خرید از بازار با خطای زیر موجه میشم :

دلیل این خطا چیه ؟!:اشتباه:







126249

hamedjj
سه شنبه 11 آذر 1393, 23:22 عصر
دوستان من از پرداخت درون برنامه ای استفاده میکنم (از کدهای آقا حامد)



برنامه اکثرا خوب و کامل اجرا میشه اما متاسفانه در بعضی اجرا ها به محض کلیک بر روی کلید خرید از بازار با خطای زیر موجه میشم :

دلیل این خطا چیه ؟!:اشتباه:







126249



یعنی چی در بعضی اجراها؟
یعنی روی بعضی از گوشی ها امتحان کردید و درست کار کرد و روی این دستگاه درست کار نکرد؟؟؟
یا اینکه چند بار run کردید درست کارد کرد اما بعضی موقع درست کار نمیکنه؟

hamedg1366
سه شنبه 11 آذر 1393, 23:33 عصر
یعنی چی در بعضی اجراها؟
یعنی روی بعضی از گوشی ها امتحان کردید و درست کار کرد و روی این دستگاه درست کار نکرد؟؟؟
یا اینکه چند بار run کردید درست کارد کرد اما بعضی موقع درست کار نمیکنه؟


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



(البته ناگفته نمونه میزان مبلغ رو 0 گذاشتم برای تست)

hamedg1366
سه شنبه 11 آذر 1393, 23:38 عصر
راستی حامد جان یه سوال آماتوری دارم (اولین باره دارم از پرداخت درون برنامه ای استفاده میکنم شرمنده دیگه)

این درگاه درون پرداخت بازار بخاطر مبلغ 0 هس اینطوریه؟ اگه مبلغ عوض بشه از این فرم در میاد ؟



126251