سلام.من تو پروژه ام خرید انجام میدم ولی نمی دونم چطور باید مصرف محصول رو به بازار بفرستم.درست مثل خرید سکه که چندین بار میشه یه محصول رو خرید.
این کد صفحه خرید هست که کاملا کار می کنه.
import java.util.List;
import util.IabHelper;
import util.IabResult;
import util.Inventory;
import util.Purchase;
public class UpdateActivity extends Activity {
int update = 0;
public ProgressDialog dialog ;
Button btn1;
Button btn2;
Button btnComent;
SharedPreferences sp;
TextView tvtop;
Bundle input;
//Debug tag, for logging
static final String TAG = "eshghroman";
//SKUs for our products: the premium upgrade (non-consumable)
String SKU_PREMIUM = "mahsool";
//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);
sp = PreferenceManager.getDefaultSharedPreferences(this );
if(!isPackageInstalled("com.farsitel.bazaar", UpdateActivity.this)){
toast("نرم افزار بازار هنوز نصب نشده است");
}
else{
dialog.setMessage("بررسی سبد خرید");
dialog.show();
String base64EncodedPublicKey = "MIHNMA0GCSqGSIb3DQEBAQUAA4G7ADCBtwKBrwCwxkpI7w1n1 5aEvHNG5HOEVKLIJEWur2e3jHkjL5e2OgA0DYX/BbVtM3E4dpXMd89sSUtHwa3jiQ6TyZYO6sHb0okJKjw08R+Hyx j9ghvMd+5X4vutoyhZeT94rmdF+6XmzghxdcDocKbG0BdoHY7t tFyz6OohqAz6HUlnYdGuA5L+sDbJBywr7zkFvNtJa561DmpXdm +s+W8fIM/xv7ErED2BoCO68cQutn+fdHRyzoKjECAwEAAQ==";
// 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("وارد اکانت حساب کاربری خود در بازار شوید."+"n"+"یا اتصال به اینترنت را بررسی کنید.");
// 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();
toast("خطا در ارتباط با سرور."+"n"+"وارد اکانت حساب کاربری خود در بازار شوید."+"n"+"یا اتصال به اینترنت را بررسی کنید.");
retu;
}
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();
retu 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("وارد اکانت حساب کاربری خود در بازار شوید."+"n"+"یا اتصال به اینترنت را بررسی کنید.");
Log.d(TAG, "Error purchasing: " + result);
retu;
}
if (!verifyDeveloperPayload(purchase)) {
toast("وارد اکانت حساب کاربری خود در بازار شوید."+"n"+"یا اتصال به اینترنت را بررسی کنید.");
complain("Error purchasing. Authenticity verification failed.");
retu;
}
Log.d(TAG, "Purchase successful.");
if (purchase.getSku().equals(SKU_PREMIUM)) {
Log.d(TAG, "Purchase is premium upgrade. Congratulating user.");
mIsPremium = true;
updateUi();
toast("با تشکر از خرید شما");
}
}
};
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "Destroying helper.");
if (mHelper != null) mHelper.dispose();
mHelper = null;
}
// اگر کاربر پریمیوم باشد دستورات آپدیت را انجام میدهد در غیر اینصورت به صفحه خرید هدایت می شود.
public void updateUi() {
if (mIsPremium) {
Editor e = sp.edit();
e.putInt("up", 1);
e.commit();
toast("شما کاربر ویژه هستید");
toast("نرم افزار را ریستارت کنید");
finish();
}
else
{
toast("نرم افزار خریداری نشده است");
}
}
void complain(String message) {
Log.e(TAG, "**** testbilling Error: " + message);
}
public static boolean isPackageInstalled(String packagename,Context context) {
PackageManager pm = context.getPackageManager();
try {
pm.getPackageInfo(packagename, PackageManager.GET_ACTIVITIES);
retu true;}
catch (NameNotFoundException e) {
retu false;}
}
public void onOnlineUpgradeAppButtonClicked(View arg0) {
if(!isPackageInstalled("com.farsitel.bazaar", UpdateActivity.this)){
toast("نرم افزار بازار هنوز نصب نشده است");
}
else{
Log.d(TAG, "Upgrade button clicked; launching purchase flow for upgrade.");
/* TODO: for security, generate your payload here for verification. See the Idea 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. */
float random1 =(int) (Math.random()*(999999999));
float random2 =(int) (Math.random()*(999999999));
float random3 =(int) (Math.random()*(999999999));
float random4 =(int) (Math.random()*(999999999));
float random5 =(int) (Math.random()*(999999999));
float random6 =(int) (Math.random()*(999999999));
float random7 =(int) (Math.random()*(999999999));
float random8 =(int) (Math.random()*(999999999));
float random9 =(int) (Math.random()*(999999999));
String payload = random1+"grfgfdg"+random2+"vjkhjk"+random3+"sefhyi "+random4+"4254gfh"+random5+"75fsd"+random6+"wda54 "+random7+"we42"+random8+"er4345fv"+random9+"cdgdf 5";
mHelper.launchPurchaseFlow(UpdateActivity.this, SKU_PREMIUM, RC_REQUEST,
mPurchaseFinishedListener, payload);
}
}
public void toast(String string){
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.toast,(ViewGroup) findViewById(R.id.textViewtoast));
TextView tvtoast = (TextView) layout.findViewById(R.id.textViewtoast);
tvtoast.setText(string);
Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.BOTTOM, 0, 55);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
}
private static long back_pressed = 0L;
@Override
public void onBackPressed()
{
finish();
}
public static boolean isIntentAvailable(final Context context, final Intent intent) {
final PackageManager packageManager = context.getPackageManager();
List<ResolveInfo> list =
packageManager.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
retu list.size() > 0;
}
}
برچسب:
نویسنده: محمد رضا جوادیان