Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Application not configured for billing through Google Play

I am working on an android project and I am trying to implement In App Billing V3.

I have uploaded my app to Google Play, and add an IAP to the app. I can successfully retrieve a list of the IAP my app has along with its price but when I actually try to make a purchase my device gets the following error (there is no error in

This version of the application is not configured for billing through Google Play. Check the help centre for more information.

Below is the code that retrieves the IAP's available and does the purchase

ArrayList skuList = new ArrayList();
        skuList.add("mysqlmanager_pro");

        Bundle querySkus = new Bundle();
        querySkus.putStringArrayList("ITEM_ID_LIST", skuList);
        try
        {
            Bundle skuDetail = mService.getSkuDetails(3, getPackageName(), "inapp", querySkus);
            Log.d("Billing", "Response Received");

            int billingResponse = skuDetail.getInt("RESPONSE_CODE");
            if (billingResponse == 0)
            {
                //Get list of IAP's to purcase - NOT NEEDED
                ArrayList responseList = skuDetail.getStringArrayList("DETAILS_LIST");

                Log.d("Billing", "Response");

                Bundle buyIntentBundle = mService.getBuyIntent(3, getPackageName(), 
                        "mysqlmanager_pro", "inapp", "");

                PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT");

                startIntentSenderForResult(pendingIntent.getIntentSender(), 
                        Defines.IntentRequestCodes.IAP_PURCHASE_REQUEST, new Intent(), 
                        Integer.valueOf(0), Integer.valueOf(0), Integer.valueOf(0));
                /*for (String thisResponse : responseList)
                {
                    JSONObject object = new JSONObject(thisResponse);
                    String sku = object.getString("productid");
                    String price = object.getString("price");
                }*/
            }

        }
        catch (Exception ex)
        {
            Log.e("Billing", ex.toString());
        }

My onCreate contains the following

mServiceConn = new ServiceConnection() {

            @Override
            public void onServiceDisconnected(ComponentName name) {
                mService = null;
            }

            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                mService = IInAppBillingService.Stub.asInterface(service);
            }
        };

        bindService(new Intent("com.android.vending.billing.InAppBillingService.BIND"), 
                mServiceConn, Context.BIND_AUTO_CREATE);

Below is my manifest file

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.BoardiesITSolutions.MysqlManager"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="18" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.android.vending.BILLING" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.BoardiesITSolutions.MysqlManager.Agreement"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity 
            android:name=".MainActivity"
            android:label="@string/app_name">
        </activity>
        <activity
            android:name=".NewDBConnection"
            android:label="@string/new_mysql_connection">
        </activity>
        <activity
            android:name=".ConnectionManager"
            android:label="@string/connection_manager">
            <meta-data 
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".MainActivity"/>
        </activity>
        <activity
            android:name=".EditDBConnections"
            android:label="@string/edit_database_connections">
        </activity>
        <activity
            android:name=".ServerStatus"
            android:label="Server Status">
            <meta-data 
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".ConnectionManager"/>
        </activity>
        <activity 
            android:name=".ConnectedDBManagerHost"
            android:label="Connected to DB">
        </activity>
        <receiver android:name="BillingReceiver">
      <intent-filter>
        <action android:name="com.android.vending.billing.IN_APP_NOTIFY" />
        <action android:name="com.android.vending.billing.RESPONSE_CODE" />
        <action android:name="com.android.vending.billing.PURCHASE_STATE_CHANGED" />
      </intent-filter>
    </receiver>
    </application>

</manifest>

Thanks for any help you can provide

like image 535
Boardy Avatar asked Dec 19 '13 21:12

Boardy


1 Answers

There are a few things to consider here:

  1. After uploading your apk to Google Play, you need to wait a while for Google's servers to update (similar to when you publish an update). This can take an hour or two or longer in my experience. So try again in a few hours.

  2. Ensure that the version of the apk you uploaded is configured for IAP (through the permissions), and then only test IAP with a signed apk. That is, export and sign your apk from Eclipse and then install locally onto your device. Otherwise, if you run an unsigned version of the application directly from the IDE, it will not work and you'll see an error.

    Note: You don't need to upload a new apk every time you make minor changes, as long as the currently uploaded draft apk was configured with the correct permissions and you published your IAP items on the dev console. The only annoying part is that you have to export and sign your application each time after making changes and run it on a device locally.

  3. Check that the versionCode of your uploaded apk has the same versionCode as your local version of the apk.

  4. You can not use your developer account to make test purchases, because Google Wallet doesn't allow you to purchase items from yourself. So you need to set up some test accounts on the Developer Console and try purchasing items from a device running the test account.

like image 198
ashatte Avatar answered Nov 04 '22 23:11

ashatte