IJustWannaBuyThings
Sick of implementing raw Android In-app Billing APIs? Sick of using other developer's APIs that make heavy use of dependencies?
Me too.
Not the most suckiest Android In-app Billing wrapper
I can't guarantee that this is the most complete or advanced Android In-app Billing helper but it simply works for me - so suck it other helpers.
Note: This is only built for Android In-app Billing V3
More Note: Consumables and subscriptions are not included in this library yet
Setup
- Download JAR into your Android project's libs directory - ijustwannabuythings-0.0.2.jar
- Add
<uses-permission android:name="com.android.vending.BILLING" />
to Manifest.xml - Copy IInAppBillingService.aidl into src/com.android.vending.billing
Subclassing IJustWannaBuyThingsActivity - (The easiest way)
- Key components for setting up - override these methods
- onQueryAllTheThings(int responseCode, ArrayList responseList)
- onBuyAThing(int responseCode, JSONObject purchasedData)
- onWhatsMine(int responseCode, ArrayList ownedSkus, ArrayList purchaseDataList, ArrayList signatureList) {
- Key components for interacting
- this.queryAllTheThings(Arrays.asList(new String[]{"bacon"}));
- this.buyAThing("bacon");
- this.whatsMine();
public class SubclassedActivity extends IJustWannaBuyThingsActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void onConnect() {}
@Override
public void onDisconnect() {}
@Override
public void onQueryAllTheThings(int responseCode, ArrayList<JSONObject> responseList) {
Log.d("IJustWannaBuyThings", Arrays.toString(responseList.toArray()));
}
@Override
public void onBuyAThing(int responseCode, JSONObject purchasedData) {
Log.d("IJustWannaBuyThings", purchasedData.toString());
}
@Override
public void onWhatsMine(int responseCode, ArrayList<String> ownedSkus, ArrayList<JSONObject> purchaseDataList, ArrayList<String> signatureList) {
Log.d("IJustWannaBuyThings", Arrays.toString(ownedSkus.toArray()));
}
/**
* An onClick handler to show all products
* @param view
*/
public void onClickShowMeThings(View view) {
// Queries information about the supplied skus
this.queryAllTheThings(Arrays.asList(new String[]{"bacon"}));
}
/**
* An onClick handler to buy a bacon
* @param view
*/
public void onClickBuyMeBacon(View view) {
// Starts the purchase for a sku
this.buyAThing("bacon");
}
/**
* An onClick get what I bought
* @param view
*/
public void onClickWhatsMine(View view) {
// Starts request to get whats mine
this.whatsMine();
}
}
Implementing in your own Activity
- Key components for setting up
- iJustWannaBuyThings = new IJustWannaBuyThings(this, listener);
- iJustWannaBuyThings.onCreate();
- iJustWannaBuyThings.onActivityResult(requestCode, resultCode, data);
- iJustWannaBuyThings.onDestroy();
- Key components for interacting
- iJustWannaBuyThings.queryAllTheThings(Arrays.asList(new String[]{"bacon"}));
- iJustWannaBuyThings.buyAThing("bacon");
- iJustWannaBuyThings.whatsMine();
public class CustomActivity extends Activity {
private IJustWannaBuyThings iJustWannaBuyThings;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Need to call IJustWannaBuyThings onCreate
iJustWannaBuyThings = new IJustWannaBuyThings(this, listener);
iJustWannaBuyThings.onCreate();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Need to call IJustWannaBuyThings onActivityResult
if (requestCode == IJustWannaBuyThings.REQUEST_BUY_INTENT) {
iJustWannaBuyThings.onActivityResult(requestCode, resultCode, data);
}
super.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onDestroy() {
super.onDestroy();
// Need to call IJustWannaBuyThings onDestroy
iJustWannaBuyThings.onDestroy();
}
/**
* This is our listener for all things I just wanna buy
*/
IJustWannaBuyThingsListener listener = new IJustWannaBuyThingsListener() {
@Override
public void onConnect() {}
@Override
public void onDisconnect() {}
@Override
public void onQueryAllTheThings(int responseCode, ArrayList<JSONObject> responseList) {
// Just displaying the response
if (responseCode == IJustWannaBuyThings.BILLING_RESPONSE_RESULT_OK) {
for (JSONObject obj : responseList) {
Log.d(IJustWannaBuyThings.LOG_TAG, "QueryAllTheThings - " + obj.toString());
}
} else {
Log.d(IJustWannaBuyThings.LOG_TAG, "QueryAllTheThings error occured - " + responseCode);
}
}
@Override
public void onBuyAThing(int responseCode, JSONObject purchasedData) {
// Just displaying the response
if (responseCode == IJustWannaBuyThings.BILLING_RESPONSE_RESULT_OK) {
Log.d(IJustWannaBuyThings.LOG_TAG, "BuyAThing - " + purchasedData.toString());
} else {
Log.d(IJustWannaBuyThings.LOG_TAG, "BuyAThing error occured - " + responseCode);
}
}
@Override
public void onWhatsMine(int responseCode, ArrayList<String> ownedSkus, ArrayList<JSONObject> purchaseDataList, ArrayList<String> signatureList) {
// Just displaying owned skus
for (String ownedSku : ownedSkus) {
Log.d(IJustWannaBuyThings.LOG_TAG, "Owned SKU - " + ownedSku);
}
// Just display purchaseDataList
for (JSONObject purchaseData : purchaseDataList) {
Log.d(IJustWannaBuyThings.LOG_TAG, "Purchase Data - " + purchaseData);
}
}
};
/**
* An onClick handler to show all products
* @param view
*/
public void onClickShowMeThings(View view) {
// Queries information about the supplied skus
iJustWannaBuyThings.queryAllTheThings(Arrays.asList(new String[]{"bacon"}));
}
/**
* An onClick handler to buy a bacon
* @param view
*/
public void onClickBuyMeBacon(View view) {
// Starts the purchase for a sku
iJustWannaBuyThings.buyAThing("bacon");
}
/**
* An onClick handler to get what I bought
* @param view
*/
public void onClickWhatsMine(View view) {
// Starts request to get whats mine
iJustWannaBuyThings.whatsMine();
}
}