Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

the item you requested is not available for purchase - in-app billing

I have a trouble of testing android billing! Someone help me! I do an example:

MainActivity

public class MainActivity extends Activity {
    IabHelper mHelper;

    IabHelper.QueryInventoryFinishedListener mQueryFinishedListener = new IabHelper.QueryInventoryFinishedListener() {
        public void onQueryInventoryFinished(IabResult result, Inventory inventory){
            if (result.isFailure()) {
                // handle error
                Toast.makeText(getApplicationContext(), "debug: Query occur error!", Toast.LENGTH_SHORT).show();
                return;
            }

            if (result.isSuccess()) {
                Toast.makeText(getApplicationContext(), "debug: Query successfully!", Toast.LENGTH_SHORT).show();
                Toast.makeText(getApplicationContext(), "debug: " + inventory.getSkuDetails("product_1").getTitle(), Toast.LENGTH_SHORT).show();
                Toast.makeText(getApplicationContext(), "debug: " + inventory.getSkuDetails("product_2").getTitle(), Toast.LENGTH_SHORT).show();
                return;
            }
        }
    };

    IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
        public void onIabPurchaseFinished(IabResult result, Purchase purchase)
        {
            if (result.isFailure()) {
                Toast.makeText(getApplicationContext(), "debug: purcharge failed", Toast.LENGTH_SHORT).show();
                Log.d("Purchrge", "Error purchasing: " + result);
                return;
            }
            switch (purchase.getSku()){
                case "product_1":
                    Toast.makeText(getApplicationContext(), "debug: purcharge product 1", Toast.LENGTH_SHORT).show();
                    break;
                case "product_2":
                    Toast.makeText(getApplicationContext(), "debug: purcharge product 2", Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    };

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

        String base64EncodedPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn9zEWzKIvk/hScbZyrZ6HE4y679DUIQPsxfz0mQJmnv3RYCdd7Zcy+peOtnvRyZzmbrAcYmW1FOsH/3dJwuAmdO+Wd9HyDre+vJwAAQ/QI2WA4lbWSl4jVEr7AX9p3J8pBIy3UKRmhjk/PFN8N1jYDUnnPbZJnSkd6eRpiET+MMUsNHIoCxXzmqXvy3bFh/L61gtqUW/acOkWuXnLkn6rVVBzHUL9YLeVRdnN86DnejJySe8DniiAH0sfMP7wxU2y4GoKPjXDeZFNZr4ii22re7ogpIjEfUEb3+FxtxfbjPFz6hONsy/NofkEDznci5fPk8FtulhVbkJ82Rpiq6BXQIDAQAB";
        mHelper = new IabHelper(this, base64EncodedPublicKey);

    }

    public void query(View view){
        mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
            public void onIabSetupFinished(IabResult result) {
                if (!result.isSuccess()) {
                    // Oh noes, there was a problem.
                    Log.d("Billing error: ", "Problem setting up In-app Billing: " + result);
                    Toast.makeText(getApplicationContext(), "debug: IAB is not set up!", Toast.LENGTH_SHORT).show();
                }
                // Hooray, IAB is fully set up!
                Toast.makeText(getApplicationContext(), "debug: Hooray, IAB is fully set up!", Toast.LENGTH_SHORT).show();
                List additionalSkuList = new ArrayList();
                additionalSkuList.add("product_1");
                additionalSkuList.add("product_2");
                mHelper.queryInventoryAsync(true, additionalSkuList, mQueryFinishedListener);
            }
        });
    }

    public void pay(View view){
        mHelper.launchPurchaseFlow(this, "product_1", 10001, mPurchaseFinishedListener, "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ");
    }

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

activity_main

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Query"
        android:onClick="query"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Pay"
        android:onClick="pay"/>
</LinearLayout>

when deploying the app, I got two buttons (Query, Pay). I click Query button before clicking Pay button.

Then I get the form with:

The item you requested is not available for purchase

I signed the APK in release mode. The app is published and the Products are active. Someone help me with finding our the problem?

like image 391
Bao HQ Avatar asked Feb 10 '23 03:02

Bao HQ


1 Answers

Make sure the android:versionCode in your AndroidManifest.xml file you are testing, has the same version number as in the .apk you uploaded as your current active alpha version in the Developer Console.

This at least was my issue as I was getting the same error.

like image 167
Tanasis Avatar answered Feb 12 '23 10:02

Tanasis