صفحه 8 از 10 اولاول ... 678910 آخرآخر
نمایش نتایج 281 تا 320 از 362

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

  1. #281

    نقل قول: پرداخت درون برنامه ای

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

    بعد فرمودین تستش کنم خوب این برنامه که هنوز بررسی و منتشر نشده و در وضعیت برنامه بارگذاری شده و آمادهٔ بررسی است .... من چجور نصبش کنم و تستش کنم ...

    ممنونم ازت آقا امین

  2. #282

    نقل قول: پرداخت درون برنامه ای

    برای اینکه یه کاربر نتونه نسخه کامل برنامه خرید شده رو در بیش از یه دستگاه نصب کنه، من با استفاده از توابع API که بازار ارائه میده، کدهای سمت کلاینتش رو نوشتم، ولی مشکل اینه که ظاهرا بازار کاری به این مساله نداره، یعنی وقتی با استفاده از تابع:
    1
    2
    mHelper.launchPurchaseFlow(PurchaseApp.this, SKU_PREMIUM, RC_REQUEST,
    mPurchaseFinishedListener, payload);



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

    از دوستان کسی راه حلی برای این مساله داره؟
    کاربر باید بتونه نسخه کاملی که خریداری کرده را در بیش از یک دستگاه نصب کنه و بازار در این قضیه کاملا درست عمل میکنه.
    منی که دوتا تبلت و 1 گوشی دارم یعنی چند بار باید یه برنامه را خریداری کنم!!!!

  3. #283

    نقل قول: پرداخت درون برنامه ای

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

    این برنامه که تستش کنم خوب این برنامه که هنوز بررسی و منتشر نشده و در وضعیت برنامه بارگذاری شده و آمادهٔ بررسی است .... من چجور نصبش کنم و تستش کنم ...

    دوستان کسی نیست جواب بده ؟؟؟

  4. #284

    نقل قول: پرداخت درون برنامه ای

    نقل قول نوشته شده توسط hamedjj مشاهده تاپیک
    کاربر باید بتونه نسخه کاملی که خریداری کرده را در بیش از یک دستگاه نصب کنه و بازار در این قضیه کاملا درست عمل میکنه.
    منی که دوتا تبلت و 1 گوشی دارم یعنی چند بار باید یه برنامه را خریداری کنم!!!!
    آقا حامد حرف شما کاملا درست و متینه، خب اینو میشه مدیریت کرد. مثلا میشه اجازه داد هر کاربری نسخه کامل برنامه رو در 3 یا 5 دستگاه نصب کنه. حرف سر اینه که فعلاً بازار ساز و کاری برای مدیریت این مساله نداره. اگه مثل getpurchases، یه متدی وجود داشت که خرید های کاربر رو میداد (حتی اونهایی که بعدا مصرف شدن) قضیه حل بود. این API توسعه دهندگان هم که همین دیروز سه شنبه 25 آذر اضافه کرده، خیلی چیز خوبیه ولی خب لازمه اش راه اندازی سرور شخصی هستش.

  5. #285
    کاربر دائمی آواتار c0mmander
    تاریخ عضویت
    اردیبهشت 1393
    محل زندگی
    خونمون D:
    پست
    563

    نقل قول: پرداخت درون برنامه ای

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

    البته با توجه به این قابلیت REST که همون ارسال http و دریافت پاسخ هست احتمالا بشه این قضیه رو مدریت کرد.
    آخرین ویرایش به وسیله c0mmander : چهارشنبه 26 آذر 1393 در 13:35 عصر

  6. #286

    نقل قول: پرداخت درون برنامه ای

    نقل قول نوشته شده توسط c0mmander مشاهده تاپیک
    البته با توجه به این قابلیت REST که همون ارسال http و دریافت پاسخ هست احتمالا بشه این قضیه رو مدریت کرد.
    بله میشه مدیریت کرد، ولی باید قبلش یه سرور راه اندازی کنی

  7. #287

    نقل قول: پرداخت درون برنامه ای

    نقل قول نوشته شده توسط mohmir مشاهده تاپیک
    شرمنده این برنامه نهایی رو تو همون برنامه ارسال نسخه جدید بفرستم یا نه ... کلا یه برنامه دیگه ارسال کنم؟

    بعد فرمودین تستش کنم خوب این برنامه که هنوز بررسی و منتشر نشده و در وضعیت برنامه بارگذاری شده و آمادهٔ بررسی است .... من چجور نصبش کنم و تستش کنم ...

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

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

  8. #288

    نقل قول: پرداخت درون برنامه ای

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

    سلام به همه بزرگواران

    دوستانمون خیلی خوب راهنمایی کردن ولی به دلیل مشکلات ذاتی سیستم پرداخت درون برنامه ای، پیاده سازی این مورد یه مقدار نیاز به صرف وقت و حوصله داره، ما خیلی روی این قضیه کار کردیم و تونستیم یه پکیج آماده کنیم که توسط اون به همراه آموزشی که مهیا ساختیم خیلی راحت و سریع میشه برنامه هایی که با یونیتی ساخته شدن رو به پرداخت درون برنامه ای مجهز کرد؛ ولی متأسفانه چون بیش از یک ماه درگیر این کار بودیم و این کار برامون هزینه بر بود نمیتونیم به رایگان در اختیار شما عزیزان قرار بدیم، عذر خواهی می کنیم، در صورتی که نتونستید یا به هر دلیل نخواستین خودتون درگیر این موضوع تو برنامه تون بشین میتونید توسط ایمیل زیر با من در ارتباط باشید.
    akf1372@gmail.com

    موفق و پیروز باشین..

  9. #289

    نقل قول: پرداخت درون برنامه ای

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

    موفق باشید

  10. #290

    نقل قول: پرداخت درون برنامه ای

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

    import util.IabHelper;
    import util.IabResult;
    import util.Inventory;
    import util.Purchase;
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;

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

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

    // 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.par);
    btn1 = (Button) findViewById(R.id.button1);
    String base64EncodedPublicKey = "MIHNMA0GCSqGSIb3DQEsV61HZVcwUDUkQwIaiF82nNcJC jZo/dodfmiYh7JHpALWOvVYZDaVPHjlWeI+GHP1D2P2XXRx2KhNHl8 mw2yI9QHt4tzz52nY+lJhwO4QVRfCT0i6sOMjKnknMjd+0iYDT/mGHmR4ef3D+blBXIPA+VvEny9nPprhntBeZHODYQ+UT3KrShF8 nHxrHuQFG+9PJeR6ok8+ZQTFKrECAwEAAQ==";
    // 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.");
    mIsPremium = inventory.hasPurchase(SKU_PREMIUM);

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

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

    /* 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()) {

    Toast.makeText(getApplicationContext(), R.string.parfaild, Toast.LENGTH_SHORT).show();
    return;
    }
    if (!verifyDeveloperPayload(purchase)) {
    Toast.makeText(getApplicationContext(), R.string.parfaild, Toast.LENGTH_SHORT).show();
    return;
    }

    if (purchase.getSku().equals(SKU_PREMIUM)) {
    Toast.makeText(getApplicationContext(), R.string.parmof, Toast.LENGTH_SHORT).show();
    mIsPremium = true;

    }
    }
    };

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

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

    }

  11. #291

    نقل قول: پرداخت درون برنامه ای

    نقل قول نوشته شده توسط morahimi مشاهده تاپیک
    با سلام من این کد های رو نوشتم ولی ارور فورز کلوز میده عیب از کجاست؟
    ;

    import util.IabHelper;
    import util.IabResult;
    import util.Inventory;
    import util.Purchase;
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;

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

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

    // 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.par);
    btn1 = (Button) findViewById(R.id.button1);
    String base64EncodedPublicKey = "MIHNMA0GCSqGSIb3DQEsV61HZVcwUDUkQwIaiF82nNcJC jZo/dodfmiYh7JHpALWOvVYZDaVPHjlWeI+GHP1D2P2XXRx2KhNHl8 mw2yI9QHt4tzz52nY+lJhwO4QVRfCT0i6sOMjKnknMjd+0iYDT/mGHmR4ef3D+blBXIPA+VvEny9nPprhntBeZHODYQ+UT3KrShF8 nHxrHuQFG+9PJeR6ok8+ZQTFKrECAwEAAQ==";
    // 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.");
    mIsPremium = inventory.hasPurchase(SKU_PREMIUM);

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

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

    /* 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()) {

    Toast.makeText(getApplicationContext(), R.string.parfaild, Toast.LENGTH_SHORT).show();
    return;
    }
    if (!verifyDeveloperPayload(purchase)) {
    Toast.makeText(getApplicationContext(), R.string.parfaild, Toast.LENGTH_SHORT).show();
    return;
    }

    if (purchase.getSku().equals(SKU_PREMIUM)) {
    Toast.makeText(getApplicationContext(), R.string.parmof, Toast.LENGTH_SHORT).show();
    mIsPremium = true;

    }
    }
    };

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

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

    }
    به نظر که کدها مشکلی ندارند.
    برنامه بازار بر روی امولاتور شما نصب هست؟؟

  12. #292

    نقل قول: پرداخت درون برنامه ای


    با سلام خدمت توسعه دهندگان

    پرداخت درون برنامه ای از اهمیت فراوانی برخوردار میباشد به طوری که نزدیک به 80% از پرداخت های مارکت گوگل پلی از این طریق انجام می شود.

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

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


    هزینه پیاده سازی سرویس ها :

    ارتقا برنامه : 100 هزار تومان
    محصولات مصرفی : 120 هزار تومان
    سرویس اشتراک : 120 هزار تومان
    (برای پیاده سازی های به صورت شخصی سازی شده قیمت با مکاتبه با توسعه دهنده اعلام می شود)

    ایمیل
    :
    hamed_daneshnia@yahoo.com

    آخرین ویرایش به وسیله hamedjj : یک شنبه 30 آذر 1393 در 16:35 عصر

  13. #293

    نقل قول: پرداخت درون برنامه ای

    من روی گوشی امتحان میکنم و بازار روی گوشیم نصبه

  14. #294

    نقل قول: پرداخت درون برنامه ای

    با سلام من این کدها رو نوشتم حالا وارد اکتیویتی میشه ولی وقتی دکمه پرداخت رو میزنم برنامه رو میبنده
    بازار روی گوشیم نصبه
    package com.i;

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

    import com.i.until.IabHelper;
    import com.i.until.IabResult;
    import com.i.until.Inventory;
    import com.i.until.Purchase;

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

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

    // 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.hem);
    btn1 = (Button) findViewById(R.id.button1);
    String base64EncodedPublicKey = "MIHNMA0GCSqGSIb3DQEBAQUAA4G7ADCBtwKBrwC/wOCr8z9ZCyRBHC24RC1NLNLsV61HZVcwUDUkQwIaiF82nNcJCj Zo/dodfmiYh7JHpALWOvVYZDaVPHjlWeI+GHP1D2P2Mjd+0iYDT/mGHmR4ef3D+blBXIPA+VvEny9nPprhntBeZHODYQ+UT3KrShF8 nHxrHuQFG+9PJeR6ok8+ZQTFKrECAwEAAQ==";
    // 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.");
    mIsPremium = inventory.hasPurchase(SKU_PREMIUM);

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

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

    /* 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()) {

    Toast.makeText(getApplicationContext(), R.string.parfaild, Toast.LENGTH_SHORT).show();
    return;
    }
    if (!verifyDeveloperPayload(purchase)) {
    Toast.makeText(getApplicationContext(), R.string.parfaild, Toast.LENGTH_SHORT).show();
    return;
    }

    if (purchase.getSku().equals(SKU_PREMIUM)) {
    Toast.makeText(getApplicationContext(), R.string.parmof, Toast.LENGTH_SHORT).show();
    mIsPremium = true;

    }
    }
    };

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

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

    }

  15. #295

    نقل قول: پرداخت درون برنامه ای

    نقل قول نوشته شده توسط morahimi مشاهده تاپیک
    با سلام من این کدها رو نوشتم حالا وارد اکتیویتی میشه ولی وقتی دکمه پرداخت رو میزنم برنامه رو میبنده
    بازار روی گوشیم نصبه
    package com.i;

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

    import com.i.until.IabHelper;
    import com.i.until.IabResult;
    import com.i.until.Inventory;
    import com.i.until.Purchase;

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

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

    // 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.hem);
    btn1 = (Button) findViewById(R.id.button1);
    String base64EncodedPublicKey = "MIHNMA0GCSqGSIb3DQEBAQUAA4G7ADCBtwKBrwC/wOCr8z9ZCyRBHC24RC1NLNLsV61HZVcwUDUkQwIaiF82nNcJCj Zo/dodfmiYh7JHpALWOvVYZDaVPHjlWeI+GHP1D2P2Mjd+0iYDT/mGHmR4ef3D+blBXIPA+VvEny9nPprhntBeZHODYQ+UT3KrShF8 nHxrHuQFG+9PJeR6ok8+ZQTFKrECAwEAAQ==";
    // 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.");
    mIsPremium = inventory.hasPurchase(SKU_PREMIUM);

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

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

    /* 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()) {

    Toast.makeText(getApplicationContext(), R.string.parfaild, Toast.LENGTH_SHORT).show();
    return;
    }
    if (!verifyDeveloperPayload(purchase)) {
    Toast.makeText(getApplicationContext(), R.string.parfaild, Toast.LENGTH_SHORT).show();
    return;
    }

    if (purchase.getSku().equals(SKU_PREMIUM)) {
    Toast.makeText(getApplicationContext(), R.string.parmof, Toast.LENGTH_SHORT).show();
    mIsPremium = true;

    }
    }
    };

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

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

    }
    در فایل xml خود این کد را در باتن قرار بدهید:
    android:onClick="onUpgradeAppButtonClicked"

  16. #296

    نقل قول: پرداخت درون برنامه ای

    این کد صفحه xml هست ولی باز هم ارور میده
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <Button
    android:id="@+id/button1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginTop="163dp"
    android:onClick="onUpgradeAppButtonClicked"
    android:text="پرداخت" />

    </RelativeLayout>


  17. #297

    نقل قول: پرداخت درون برنامه ای

    نقل قول نوشته شده توسط morahimi مشاهده تاپیک
    این کد صفحه xml هست ولی باز هم ارور میده
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <Button
    android:id="@+id/button1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginTop="163dp"
    android:onClick="onUpgradeAppButtonClicked"
    android:text="پرداخت" />

    </RelativeLayout>

    شناسه محصولی که در پنل کاربری بازار ثبت کردی چیه؟
    خواهشا log ارور را قرار بده

  18. #298

    نقل قول: پرداخت درون برنامه ای

    com.yazdi.eyazdi

  19. #299

    نقل قول: پرداخت درون برنامه ای

    نقل قول نوشته شده توسط morahimi مشاهده تاپیک
    com.yazdi.eyazdi
    پس این چیه اینجا نوشتی؟
    static final String SKU_PREMIUM = "com.i";

  20. #300

    نقل قول: پرداخت درون برنامه ای

    بیا این کد
    package com.yazd.eyazdi;

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

    import com.yazd.eyazdi.until.IabHelper;
    import com.yazd.eyazdi.until.IabResult;
    import com.yazd.eyazdi.until.Inventory;
    import com.yazd.eyazdi.until.Purchase;

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

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

    // 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.hem);
    btn1 = (Button) findViewById(R.id.button1);
    String base64EncodedPublicKey = "MIHNMA0GCSqGSIb3DQEBAQUAA4G7ADCBtwKBrwC/wOCr8z9ZCyRBHC24RC1NLNLsV61HZVcwUDUkQwIaiF82nNcJCj Zo/dodfmiYh7JHpALWOvVYZDaVPHjlWeI+GHP1D2P2XXRx2KhNHl8 mw2yI9O4QVRfCT0i6sOMjKnknMjd+0iYDT/mGHmR4ef3D+blBXIPA+VvEny9nPprhntBeZHODYQ+UT3KrShF8 nHxrHuQFG+9PJeR6ok8+ZQTFKrECAwEAAQ==";
    // 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.");
    mIsPremium = inventory.hasPurchase(SKU_PREMIUM);

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

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

    /* 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()) {

    Toast.makeText(getApplicationContext(), R.string.parfaild, Toast.LENGTH_SHORT).show();
    return;
    }
    if (!verifyDeveloperPayload(purchase)) {
    Toast.makeText(getApplicationContext(), R.string.parfaild, Toast.LENGTH_SHORT).show();
    return;
    }

    if (purchase.getSku().equals(SKU_PREMIUM)) {
    Toast.makeText(getApplicationContext(), R.string.parmof, Toast.LENGTH_SHORT).show();
    mIsPremium = true;

    }
    }
    };

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

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

    }

  21. #301

    نقل قول: پرداخت درون برنامه ای

    نقل قول نوشته شده توسط morahimi مشاهده تاپیک
    بیا این کد
    package com.yazd.eyazdi;

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

    import com.yazd.eyazdi.until.IabHelper;
    import com.yazd.eyazdi.until.IabResult;
    import com.yazd.eyazdi.until.Inventory;
    import com.yazd.eyazdi.until.Purchase;

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

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

    // 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.hem);
    btn1 = (Button) findViewById(R.id.button1);
    String base64EncodedPublicKey = "MIHNMA0GCSqGSIb3DQEBAQUAA4G7ADCBtwKBrwC/wOCr8z9ZCyRBHC24RC1NLNLsV61HZVcwUDUkQwIaiF82nNcJCj Zo/dodfmiYh7JHpALWOvVYZDaVPHjlWeI+GHP1D2P2XXRx2KhNHl8 mw2yI9O4QVRfCT0i6sOMjKnknMjd+0iYDT/mGHmR4ef3D+blBXIPA+VvEny9nPprhntBeZHODYQ+UT3KrShF8 nHxrHuQFG+9PJeR6ok8+ZQTFKrECAwEAAQ==";
    // 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.");
    mIsPremium = inventory.hasPurchase(SKU_PREMIUM);

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

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

    /* 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()) {

    Toast.makeText(getApplicationContext(), R.string.parfaild, Toast.LENGTH_SHORT).show();
    return;
    }
    if (!verifyDeveloperPayload(purchase)) {
    Toast.makeText(getApplicationContext(), R.string.parfaild, Toast.LENGTH_SHORT).show();
    return;
    }

    if (purchase.getSku().equals(SKU_PREMIUM)) {
    Toast.makeText(getApplicationContext(), R.string.parmof, Toast.LENGTH_SHORT).show();
    mIsPremium = true;

    }
    }
    };

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

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

    }
    شناسه کالاتون با این
    com.yazdi.eyazdi

    که تو پنل ایجاد کردید مطابقت نداره

  22. #302

    نقل قول: پرداخت درون برنامه ای

    سلام دوستان کد اصلی که من نوشتم بدون حذف یا اضافه اینه ارور میده برنامه رو میبنده کد RSA برنامه رو هم چک کردم درسته
    package com.yazd.eyazdi;

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

    import com.yazd.eyazdi.until.IabHelper;
    import com.yazd.eyazdi.until.IabResult;
    import com.yazd.eyazdi.until.Inventory;
    import com.yazd.eyazdi.until.Purchase;

    public class Hem extends Activity {
    // Debug tag, for logging
    static final String TAG = "kalamate yazdi";

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

    // 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.hem);
    Button btn1 = (Button) findViewById(R.id.button1);
    String base64EncodedPublicKey = "MIHNMA0GCSqGSIb3DQEBAQUAA4G7ADCBtwKBrwC/wOCr8z9ZCyRBHC24RC1NLNLsV61HZVcwUDUkQwIaiF82nNcJCj Zo/dodfmiYh7JHpALWOvVYZDaVPHjlWeI+GHP1D2P2XXRx2KhNHl8 mw2yI9QHt4tzz52nY+lJhwO4QVRfCT0i6sOMjKnknMjd+0iYDT/mGHmR4ef3D+blBXIPA+VvEny9nPprhntBeZHODYQ+UT3KrShF8 nHxrHuQFG+9PJeR6ok8+ZQTFKrECAwEAAQ==";
    // 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.");
    mIsPremium = inventory.hasPurchase(SKU_PREMIUM);

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

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

    /* 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()) {

    Toast.makeText(getApplicationContext(), R.string.parfaild, Toast.LENGTH_SHORT).show();
    return;
    }
    if (!verifyDeveloperPayload(purchase)) {
    Toast.makeText(getApplicationContext(), R.string.parfaild, Toast.LENGTH_SHORT).show();
    return;
    }

    if (purchase.getSku().equals(SKU_PREMIUM)) {
    Toast.makeText(getApplicationContext(), R.string.parmof, Toast.LENGTH_SHORT).show();
    mIsPremium = true;

    }
    }
    };

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

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

    }

  23. #303

    نقل قول: پرداخت درون برنامه ای

    دوستان خیلی ممنون مشکل حل شد

  24. #304

    نقل قول: پرداخت درون برنامه ای

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

  25. #305

    نقل قول: پرداخت درون برنامه ای

    سلام دوستان
    من چندتا برنامه پرداخت درون برنامه ای دانلود کردم
    1- کاملترین نمونه برنامه رو میشه بهش معرفی کنید . نمیدونم بین این برنامه ها کدوم از همه کاملتر و بهتر هست
    2- شنیدم دوستی میگفت اگر کسی پرداخت کنه ، در اکانت بازارش ثبت میشه و اگر با گوشی دیگر ورود کنه ، برنامه روی گوشی طرف دوباره فعال میشه . چه طوری باید جلوی چنین چیزی رو بگیرم ؟
    ممنون میشم راهنمایی کنید
    با تشکر

  26. #306

    نقل قول: پرداخت درون برنامه ای

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

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

    مثلا:
    1- تغییرات در مانیفست برای هر مارکت چی است؟
    2- کدهای عمومی رو باید در کدام فایل قرار بدهم؟
    3- برای تغییر از بازار به مایکت یا کندو چه فایلی رو تغییر بدهم؟

  27. #307

    نقل قول: پرداخت درون برنامه ای

    نقل قول نوشته شده توسط mamogholi مشاهده تاپیک
    چگونگی تبدیل پرداخت درون برنامه ای از بازار به مایکت یا کندو؟

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

    مثلا:
    1- تغییرات در مانیفست برای هر مارکت چی است؟
    2- کدهای عمومی رو باید در کدام فایل قرار بدهم؟
    3- برای تغییر از بازار به مایکت یا کندو چه فایلی رو تغییر بدهم؟
    برای مایکت و ایران اپس

    1 - مجوز مارکت را با بازار عوض کن
    2 - کلید عمومی از پنل مارکت در برنامه قرار بده ... شناسه محصول را در مارکت همنام بازار تولید کن
    3 - کلاس های پراخت درون برنامه ای بازار را پاک کن و برای مارکت مورد نظر را در برنامه قرار بده (البته فقط در یک کلاس تفاوت دارند)

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

  28. #308

    نقل قول: پرداخت درون برنامه ای

    نقل قول نوشته شده توسط hamedjj مشاهده تاپیک
    برای مایکت و ایران اپس

    1 - مجوز مارکت را با بازار عوض کن
    2 - کلید عمومی از پنل مارکت در برنامه قرار بده ... شناسه محصول را در مارکت همنام بازار تولید کن
    3 - کلاس های پراخت درون برنامه ای بازار را پاک کن و برای مارکت مورد نظر را در برنامه قرار بده (البته فقط در یک کلاس تفاوت دارند)

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

  29. #309
    کاربر دائمی آواتار c0mmander
    تاریخ عضویت
    اردیبهشت 1393
    محل زندگی
    خونمون D:
    پست
    563

    نقل قول: پرداخت درون برنامه ای

    نقل قول نوشته شده توسط saeidd مشاهده تاپیک
    بله میشه مدیریت کرد، ولی باید قبلش یه سرور راه اندازی کنی
    من این سیستم رو راه اندازی کردم هیچی کار خاصی با REST نمیشه کرد فقط گزارش های خرید از این دست اطلاعات رو میده .

  30. #310
    کاربر دائمی آواتار c0mmander
    تاریخ عضویت
    اردیبهشت 1393
    محل زندگی
    خونمون D:
    پست
    563

    نقل قول: پرداخت درون برنامه ای

    سلام

    من این باری که خواستم برم پرداخت درون برنامه رو یک محصول جدید بزارم 3 تا انتخاب داشتم:
    1- اشتراکی ماهیانه
    2- اشتراکی سالیانه
    3- فروشی.

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


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

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

    آیا این کار من درسته برای محصولات مصرف شدنی درسته؟

  31. #311

    نقل قول: پرداخت درون برنامه ای

    1 - تا حالا اشتراک ماهیانه مجله نشنیدین یا مثلا اجاره ماهانه خانه
    در برنامه هم به همین شکل است ... شما برنامه خودتان را به کاربر به صورت ماهانه و سالانه اجاره می دهید.

    2 - مصرف خرید باید در لحظه خرید انجام بشه که این لغت مصرف کمی گیج کننده شده است.
    شما وقتی کاربر خرید را انجام داد با یک قطعه کد به بازار میگویید که ای بازار این خریدی که انجام شد از نوع مصرفی است و کاربر دوباره میتواند همین محصول را خریداری کند.
    اگر این اطلاعات برای بازار ارسال نشود کاربر بعد از هر بار اتصال به بازار برای خرید مهمات هیچ پولی پرداخت نمیکند و مهمات را دریافت میکند.

  32. #312
    کاربر دائمی آواتار c0mmander
    تاریخ عضویت
    اردیبهشت 1393
    محل زندگی
    خونمون D:
    پست
    563

    نقل قول: پرداخت درون برنامه ای

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

    وقتی‌ محصولی خریداری شد، به عنوان «دارایی تحت تملک» آن کاربر تلقی‌ شده و نمی‌تواند دوباره توسط آن کاربر خریداری شود. شما باید درخواست مصرف محصول را برای آنکه بازار امکان خریداری مجدد آن را فراهم کند، بفرستید. چگونگی اجرای مکانیزم مصرف در برنامه‌تان بستگی به خودتان دارد. معمولا، شما محصولات موقتی و مصرفی (برای مثال سکه یا ابزار درون بازی) می‌فروشید که فروش چندین‌بارهٔ آن معنی‌دار است. برای محصولاتی که تنها یک‌بار فروخته می‌شوند و اثری دائمی دارند (مانند ارتقا دادن به نسخه کامل برنامه) مصرف را صدا نزنید.

    پس برای محصولات فروشی (مصرف شدنی) در موقع خرید باید به بازار اعلام شود. خوب حالا اگر کاربر هنوز از تمام مهمات خود استفاده نکرده بود مثلا 20% باقی مانده داشت و مجددا اقدام به خرید کرد. کاربر 20% از نظر مالی ضرر خواهد کرد! این اتقاق خواهد افتاد یا اینکه بازار تا اتمام کامل(تا وقتی که برنامه به بازار اعلام کند بسته خریداری شده تمام شده است) از خرید ممانعت به عمل می آورد؟!

  33. #313

    نقل قول: پرداخت درون برنامه ای

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

    پس برای محصولات فروشی (مصرف شدنی) در موقع خرید باید به بازار اعلام شود. خوب حالا اگر کاربر هنوز از تمام مهمات خود استفاده نکرده بود مثلا 20% باقی مانده داشت و مجددا اقدام به خرید کرد. کاربر 20% از نظر مالی ضرر خواهد کرد! این اتقاق خواهد افتاد یا اینکه بازار تا اتمام کامل(تا وقتی که برنامه به بازار اعلام کند بسته خریداری شده تمام شده است) از خرید ممانعت به عمل می آورد؟!
    میگم این لغت مصرف کردن گیج کننده برای همین میگم

    بازار اصلا به برنامه شما یا کاربر چقدر مهمات داره و ... کاری نداره.
    وقتی کاربر 100 سکه خریداری میکنه و 60 تا را مصرف میکنه اینها همه فقط برنامه شما از آن اطلاع داره و بازار کاری به این چیزا نداره
    شما تو کد برنامه تون قرار دادی که اگر کاربر 1000 تومان هزینه کرد 100 سکه بهش بدی. اگر کاربر 60 سکه داشت و دوباره خرید کرد تعداد سکه ها میشه 160 تا. بازار فقط اینجا پرداخت را مدیریت میکنه نه تعداد سکه ها و تمام شدن آنها را.
    شما در برنامه یک متغییر از نوع Integer قرار میدی و هر بار بعد از خرید int +=100 میکنی تا هر بار 100 سکه اضافه بشه و مقدار را ذخیره کنه

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

  34. #314
    کاربر دائمی آواتار c0mmander
    تاریخ عضویت
    اردیبهشت 1393
    محل زندگی
    خونمون D:
    پست
    563

    نقل قول: پرداخت درون برنامه ای

    نقل قول نوشته شده توسط hamedjj مشاهده تاپیک
    میگم این لغت مصرف کردن گیج کننده برای همین میگم بازار اصلا به برنامه شما یا کاربر چقدر مهمات داره و ... کاری نداره. وقتی کاربر 100 سکه خریداری میکنه و 60 تا را مصرف میکنه اینها همه فقط برنامه شما از آن اطلاع داره و بازار کاری به این چیزا نداره شما تو کد برنامه تون قرار دادی که اگر کاربر 1000 تومان هزینه کرد 100 سکه بهش بدی. اگر کاربر 60 سکه داشت و دوباره خرید کرد تعداد سکه ها میشه 160 تا. بازار فقط اینجا پرداخت را مدیریت میکنه نه تعداد سکه ها و تمام شدن آنها را. شما در برنامه یک متغییر از نوع Integer قرار میدی و هر بار بعد از خرید int +=100 میکنی تا هر بار 100 سکه اضافه بشه و مقدار را ذخیره کنه برای اتمام سکه هم از یه دستور if استفاده میکنی و میگی که مثلا اگر تعداد کوچکتر و مساوی صفر بود صفحه خرید سکه را بالا بیار.
    دمت گرم .بالاخره پیاده سازیش کردم. با کمکت کاملا متوجه شدم که چرا باید بلافاصله بعد از خرید قسمت های مصرفی consume بودن خرید را به بازار گفت. و تمام مدریت خرید با برنامه هست. البته عنوان بسته های غیر مصرفی خریداری شده هم برای برنامه میتونه ارسال کنه و همین طور مشخصات محصول رو بصورت json که اونم خیلی در نوع خودش خوبه. بازم یک دنیا تشکر ازت به خاطر راهنماییت.

  35. #315

    نقل قول: پرداخت درون برنامه ای

    نقل قول نوشته شده توسط hamedjj مشاهده تاپیک
    1 -
    شما وقتی کاربر خرید را انجام داد با یک قطعه کد به بازار میگویید که ای بازار این خریدی که انجام شد از نوع مصرفی است و کاربر دوباره میتواند همین محصول را خریداری کند.
    صرف اینکه با اون قطعه کد به بازار بگیم این خرید از نوع مصرفی است که نیست، در واقع ما با کد:
    mHelper.consumeAsync(Purchase, mConsumeFinishedListener);

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

  36. #316

    نقل قول: پرداخت درون برنامه ای

    سلام
    متغیر payload رو برای یک پرداختی که فقط قراره برنامه رو Premium کنه چطور باید مقداردهی کنیم تا ایده آل ها حفظ شوند؟

    /*
    * TODO: verify that the developer payload of the purchase is correct.
    * It will be the same one that you sent when initiating the purchase.
    *
    * WARNING: Locally generating a random string when starting a purchase
    * and verifying it here might seem like a good approach, but this will
    * fail in the case where the user purchases an item on one device and
    * then uses your app on a different device, because on the other device
    * you will not have access to the random string you originally
    * generated.
    *
    * So a good developer payload has these characteristics:
    *
    * 1. If two different users purchase an item, the payload is different
    * between them, so that one user's purchase can't be replayed to
    * another user.
    *
    * 2. The payload must be such that you can verify it even when the app
    * wasn't the one who initiated the purchase flow (so that items
    * purchased by the user on one device work on other devices owned by
    * the user).
    *
    * Using your own server to store and verify developer payloads across
    * app installations is recommended.
    */
    این بخش در قسمت کامنت های برنامه trivial Drive بود. اما من نمیدونم چطور باید generate کنم تا ملاک هایی که گفته برقرار باشند..!!
    ممنون میشم راهنماییم کنین...

  37. #317

    نقل قول: پرداخت درون برنامه ای

    سلام دوستان
    داشتم پرداخت درون برنامه ای رو پیاده سازی میکردم و به ی نکته ساده پی بردم که چون رعایت نکرده بودم کارم سخت شده بود
    اونم اینه که حتما IInAppBillingService.aidl در پوشه com/android/vending/billing قرار بدید.
    فولدر util رو هم در فولدر پروژه قرار بدید و در هر یک از کلاسهای داخلش حتما اسم پکیج رو تصحیح کنید . مثلا طبق عکس باید بشه
    package com.hamid.util;



    Untitled.png

    و اگر از Proguard برای مبهم کردن کد استفاده می‌کنید،به فایل proguard-project.txt خط زیر را باید اضافه کنید:
    keep class com.android.vending.billing



    جاداره از دوستمون hamedjj که این پروژه رو آماده کردن هم تشکر کنم https://github.com/hamedjj/BazaarInAppBilling
    آخرین ویرایش به وسیله HAMID484 : سه شنبه 07 بهمن 1393 در 10:00 صبح

  38. #318
    کاربر دائمی آواتار hosseinaryai
    تاریخ عضویت
    مهر 1391
    محل زندگی
    بابل
    پست
    333

    نقل قول: پرداخت درون برنامه ای

    نمی دونم جاش اینجا درسته بپرسم یا نه .. شایدم سوالم خیلی ابتدایی باشه ، شما به بزرگی خودتون ببخشین
    خب سوال اینه
    من توی eclips یه برنامه درون پرداختی نوشتم و بدون هیچ مشکلی هم انجام شد .. اما الان رفتم توی android studio .. راستش یکم گیر افتادم ..
    اضافه کردن فایلاش مثل eclips نیست .. بازار میگه باید اینکار رو انجام بدم :
    فایل AIDL را در پروژه خود قرار داده و از ابزار Ant برای build کردن پروژه خود استفاده کنید
    خب اینو نمی دونم چیه .. دقیقن باید چیکار کنم ؟!با ant کار نکردم تا الان .. این همون اپاچی میشه ؟

  39. #319

    نقل قول: پرداخت درون برنامه ای

    من برنامه ام رو با پرداخت درون برنامه ای نوشتم و روی گوشیه خودم xperia z , android 4.4 درست کار میکنه. برای بازار فرستادم اما پیغام داده که پرداخت درون برنامه ای روی Huawei G750 با اندروید ۴.۲.۲ مشکل داره!
    از دوستان کسی با همچین مشکلی برخورد داشته؟ ضمنا من از proguard هم استفاده کردم

  40. #320

    نقل قول: پرداخت درون برنامه ای

    نقل قول نوشته شده توسط HAMID484 مشاهده تاپیک
    من برنامه ام رو با پرداخت درون برنامه ای نوشتم و روی گوشیه خودم xperia z , android 4.4 درست کار میکنه. برای بازار فرستادم اما پیغام داده که پرداخت درون برنامه ای روی Huawei G750 با اندروید ۴.۲.۲ مشکل داره!
    از دوستان کسی با همچین مشکلی برخورد داشته؟ ضمنا من از proguard هم استفاده کردم
    https://github.com/congenialmobile/T...rive/issues/1#

صفحه 8 از 10 اولاول ... 678910 آخرآخر

تاپیک های مشابه

  1. شماره گیری اتوماتیک از درون برنامه
    نوشته شده توسط مهران جمشیدی در بخش کامپوننت های سایر شرکت ها، و توسعه کامپوننت
    پاسخ: 10
    آخرین پست: شنبه 18 آبان 1387, 06:23 صبح
  2. اجرای یک کد دلفی از درون برنامه دلفی
    نوشته شده توسط Mahdavi در بخش برنامه نویسی در Delphi
    پاسخ: 2
    آخرین پست: دوشنبه 17 آذر 1382, 14:46 عصر
  3. پاسخ: 13
    آخرین پست: دوشنبه 03 آذر 1382, 02:04 صبح
  4. Disconnect از درون برنامه
    نوشته شده توسط ساران سافت در بخش VB.NET
    پاسخ: 3
    آخرین پست: پنج شنبه 29 آبان 1382, 14:56 عصر
  5. اجرای برنامه های exe از درون برنامه دلفی
    نوشته شده توسط reza5 در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 3
    آخرین پست: چهارشنبه 30 مهر 1382, 17:02 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •